Coverage for /Users/buh/.pyenv/versions/3.12.2/envs/es-testbed/lib/python3.12/site-packages/es_testbed/classes/args.py: 98%
35 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-23 21:55 -0600
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-23 21:55 -0600
1"""Args Parent Class"""
2import typing as t
3import logging
4from es_testbed.defaults import ARGSCLASSES
6class Args(t.Dict):
7 """
8 Initialize with None values for all accepted settings
10 Contains :py:meth:`update_settings` and :py:meth:`asdict` methods
11 """
12 def __init__(
13 self,
14 settings: t.Dict[str, t.Any] = None,
15 defaults: t.Dict[str, t.Any] = None,
16 ):
17 """Updatable object that will contain arguments for connecting to Elasticsearch"""
18 self.logger = logging.getLogger(__name__)
19 self.settings = settings
20 if defaults is None:
21 defaults = {}
22 self.set_defaults(defaults)
23 if settings is None:
24 self.settings = defaults
25 else:
26 # Only do this if we sent actual settings
27 self.update_settings(self.settings)
29 def set_defaults(self, defaults: dict) -> None:
30 """Set attr values from defaults"""
31 for key, value in defaults.items():
32 setattr(self, key, value)
33 # Override self.settings if no default for key is found
34 if key not in self.settings:
35 self.settings[key] = value
37 def update_settings(self, new_settings: dict) -> None:
38 """Update individual settings from provided new_settings dict"""
39 for key, value in new_settings.items():
40 setattr(self, key, value)
42 def _object_class(self, val: t.Any) -> str:
43 """
44 Where type(val) = <class 'base.secondary.tertiary.ClassName'>
45 Extract 'ClassName' from type(val)
46 """
47 return str(type(val)).split("'")[1].split('.')[-1]
49 def _expand_args(self, setting: str) -> t.Union[str, t.Dict[str, str]]:
50 val = getattr(self, setting, None)
51 if self._object_class(val) in ARGSCLASSES: # These have a .asdict like this
52 return val.asdict
53 return val
55 @property
56 def asdict(self) -> dict:
57 """Return as a dictionary"""
58 retval = {}
59 if isinstance(self.settings, dict): 59 ↛ 62line 59 didn't jump to line 62, because the condition on line 59 was never false
60 for setting in self.settings:
61 retval[setting] = self._expand_args(setting)
62 return retval