diff --git a/src/cpl_core/configuration/configuration.py b/src/cpl_core/configuration/configuration.py index 72fafc2f..2e3baa0f 100644 --- a/src/cpl_core/configuration/configuration.py +++ b/src/cpl_core/configuration/configuration.py @@ -24,7 +24,7 @@ from cpl_core.dependency_injection.service_provider_abc import ServiceProviderAB from cpl_core.environment.application_environment import ApplicationEnvironment from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC from cpl_core.environment.environment_name_enum import EnvironmentNameEnum -from cpl_core.type import T +from cpl_core.type import T, R from cpl_core.utils.json_processor import JSONProcessor @@ -316,7 +316,7 @@ class Configuration(ConfigurationABC): for arg in self._argument_types: call(arg) - def get_configuration(self, search_type: T) -> Optional[T]: + def get_configuration(self, search_type: T) -> Optional[R]: if type(search_type) is str: if search_type == ConfigurationVariableNameEnum.environment.value: return self._application_environment.environment_name @@ -357,7 +357,7 @@ class Configuration(ConfigurationABC): if exe.validators is not None: abort = False for validator_type in exe.validators: - validator: ValidatorABC = services.get_service(validator_type) + validator = services.get_service(validator_type) result = validator.validate() abort = not result if abort: @@ -366,7 +366,7 @@ class Configuration(ConfigurationABC): if abort: sys.exit() - cmd: ArgumentExecutableABC = services.get_service(exe.executable_type) + cmd = services.get_service(exe.executable_type) self._handle_pre_or_post_executables(True, exe, services) self._set_variable("ACTIVE_EXECUTABLE", exe.name) args = self.get_configuration("ARGS") diff --git a/src/cpl_core/configuration/configuration_abc.py b/src/cpl_core/configuration/configuration_abc.py index 16beb725..66bf3e35 100644 --- a/src/cpl_core/configuration/configuration_abc.py +++ b/src/cpl_core/configuration/configuration_abc.py @@ -6,7 +6,7 @@ from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC from cpl_core.configuration.argument_abc import ArgumentABC from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_core.type import T +from cpl_core.type import T, R class ConfigurationABC(ABC): @@ -124,7 +124,7 @@ class ConfigurationABC(ABC): pass @abstractmethod - def get_configuration(self, search_type: T) -> Optional[T]: + def get_configuration(self, search_type: T) -> Optional[R]: r"""Returns value from configuration by given type Parameter: diff --git a/src/cpl_core/dependency_injection/service_collection.py b/src/cpl_core/dependency_injection/service_collection.py index 4f6be8c7..6b505765 100644 --- a/src/cpl_core/dependency_injection/service_collection.py +++ b/src/cpl_core/dependency_injection/service_collection.py @@ -61,15 +61,15 @@ class ServiceCollection(ServiceCollectionABC): self.add_transient(PipeABC, pipe) return self - def add_singleton(self, service_type: Type[T], service: T = None): + def add_singleton(self, service_type: T, service: T = None): self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.singleton, service) return self - def add_scoped(self, service_type: Type[T], service: Callable = None): + def add_scoped(self, service_type: T, service: T = None): self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.scoped, service) return self - def add_transient(self, service_type: Type[T], service: T = None): + def add_transient(self, service_type: T, service: T = None): self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.transient, service) return self diff --git a/src/cpl_core/dependency_injection/service_collection_abc.py b/src/cpl_core/dependency_injection/service_collection_abc.py index 62c1b5a8..8da9a519 100644 --- a/src/cpl_core/dependency_injection/service_collection_abc.py +++ b/src/cpl_core/dependency_injection/service_collection_abc.py @@ -46,7 +46,7 @@ class ServiceCollectionABC(ABC): pass @abstractmethod - def add_transient(self, service_type: Type[T], service: T = None) -> "ServiceCollectionABC": + def add_transient(self, service_type: T, service: T = None) -> "ServiceCollectionABC": r"""Adds a service with transient lifetime Parameter: @@ -61,7 +61,7 @@ class ServiceCollectionABC(ABC): pass @abstractmethod - def add_scoped(self, service_type: Type[T], service: T = None) -> "ServiceCollectionABC": + def add_scoped(self, service_type: T, service: T = None) -> "ServiceCollectionABC": r"""Adds a service with scoped lifetime Parameter: @@ -76,7 +76,7 @@ class ServiceCollectionABC(ABC): pass @abstractmethod - def add_singleton(self, service_type: Type[T], service: T = None) -> "ServiceCollectionABC": + def add_singleton(self, service_type: T, service: T = None) -> "ServiceCollectionABC": r"""Adds a service with singleton lifetime Parameter: diff --git a/src/cpl_core/dependency_injection/service_provider.py b/src/cpl_core/dependency_injection/service_provider.py index 3b63eaa3..164012ba 100644 --- a/src/cpl_core/dependency_injection/service_provider.py +++ b/src/cpl_core/dependency_injection/service_provider.py @@ -12,7 +12,7 @@ from cpl_core.dependency_injection.service_descriptor import ServiceDescriptor from cpl_core.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC -from cpl_core.type import T +from cpl_core.type import T, R class ServiceProvider(ServiceProviderABC): @@ -80,7 +80,7 @@ class ServiceProvider(ServiceProviderABC): return implementations - def build_by_signature(self, sig: Signature) -> list[T]: + def build_by_signature(self, sig: Signature) -> list[R]: params = [] for param in sig.parameters.items(): parameter = param[1] @@ -138,7 +138,7 @@ class ServiceProvider(ServiceProviderABC): sb = ScopeBuilder(ServiceProvider(descriptors, self._configuration, self._database_context)) return sb.build() - def get_service(self, service_type: T, *args, **kwargs) -> Optional[T]: + def get_service(self, service_type: T, *args, **kwargs) -> Optional[R]: result = self._find_service(service_type) if result is None: @@ -157,7 +157,7 @@ class ServiceProvider(ServiceProviderABC): return implementation - def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[T]]: + def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[R]]: implementations = [] if typing.get_origin(service_type) == list: diff --git a/src/cpl_core/dependency_injection/service_provider_abc.py b/src/cpl_core/dependency_injection/service_provider_abc.py index 3af4b5fe..dde58278 100644 --- a/src/cpl_core/dependency_injection/service_provider_abc.py +++ b/src/cpl_core/dependency_injection/service_provider_abc.py @@ -4,7 +4,7 @@ from inspect import Signature, signature from typing import Optional, Type from cpl_core.dependency_injection.scope_abc import ScopeABC -from cpl_core.type import T +from cpl_core.type import T, R class ServiceProviderABC(ABC): @@ -21,7 +21,7 @@ class ServiceProviderABC(ABC): cls._provider = provider @abstractmethod - def build_by_signature(self, sig: Signature) -> list[T]: + def build_by_signature(self, sig: Signature) -> list[R]: pass @abstractmethod @@ -61,7 +61,7 @@ class ServiceProviderABC(ABC): pass @abstractmethod - def get_service(self, instance_type: T, *args, **kwargs) -> Optional[T]: + def get_service(self, instance_type: T, *args, **kwargs) -> Optional[R]: r"""Returns instance of given type Parameter @@ -76,7 +76,7 @@ class ServiceProviderABC(ABC): pass @abstractmethod - def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[T]]: + def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[R]]: r"""Returns instance of given type Parameter diff --git a/src/cpl_core/type.py b/src/cpl_core/type.py index b186d5ad..394d5c67 100644 --- a/src/cpl_core/type.py +++ b/src/cpl_core/type.py @@ -1,3 +1,4 @@ from typing import TypeVar T = TypeVar("T") +R = TypeVar("R")