Source code for pepperpy.dependencies

"""Dependencies module."""

from dataclasses import dataclass, field
from typing import Any, Dict, Optional

from pepperpy.core import PepperpyError
from pepperpy.module import BaseModule, ModuleConfig


[docs] class DependencyError(PepperpyError): """Dependency error.""" def __init__( self, message: str, details: Optional[Dict[str, Any]] = None, cause: Optional[Exception] = None, ) -> None: super().__init__(message, details, cause)
[docs] @dataclass class DependencyConfig(ModuleConfig): """Dependency configuration.""" name: str = "dependency_manager" metadata: Dict[str, Any] = field(default_factory=dict)
[docs] class DependencyManager(BaseModule[DependencyConfig]): """Dependency manager."""
[docs] def __init__(self, config: Optional[DependencyConfig] = None) -> None: """Initialize dependency manager. Args: config: Dependency configuration """ super().__init__(config or DependencyConfig()) self._dependencies: Dict[str, Any] = {}
def _ensure_initialized(self) -> None: """Ensure manager is initialized. Raises: DependencyError: If manager is not initialized """ if not self.is_initialized: raise DependencyError( "Dependency manager is not initialized", {"manager_name": self.config.name}, ) async def _setup(self) -> None: """Set up dependency manager.""" self._dependencies = {} async def _teardown(self) -> None: """Clean up dependency manager.""" self._dependencies = {}
[docs] def register(self, name: str, dependency: Any) -> None: """Register dependency. Args: name: Dependency name dependency: Dependency instance Raises: DependencyError: If dependency cannot be registered """ self._ensure_initialized() if name in self._dependencies: raise DependencyError( "Dependency already registered", {"name": name, "manager_name": self.config.name}, ) self._dependencies[name] = dependency
[docs] def get(self, name: str) -> Any: """Get dependency. Args: name: Dependency name Returns: Dependency instance Raises: DependencyError: If dependency is not found """ self._ensure_initialized() if name not in self._dependencies: raise DependencyError( "Dependency not found", {"name": name, "manager_name": self.config.name}, ) return self._dependencies[name]
[docs] def unregister(self, name: str) -> None: """Unregister dependency. Args: name: Dependency name Raises: DependencyError: If dependency cannot be unregistered """ self._ensure_initialized() if name not in self._dependencies: raise DependencyError( "Dependency not found", {"name": name, "manager_name": self.config.name}, ) del self._dependencies[name]
[docs] def clear(self) -> None: """Clear all dependencies. Raises: DependencyError: If dependencies cannot be cleared """ self._ensure_initialized() self._dependencies = {}
__all__ = ["DependencyConfig", "DependencyError", "DependencyManager"]