-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobjectify.py
138 lines (119 loc) · 3.65 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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
"""
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 isEmpty(self):
if len(self.toDict().keys()) == 0:
return True
else:
return False
@classmethod
def isString(self, string):
if type(string) == type(""):
return True
@classmethod
def isInt(self, int):
if type(int) == type(2):
return True
@classmethod
def isObjectify(self, obj):
if type(obj) == type(Objectify()):
return True
@classmethod
def isList(self, obj):
if type(obj) == type([]):
return True
def get(self, key, return_false=False):
if type(key) == type(2):
key = "_" + str(key)
key=str(key).replace(" ", "_").replace("-", "_")
if hasattr(self, key):
return getattr(self, key)
else:
if not return_false:
return Objectify()
else:
return False
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 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 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 __delitem__(self, name: Any):
name=str(name).replace(" ", "_").replace("-", "_")
if type(name) == type(2):
name = "_" + name
try:
delattr(self, name)
except: pass
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())
if __name__=="__main__":
d = {
"name": "me",
"hi hi": 0,
"hi-2": 0,
"nested": {
"name": "nested_1",
"nested":{
"name": "nested_2"
}
}
}
object = Objectify(d)
print(object['nested']['nested']['name'], object['hi hi'], object['hi-2'])