|
@@ -10,6 +10,10 @@ from modules import shared, errors, cache, scripts
|
|
|
from modules.gitpython_hack import Repo
|
|
|
from modules.paths_internal import extensions_dir, extensions_builtin_dir, script_path # noqa: F401
|
|
|
|
|
|
+extensions: list[Extension] = []
|
|
|
+extension_paths: dict[str, Extension] = {}
|
|
|
+loaded_extensions: dict[str, Exception] = {}
|
|
|
+
|
|
|
|
|
|
os.makedirs(extensions_dir, exist_ok=True)
|
|
|
|
|
@@ -50,7 +54,7 @@ class ExtensionMetadata:
|
|
|
self.canonical_name = self.config.get("Extension", "Name", fallback=canonical_name)
|
|
|
self.canonical_name = canonical_name.lower().strip()
|
|
|
|
|
|
- self.requires = self.get_script_requirements("Requires", "Extension")
|
|
|
+ self.requires = None
|
|
|
|
|
|
def get_script_requirements(self, field, section, extra_section=None):
|
|
|
"""reads a list of requirements from the config; field is the name of the field in the ini file,
|
|
@@ -62,7 +66,33 @@ class ExtensionMetadata:
|
|
|
if extra_section:
|
|
|
x = x + ', ' + self.config.get(extra_section, field, fallback='')
|
|
|
|
|
|
- return self.parse_list(x.lower())
|
|
|
+ tmp_list = self.parse_list(x.lower())
|
|
|
+
|
|
|
+ if len(tmp_list) >= 3:
|
|
|
+ names_variants = []
|
|
|
+ i = 0
|
|
|
+ while i < len(tmp_list) - 2:
|
|
|
+ if tmp_list[i] != "|":
|
|
|
+ names_variants.append([tmp_list[i]])
|
|
|
+ i += 1
|
|
|
+ else:
|
|
|
+ names_variants[-1].append(tmp_list[i + 1])
|
|
|
+ i += 2
|
|
|
+ while i < len(tmp_list):
|
|
|
+ names_variants.append([tmp_list[i]])
|
|
|
+ i += 1
|
|
|
+
|
|
|
+ result_list = []
|
|
|
+
|
|
|
+ for name_variants in names_variants:
|
|
|
+ for variant in name_variants:
|
|
|
+ if variant in loaded_extensions.keys():
|
|
|
+ break
|
|
|
+ result_list.append(variant)
|
|
|
+ else:
|
|
|
+ result_list = tmp_list
|
|
|
+
|
|
|
+ return result_list
|
|
|
|
|
|
def parse_list(self, text):
|
|
|
"""converts a line from config ("ext1 ext2, ext3 ") into a python list (["ext1", "ext2", "ext3"])"""
|
|
@@ -213,6 +243,7 @@ class Extension:
|
|
|
def list_extensions():
|
|
|
extensions.clear()
|
|
|
extension_paths.clear()
|
|
|
+ loaded_extensions.clear()
|
|
|
|
|
|
if shared.cmd_opts.disable_all_extensions:
|
|
|
print("*** \"--disable-all-extensions\" arg was used, will not load any extensions ***")
|
|
@@ -223,7 +254,6 @@ def list_extensions():
|
|
|
elif shared.opts.disable_all_extensions == "extra":
|
|
|
print("*** \"Disable all extensions\" option was set, will only load built-in extensions ***")
|
|
|
|
|
|
- loaded_extensions = {}
|
|
|
|
|
|
# scan through extensions directory and load metadata
|
|
|
for dirname in [extensions_builtin_dir, extensions_dir]:
|
|
@@ -250,6 +280,9 @@ def list_extensions():
|
|
|
extension_paths[extension.path] = extension
|
|
|
loaded_extensions[canonical_name] = extension
|
|
|
|
|
|
+ for extension in extensions:
|
|
|
+ extension.metadata.requires = extension.metadata.get_script_requirements("Requires", "Extension")
|
|
|
+
|
|
|
# check for requirements
|
|
|
for extension in extensions:
|
|
|
if not extension.enabled:
|
|
@@ -279,6 +312,3 @@ def find_extension(filename):
|
|
|
|
|
|
return None
|
|
|
|
|
|
-
|
|
|
-extensions: list[Extension] = []
|
|
|
-extension_paths: dict[str, Extension] = {}
|