Simplify config code
This commit is contained in:
parent
31549aa7eb
commit
4dfd31e5fc
1 changed files with 17 additions and 19 deletions
|
|
@ -89,42 +89,40 @@ class Config:
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def view(self) -> "ConfigView":
|
def view(self) -> "ConfigView":
|
||||||
return ConfigView(
|
return ConfigView(self.tree)
|
||||||
self.to_tree(self.default_fields),
|
|
||||||
self.to_tree(self.fields),
|
@property
|
||||||
)
|
def tree(self) -> Any:
|
||||||
|
both = dict(self.default_fields)
|
||||||
|
both.update(self.fields)
|
||||||
|
return self.to_tree(both)
|
||||||
|
|
||||||
class ConfigView:
|
class ConfigView:
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
default_fields: Any,
|
|
||||||
fields: Any,
|
fields: Any,
|
||||||
prefix: str = "",
|
prefix: str = "",
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
||||||
self._default_fields = default_fields
|
|
||||||
self._fields = fields
|
self._fields = fields
|
||||||
self._prefix = prefix
|
self._prefix = prefix
|
||||||
|
|
||||||
def __getattr__(self, name: str) -> Any:
|
def __getattr__(self, name: str) -> Any:
|
||||||
|
return self._get(name)
|
||||||
|
|
||||||
|
def __getitem__(self, name: str) -> Any:
|
||||||
|
return self._get(name)
|
||||||
|
|
||||||
|
def _get(self, name: str) -> Any:
|
||||||
"""
|
"""
|
||||||
This function assumes that _default_fields and _fields have the same
|
This function assumes that _default_fields and _fields have the same
|
||||||
dict structure.
|
dict structure.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
default_field = self._default_fields.get(name)
|
|
||||||
field = self._fields.get(name)
|
field = self._fields.get(name)
|
||||||
|
|
||||||
if isinstance(field, dict) or isinstance(default_field, dict):
|
if isinstance(field, dict):
|
||||||
# At least one is a dict, the other is either also a dict of the
|
return ConfigView(field, f"{self._prefix}{name}.")
|
||||||
# same structure or None.
|
elif field is None:
|
||||||
default_field = default_field or {}
|
|
||||||
field = field or {}
|
|
||||||
|
|
||||||
return ConfigView(default_field, field, f"{self._prefix}{name}.")
|
|
||||||
|
|
||||||
value = default_field if field is None else field
|
|
||||||
|
|
||||||
if value is None:
|
|
||||||
raise ConfigException(f"Field {self._prefix}{name} does not exist")
|
raise ConfigException(f"Field {self._prefix}{name} does not exist")
|
||||||
|
|
||||||
return value
|
return field
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue