platform-core/modules/demoConfigs/__init__.py
ValueOn AG bc7c6fe27c
Some checks failed
Deploy Plattform-Core (Int) / test (push) Failing after 13s
Deploy Plattform-Core (Int) / deploy (push) Has been skipped
elimination of technical issues (imports)
2026-06-06 00:32:45 +02:00

49 lines
1.5 KiB
Python

"""
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)