import os import re from modules import shared from modules.paths_internal import script_path, cwd 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=natural_sort_key) if not x.startswith(".")] return [file for file in filenames if os.path.isfile(file)] def html_path(filename): return os.path.join(script_path, "html", filename) def html(filename): path = html_path(filename) try: with open(path, encoding="utf8") as file: return file.read() except OSError: return "" def walk_files(path, allowed_extensions=None): if not os.path.exists(path): return if allowed_extensions is not None: allowed_extensions = set(allowed_extensions) 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: continue if not shared.opts.list_hidden_files and ("/." in root or "\\." in root): continue yield os.path.join(root, filename) def ldm_print(*args, **kwargs): if shared.opts.hide_ldm_prints: return print(*args, **kwargs) def truncate_path(target_path, base_path=cwd): abs_target, abs_base = os.path.abspath(target_path), os.path.abspath(base_path) try: if os.path.commonpath([abs_target, abs_base]) == abs_base: return os.path.relpath(abs_target, abs_base) except ValueError: pass return abs_target