34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
# Copyright (c) 2025 Patrick Motsch
|
|
"""
|
|
System-component lifecycle-hook registry (Layer L0 — shared).
|
|
|
|
Higher-layer system components (e.g. workflowAutomation) register their
|
|
lifecycle hooks here at boot time via ``app.py`` (Composition Root, L7).
|
|
Interface modules read the registry generically — no upward imports needed.
|
|
|
|
Supported events: ``onBootstrap``, ``onMandateDelete``, ``onMandateProvision``,
|
|
``onInstanceCreate``, ``onUserMandateCreate``, ``onUserMandateDelete``,
|
|
``onUserBudgetAdjust``, ``onStorageChanged``.
|
|
|
|
This is the same inversion pattern used by
|
|
``serviceAgent/externalToolRegistry.py`` for agent tools.
|
|
"""
|
|
|
|
import logging
|
|
from typing import Any, Callable, Dict, List
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
_hooks: Dict[str, List[Callable[..., Any]]] = {}
|
|
|
|
|
|
def registerLifecycleHook(eventName: str, handler: Callable[..., Any]) -> None:
|
|
"""Register a lifecycle handler for *eventName*."""
|
|
_hooks.setdefault(eventName, []).append(handler)
|
|
logger.info("Registered system-component lifecycle hook: %s -> %s",
|
|
eventName, getattr(handler, "__qualname__", repr(handler)))
|
|
|
|
|
|
def getLifecycleHooks(eventName: str) -> List[Callable[..., Any]]:
|
|
"""Return all registered handlers for *eventName* (may be empty)."""
|
|
return list(_hooks.get(eventName, []))
|