App deps check

This commit is contained in:
2025-09-21 20:11:38 +02:00
parent eceff6128b
commit 073b35f71a
13 changed files with 147 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
from typing import Union, Type, Callable
from typing import Union, Type, Callable, Self
from cpl.core.log.logger import Logger
from cpl.core.log.logger_abc import LoggerABC
@@ -15,12 +15,17 @@ class ServiceCollection:
_modules: dict[str, Callable] = {}
@classmethod
def with_module(cls, func: Callable, name: str = None):
def with_module(cls, func: Callable, name: str = None) -> type[Self]:
cls._modules[func.__name__ if name is None else name] = func
return cls
def __init__(self):
self._service_descriptors: list[ServiceDescriptor] = []
self._loaded_modules: set[str] = set()
@property
def loaded_modules(self) -> set[str]:
return self._loaded_modules
def _add_descriptor(self, service: Union[type, object], lifetime: ServiceLifetimeEnum, base_type: Callable = None):
found = False
@@ -45,15 +50,15 @@ class ServiceCollection:
return self
def add_singleton(self, service_type: T, service: Service = None):
def add_singleton(self, service_type: T, service: Service = None) -> Self:
self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.singleton, service)
return self
def add_scoped(self, service_type: T, service: Service = None):
def add_scoped(self, service_type: T, service: Service = None) -> Self:
self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.scoped, service)
return self
def add_transient(self, service_type: T, service: Service = None):
def add_transient(self, service_type: T, service: Service = None) -> Self:
self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.transient, service)
return self
@@ -62,7 +67,7 @@ class ServiceCollection:
ServiceProviderABC.set_global_provider(sp)
return sp
def add_module(self, module: str | object):
def add_module(self, module: str | object) -> Self:
if not isinstance(module, str):
module = module.__name__
@@ -70,7 +75,10 @@ class ServiceCollection:
raise ValueError(f"Module {module} not found")
self._modules[module](self)
if module not in self._loaded_modules:
self._loaded_modules.add(module)
return self
def add_logging(self):
def add_logging(self) -> Self:
self.add_transient(LoggerABC, Logger)
return self