Coverage for kwave/utils/dotdictionary.py: 45%
20 statements
« prev ^ index » next coverage.py v6.5.0, created at 2022-10-24 11:52 -0700
« prev ^ index » next coverage.py v6.5.0, created at 2022-10-24 11:52 -0700
1class dotdict(dict):
2 """
3 A dictionary supporting dot notation.
4 """
5 __getattr__ = dict.get
6 __setattr__ = dict.__setitem__
7 __delattr__ = dict.__delitem__
9 def __init__(self, *args, **kwargs):
10 super().__init__(*args, **kwargs)
11 for k, v in self.items():
12 if isinstance(v, dict):
13 self[k] = dotdict(v)
15 def lookup(self, dotkey):
16 """
17 Lookup value in a nested structure with a single key, e.g. "a.b.c"
18 """
19 path = list(reversed(dotkey.split(".")))
20 v = self
21 while path:
22 key = path.pop()
23 if isinstance(v, dict):
24 v = v[key]
25 elif isinstance(v, list):
26 v = v[int(key)]
27 else:
28 raise KeyError(key)
29 return v