Improved dependency injection
This commit is contained in:
parent
6452226b50
commit
69211cc9e8
@ -134,7 +134,7 @@ class Configuration(ConfigurationABC):
|
||||
|
||||
exit()
|
||||
|
||||
def add_json_file(self, name: str, optional: bool = None, output: bool = False):
|
||||
def add_json_file(self, name: str, optional: bool = None, output: bool = True):
|
||||
if self._hosting_environment.content_root_path.endswith('/') and not name.startswith('/'):
|
||||
file_path = f'{self._hosting_environment.content_root_path}{name}'
|
||||
else:
|
||||
@ -177,8 +177,7 @@ class Configuration(ConfigurationABC):
|
||||
def add_configuration(self, key_type: type, value: ConfigurationModelABC):
|
||||
self._config[key_type] = value
|
||||
|
||||
def get_configuration(self, search_type: Union[str, Type[ConfigurationModelABC]]) -> Union[
|
||||
str, Callable[ConfigurationModelABC]]:
|
||||
def get_configuration(self, search_type: Union[str, Type[ConfigurationModelABC]]) -> Union[str, Callable[ConfigurationModelABC]]:
|
||||
if search_type not in self._config:
|
||||
raise Exception(f'Config model by type {search_type} not found')
|
||||
|
||||
|
@ -37,7 +37,7 @@ class ConfigurationABC(ABC):
|
||||
def add_console_arguments(self): pass
|
||||
|
||||
@abstractmethod
|
||||
def add_json_file(self, name: str, optional: bool = None, output: bool = False): pass
|
||||
def add_json_file(self, name: str, optional: bool = None, output: bool = True): pass
|
||||
|
||||
@abstractmethod
|
||||
def add_configuration(self, key_type: type, value: object): pass
|
||||
|
@ -1,11 +1,9 @@
|
||||
from abc import ABC
|
||||
from collections import Callable
|
||||
from inspect import signature, Parameter
|
||||
from typing import Type, Optional, Union
|
||||
|
||||
from cpl.application.application_runtime_abc import ApplicationRuntimeABC
|
||||
from cpl.configuration.configuration_model_abc import ConfigurationModelABC
|
||||
from cpl.console.console import Console
|
||||
from cpl.database.context.database_context_abc import DatabaseContextABC
|
||||
from cpl.dependency_injection.service_abc import ServiceABC
|
||||
from cpl.dependency_injection.service_provider_base import ServiceProviderABC
|
||||
@ -41,6 +39,9 @@ class ServiceProvider(ServiceProviderABC):
|
||||
elif issubclass(parameter.annotation, ConfigurationModelABC):
|
||||
params.append(self._app_runtime.configuration.get_configuration(parameter.annotation))
|
||||
|
||||
elif issubclass(parameter.annotation, ServiceProviderABC):
|
||||
params.append(self)
|
||||
|
||||
else:
|
||||
params.append(self.get_service(parameter.annotation))
|
||||
|
||||
@ -75,6 +76,9 @@ class ServiceProvider(ServiceProviderABC):
|
||||
self._singleton_services[service_type] = self._create_instance(service)
|
||||
|
||||
def get_service(self, instance_type: Type) -> Callable[ServiceABC]:
|
||||
if issubclass(instance_type, ServiceProviderABC):
|
||||
return self
|
||||
|
||||
for service in self._transient_services:
|
||||
if service == instance_type and isinstance(self._transient_services[service], type(instance_type)):
|
||||
return self._create_instance(self._transient_services[service])
|
||||
|
46
src/cpl/version/version.py
Normal file
46
src/cpl/version/version.py
Normal file
@ -0,0 +1,46 @@
|
||||
from typing import Optional
|
||||
|
||||
from cpl.configuration.configuration_model_abc import ConfigurationModelABC
|
||||
from cpl.version.version_enum import VersionEnum
|
||||
|
||||
|
||||
class Version(ConfigurationModelABC):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
major: int = None,
|
||||
minor: int = None,
|
||||
micro: float = None
|
||||
):
|
||||
ConfigurationModelABC.__init__(self)
|
||||
|
||||
self._major: Optional[int] = major
|
||||
self._minor: Optional[int] = minor
|
||||
self._micro: Optional[int] = micro
|
||||
|
||||
@property
|
||||
def major(self) -> int:
|
||||
return self._major
|
||||
|
||||
@property
|
||||
def minor(self) -> int:
|
||||
return self._minor
|
||||
|
||||
@property
|
||||
def micro(self) -> float:
|
||||
return self._micro
|
||||
|
||||
def to_str(self) -> str:
|
||||
return f'{self._major}.{self._minor}.{self._micro}'
|
||||
|
||||
def from_dict(self, settings: dict):
|
||||
self._major = int(settings[VersionEnum.Major.value])
|
||||
self._minor = int(settings[VersionEnum.Minor.value])
|
||||
self._micro = int(settings[VersionEnum.Micro.value])
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
return {
|
||||
VersionEnum.Major.value: self._major,
|
||||
VersionEnum.Minor.value: self._minor,
|
||||
VersionEnum.Micro.value: self._micro
|
||||
}
|
8
src/cpl/version/version_enum.py
Normal file
8
src/cpl/version/version_enum.py
Normal file
@ -0,0 +1,8 @@
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class VersionEnum(Enum):
|
||||
|
||||
Major = 'Major'
|
||||
Minor = 'Minor'
|
||||
Micro = 'Micro'
|
@ -1 +1,11 @@
|
||||
{}
|
||||
{
|
||||
"ProjectSettings": {
|
||||
"Version": {
|
||||
"major": "2021",
|
||||
"minor": "04",
|
||||
"micro": "01"
|
||||
},
|
||||
"ExcludedFiles": [],
|
||||
"DistPath": "../../dist"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user