Add implementation

This commit is contained in:
Roman Mogylatov 2021-10-24 20:52:46 -04:00
parent 026aa2bcfd
commit e6c283dc69
5 changed files with 6651 additions and 6208 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -115,6 +115,7 @@ cdef class Configuration(Object):
cdef bint __strict
cdef dict __children
cdef list __yaml_files
cdef list __ini_files
cdef object __weakref__

View File

@ -216,7 +216,15 @@ class TypedConfigurationOption(Callable[T]):
class Configuration(Object[Any]):
DEFAULT_NAME: str = 'config'
def __init__(self, name: str = DEFAULT_NAME, default: Optional[Any] = None, *, strict: bool = False, yaml_files: Optional[_Iterable[Union[Path, str]]] = None) -> None: ...
def __init__(
self,
name: str = DEFAULT_NAME,
default: Optional[Any] = None,
*,
strict: bool = False,
yaml_files: Optional[_Iterable[Union[Path, str]]] = None,
ini_files: Optional[_Iterable[Union[Path, str]]] = None,
) -> None: ...
def __enter__(self) -> Configuration : ...
def __exit__(self, *exc_info: Any) -> None: ...
def __getattr__(self, item: str) -> ConfigurationOption: ...
@ -237,6 +245,9 @@ class Configuration(Object[Any]):
def get_yaml_files(self) -> _List[Union[Path, str]]: ...
def set_yaml_files(self, files: _Iterable[Union[Path, str]]) -> Configuration: ...
def get_ini_files(self) -> _List[Union[Path, str]]: ...
def set_ini_files(self, files: _Iterable[Union[Path, str]]) -> Configuration: ...
def load(self, required: bool = False, envs_required: bool = False) -> None: ...
def get(self, selector: str) -> Any: ...

View File

@ -1755,11 +1755,12 @@ cdef class Configuration(Object):
DEFAULT_NAME = 'config'
def __init__(self, name=DEFAULT_NAME, default=None, strict=False, yaml_files=None):
def __init__(self, name=DEFAULT_NAME, default=None, strict=False, yaml_files=None, ini_files=None):
self.__name = name
self.__strict = strict
self.__children = {}
self.__yaml_files = []
self.__ini_files = []
super().__init__(provides={})
self.set_default(default)
@ -1768,6 +1769,10 @@ cdef class Configuration(Object):
yaml_files = []
self.set_yaml_files(yaml_files)
if ini_files is None:
ini_files = []
self.set_ini_files(ini_files)
def __deepcopy__(self, memo):
copied = memo.get(id(self))
if copied is not None:
@ -1779,6 +1784,7 @@ cdef class Configuration(Object):
copied.set_strict(self.get_strict())
copied.set_children(deepcopy(self.get_children(), memo))
copied.set_yaml_files(self.get_yaml_files())
copied.set_ini_files(self.get_ini_files())
self._copy_overridings(copied, memo)
return copied
@ -1861,6 +1867,15 @@ cdef class Configuration(Object):
self.__yaml_files = list(files)
return self
def get_ini_files(self):
"""Return list of INI files."""
return self.__ini_files
def set_ini_files(self, files):
"""Set list of INI files."""
self.__ini_files = list(files)
return self
def load(self, required=UNDEFINED, envs_required=UNDEFINED):
"""Load configuration.
@ -1881,6 +1896,9 @@ cdef class Configuration(Object):
for file in self.get_yaml_files():
self.from_yaml(file, required=required, envs_required=envs_required)
for file in self.get_ini_files():
self.from_ini(file, required=required, envs_required=envs_required)
def get(self, selector, required=False):
"""Return configuration option.