-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathns_utils.py
41 lines (25 loc) · 859 Bytes
/
ns_utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import yaml as yaml
from types import SimpleNamespace
from json import JSONEncoder
class Loader(yaml.Loader):
pass
class Dumper(yaml.Dumper):
pass
def _construct_mapping(loader, node):
loader.flatten_mapping(node)
return SimpleNamespace(**dict(loader.construct_pairs(node)))
def _ns_representer(dumper, data):
return dumper.represent_mapping(
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, data.__dict__.items()
)
Dumper.add_representer(SimpleNamespace, _ns_representer)
Loader.add_constructor(
yaml.resolver.BaseResolver.DEFAULT_MAPPING_TAG, _construct_mapping
)
class nsEncoder(JSONEncoder):
def default(self, obj):
if isinstance(obj, SimpleNamespace):
return obj.__dict__
return super(nsEncoder, self).default(obj)
def object_hook(d):
return SimpleNamespace(**d)