platform-core/modules/demoConfigs/__init__.py
ValueOn AG ebc4b2a080
Some checks failed
Deploy Plattform-Core (Int) / test (push) Failing after 12s
Deploy Plattform-Core (Int) / deploy (push) Has been skipped
cp adapted to 2026 poweron 2
2026-06-09 09:58:05 +02:00

51 lines
1.6 KiB
Python

# Copyright (c) 2026 PowerOn AG
# All rights reserved.
"""
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)