"""场景注册表:按场景码索引,供调度器与 API 统一发现已注册场景。 仿 app.ingest.registry 的设计:类装饰器自动注册,新增场景零改动核心代码。 """ from __future__ import annotations from app.scenarios.base import BaseScenario # 全局注册表:scenario_code -> Scenario 类 SCENARIO_REGISTRY: dict[str, type[BaseScenario]] = {} def register_scenario(cls: type[BaseScenario]) -> type[BaseScenario]: """类装饰器:将场景注册到全局表(按 code 索引)。""" if cls.code: SCENARIO_REGISTRY[cls.code] = cls return cls def get_scenario(code: str) -> type[BaseScenario] | None: """按场景码查找已注册的场景类。""" return SCENARIO_REGISTRY.get(code) def scenario_meta() -> list[dict]: """导出全部已注册场景的元数据,供 /scenarios API 与前端动态渲染。""" return [ { "code": cls.code, "title": cls.title, "label": cls.label, "risk_domain": cls.risk_domain, } for cls in SCENARIO_REGISTRY.values() ]