Commit d7d6e8cf authored by AUTOMATIC1111's avatar AUTOMATIC1111
Browse files

use natural sort for shared.walk_files and shared.listfiles, as well as for dirs in extra networks

parent 7a6abc59
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -443,7 +443,7 @@ def list_available_loras():
    os.makedirs(shared.cmd_opts.lora_dir, exist_ok=True)

    candidates = list(shared.walk_files(shared.cmd_opts.lora_dir, allowed_extensions=[".pt", ".ckpt", ".safetensors"]))
    for filename in sorted(candidates, key=str.lower):
    for filename in candidates:
        if os.path.isdir(filename):
            continue

+11 −3
Original line number Diff line number Diff line
import datetime
import json
import os
import re
import sys
import threading
import time
@@ -832,8 +833,12 @@ mem_mon = modules.memmon.MemUsageMonitor("MemMon", device, opts)
mem_mon.start()


def natural_sort_key(s, regex=re.compile('([0-9]+)')):
    return [int(text) if text.isdigit() else text.lower() for text in regex.split(s)]


def listfiles(dirname):
    filenames = [os.path.join(dirname, x) for x in sorted(os.listdir(dirname), key=str.lower) if not x.startswith(".")]
    filenames = [os.path.join(dirname, x) for x in sorted(os.listdir(dirname), key=natural_sort_key) if not x.startswith(".")]
    return [file for file in filenames if os.path.isfile(file)]


@@ -858,8 +863,11 @@ def walk_files(path, allowed_extensions=None):
    if allowed_extensions is not None:
        allowed_extensions = set(allowed_extensions)

    for root, _, files in os.walk(path, followlinks=True):
        for filename in files:
    items = list(os.walk(path, followlinks=True))
    items = sorted(items, key=lambda x: natural_sort_key(x[0]))

    for root, _, files in items:
        for filename in sorted(files, key=natural_sort_key):
            if allowed_extensions is not None:
                _, ext = os.path.splitext(filename)
                if ext not in allowed_extensions:
+2 −2
Original line number Diff line number Diff line
@@ -90,8 +90,8 @@ class ExtraNetworksPage:

        subdirs = {}
        for parentdir in [os.path.abspath(x) for x in self.allowed_directories_for_previews()]:
            for root, dirs, _ in os.walk(parentdir, followlinks=True):
                for dirname in dirs:
            for root, dirs, _ in sorted(os.walk(parentdir, followlinks=True), key=lambda x: shared.natural_sort_key(x[0])):
                for dirname in sorted(dirs, key=shared.natural_sort_key):
                    x = os.path.join(root, dirname)

                    if not os.path.isdir(x):