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
|
from chargebee.compat import json
class Model(object):
fields = []
def __init__(self, values, sub_types=None):
if sub_types is None:
sub_types = {}
self.values = values
self.sub_types = sub_types
for field in self.fields:
setattr(self, field, None)
def __str__(self):
return json.dumps(self.values, indent=4)
def load(self, values):
for k, v in list(values.items()):
set_val = None
if isinstance(v, dict):
set_val = self.sub_types[k].construct(v) if k in self.sub_types else v
elif isinstance(v, (list, tuple)):
if k in self.sub_types:
set_val = [self.sub_types[k].construct(x) for x in v]
else:
set_val = v
else:
set_val = v
if k not in ('content',): # Skipping models properties
setattr(self, k, set_val)
# Returns null for any attribute that starts with cf_ to access the custom fields.
def __getattr__(self, name):
if( name[0:3] == "cf_"):
return None
raise AttributeError("Attribute %s not found " % name)
@classmethod
def construct(cls, values, sub_types=None):
obj = cls(values, sub_types)
obj.load(values)
return obj
|