-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobjectify.py
86 lines (72 loc) · 2.26 KB
/
objectify.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""
Turn dict into class object
dictionary = {
"name": "Steve",
"age": 18,
"dob": "08/23/2000",
0: {
"name": "April",
"age": 23,
"hi-how-are-you": "good",
"steve joe": "o"
}
}
}
as you can see the it supports nested dictionarys also ints as keys
object = Object(dictionary)
object.name -> Steve
object['name'] -> Steve
object._0.name -> April
object[0].name -> April
object[0].hi_how_are_you -> good
object[0]['hi-how-you'] > good
object[0]['steve joe'] ->
object[0].steve_joe -> o
"""
from typing import Any
class Objectify:
def __init__(self, d: dict = {}, objectify=True):
if objectify: self.toObject(d)
def get(self, key):
if type(key) == type(2):
key = "_" + str(key)
key=str(key).replace(" ", "_").replace("-", "_")
if hasattr(self, key):
return getattr(self, key)
def set(self, key, value):
key=str(key).replace(" ", "_").replace("-", "_")
if type(key) == type(2):
key = "_" + str(key)
if type(value) == type({}):
setattr(self, key, Objectify(value))
else:
setattr(self, key, value)
def toObject(self, d: dict):
for key, value in iter(d.items()):
if type(key) == type(2):
key = "_" + str(key)
key=key.replace(" ", "_").replace("-", "_")
if type(value) == type({}):
setattr(self, key, Objectify(value))
else:
setattr(self, key, value)
def toDict(self):
dict = {}
for key, value in iter(self.__dict__.items()):
if type(value) == type(self):
dict[key] = value.toDict()
else:
dict[key] = value
return dict
def __getitem__(self, name: Any) -> Any:
name=str(name).replace(" ", "_").replace("-", "_")
if type(name) == type(2):
name = "_" + name
if hasattr(self, name):
return getattr(self, name)
def __setitem__(self, name: Any, value: Any) -> None:
if type(value) == type({}):
value = Objectify(value)
self.set(name, value)
def __repr__(self):
return str(self.toDict())