67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
def setattr_mixed(dest, key, value):
|
|
if isinstance(dest, list):
|
|
dest.append(value)
|
|
else:
|
|
setattr(dest, key, value)
|
|
|
|
|
|
def construct_object(name, data, cls=object):
|
|
if isinstance(data, dict):
|
|
iterator = iter(data)
|
|
dest = Result(data)
|
|
elif isinstance(data, list):
|
|
iterator = range(len(data))
|
|
dest = []
|
|
else:
|
|
return data
|
|
|
|
for k in iterator:
|
|
v = data[k]
|
|
|
|
k = str(k).replace("-", "_").lower()
|
|
if isinstance(v, dict):
|
|
setattr_mixed(dest, k, construct_object(k, v))
|
|
elif isinstance(v, list):
|
|
l = []
|
|
for i in range(len(v)):
|
|
setattr_mixed(l, i, construct_object(k, v[i]))
|
|
|
|
setattr_mixed(dest, k, l)
|
|
else:
|
|
setattr_mixed(dest, k, v)
|
|
|
|
return dest
|
|
|
|
|
|
class Result(object):
|
|
|
|
def __init__(self, data):
|
|
self._dict = data;
|
|
|
|
def dict(self):
|
|
return self._dict
|
|
|
|
def __contains__(self, key):
|
|
return key in self._dict
|
|
|
|
def __getitem__(self, key):
|
|
return self._dict[key]
|
|
|
|
|
|
class HttpResponse(object):
|
|
|
|
def __init__(self, data, status_code, headers=None):
|
|
if headers is None:
|
|
headers = {}
|
|
|
|
self.status_code = status_code
|
|
self.headers = headers
|
|
if data and len(data) > 0:
|
|
if isinstance(data, str):
|
|
self.result = data
|
|
elif isinstance(data, dict) or isinstance(data, list):
|
|
self.result = construct_object('Result', data) # todo: pass through response type
|
|
else:
|
|
self.result = None
|
|
|