""" Demo Configs — Auto-Discovery Module Scans this folder for Python files that contain subclasses of BaseDemoConfig and exposes them via getAvailableDemoConfigs(). """ import importlib import inspect import logging import pkgutil from typing import Dict from modules.demoConfigs.baseDemoConfig import BaseDemoConfig logger = logging.getLogger(__name__) _configCache: Dict[str, BaseDemoConfig] = {} def getAvailableDemoConfigs() -> Dict[str, BaseDemoConfig]: """Return a dict of code -> instance for every discovered demo config.""" if _configCache: return _configCache package = __name__ packagePath = __path__ for importer, moduleName, isPkg in pkgutil.iter_modules(packagePath): if moduleName.startswith("_"): continue try: module = importlib.import_module(f"{package}.{moduleName}") for name, obj in inspect.getmembers(module, inspect.isclass): if issubclass(obj, BaseDemoConfig) and obj is not BaseDemoConfig: instance = obj() if instance.code: _configCache[instance.code] = instance logger.info(f"Discovered demo config: {instance.code} ({instance.label})") except Exception as e: logger.warning(f"Failed to load demo config module '{moduleName}': {e}") return _configCache def getDemoConfigByCode(code: str) -> BaseDemoConfig | None: """Get a specific demo config by its code.""" configs = getAvailableDemoConfigs() return configs.get(code)