f
This commit is contained in:
@@ -25,6 +25,8 @@ from Store._base import Store as BaseStore
|
||||
|
||||
_SHA256_HEX_RE = re.compile(r"^[0-9a-fA-F]{64}$")
|
||||
|
||||
_DISCOVERED_CLASSES_CACHE: Optional[Dict[str, Type[BaseStore]]] = None
|
||||
|
||||
# Backends that failed to initialize earlier in the current process.
|
||||
# Keyed by (store_type, instance_key) where instance_key is the name used under config.store.<type>.<instance_key>.
|
||||
_FAILED_BACKEND_CACHE: Dict[tuple[str,
|
||||
@@ -56,6 +58,10 @@ def _discover_store_classes() -> Dict[str, Type[BaseStore]]:
|
||||
Convention:
|
||||
- The store type key is the normalized class name (e.g. HydrusNetwork -> hydrusnetwork).
|
||||
"""
|
||||
global _DISCOVERED_CLASSES_CACHE
|
||||
if _DISCOVERED_CLASSES_CACHE is not None:
|
||||
return _DISCOVERED_CLASSES_CACHE
|
||||
|
||||
import Store as store_pkg
|
||||
|
||||
discovered: Dict[str,
|
||||
@@ -67,15 +73,21 @@ def _discover_store_classes() -> Dict[str, Type[BaseStore]]:
|
||||
"registry"}:
|
||||
continue
|
||||
|
||||
module = importlib.import_module(f"Store.{module_name}")
|
||||
for _, obj in vars(module).items():
|
||||
if not inspect.isclass(obj):
|
||||
continue
|
||||
if obj is BaseStore:
|
||||
continue
|
||||
if not issubclass(obj, BaseStore):
|
||||
continue
|
||||
discovered[_normalize_store_type(obj.__name__)] = obj
|
||||
try:
|
||||
module = importlib.import_module(f"Store.{module_name}")
|
||||
for _, obj in vars(module).items():
|
||||
if not inspect.isclass(obj):
|
||||
continue
|
||||
if obj is BaseStore:
|
||||
continue
|
||||
if not issubclass(obj, BaseStore):
|
||||
continue
|
||||
discovered[_normalize_store_type(obj.__name__)] = obj
|
||||
except Exception as exc:
|
||||
debug(f"[Store] Failed to import module '{module_name}': {exc}")
|
||||
continue
|
||||
|
||||
_DISCOVERED_CLASSES_CACHE = discovered
|
||||
return discovered
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user