# Copyright (c) 2025-2026 马建军. All rights reserved. """Application module registry and startup wiring.""" from __future__ import annotations import importlib import logging from typing import TYPE_CHECKING, Any if TYPE_CHECKING: from modules.core.deps import AppDeps logger = logging.getLogger(__name__) # Registration order: core services first, trading last among features. _MODULE_NAMES = ( "modules.web", "modules.market", "modules.keys", "modules.plans", "modules.notify", "modules.records", "modules.stats", "modules.fees", "modules.backup", "modules.settings", "modules.risk", "modules.strategy", "modules.ctp", "modules.trading", ) def register_all_modules(deps: "AppDeps") -> None: for name in _MODULE_NAMES: mod = importlib.import_module(name) register = getattr(mod, "register", None) if not callable(register): logger.warning("module %s has no register()", name) continue register(deps) logger.debug("registered %s", name) def start_module_workers(deps: "AppDeps") -> None: """Background threads owned by feature modules.""" from modules.ctp.vnpy_bridge import try_init_vnpy try_init_vnpy({}) for name in ("modules.market",): mod = importlib.import_module(name) start = getattr(mod, "start_workers", None) if callable(start): start(deps)