|
4 | 4 | class Model(object): |
5 | 5 | fields = [] # field list |
6 | 6 | repr_field = None # field to use for repr(), default is fields[0] |
| 7 | + sub_types = {} # mapping {attr: type} |
| 8 | + dependant_types = {} # mapping {attr: type}. If type is a 1-tuple, indicates it's a list. |
7 | 9 |
|
8 | | - def __init__(self, values, sub_types=None, dependant_types=None): |
9 | | - if sub_types is None: |
10 | | - sub_types = {} |
11 | | - if dependant_types is None: |
12 | | - dependant_types = {} |
13 | | - |
| 10 | + def __init__(self, values): |
14 | 11 | self.values = values |
15 | | - self.sub_types = sub_types |
16 | | - self.dependant_types = dependant_types |
17 | 12 | for field in self.fields: |
18 | 13 | setattr(self, field, None) |
19 | 14 |
|
@@ -49,21 +44,15 @@ def __getattr__(self, name): |
49 | 44 | raise AttributeError("Attribute %s not found " % name) |
50 | 45 |
|
51 | 46 | @classmethod |
52 | | - def construct(cls, values, sub_types=None, dependant_types=None): |
53 | | - obj = cls(values, sub_types, dependant_types) |
| 47 | + def construct(cls, values): |
| 48 | + obj = cls(values) |
54 | 49 | obj.load(values) |
| 50 | + for k, dependent_type in cls.dependant_types.items(): |
| 51 | + if values.get(k) is not None: |
| 52 | + if isinstance(dependent_type, tuple): |
| 53 | + # dependent type being a 1-tuple indicates a list |
| 54 | + set_val = [dependent_type[0].construct(v) for v in values[k]] |
| 55 | + else: |
| 56 | + set_val = dependent_type.construct(values[k]) |
| 57 | + setattr(obj, k, set_val) |
55 | 58 | return obj |
56 | | - |
57 | | - def init_dependant(self, obj, type, sub_types={}): |
58 | | - if obj.get(type) != None: |
59 | | - if isinstance(obj, dict) and type in self.dependant_types: |
60 | | - dependant_obj = self.dependant_types[type].construct(obj[type], sub_types) |
61 | | - setattr(self, type, dependant_obj) |
62 | | - |
63 | | - def init_dependant_list(self, obj, type, sub_types={}): |
64 | | - if obj.get(type) != None: |
65 | | - if isinstance(obj[type],(list, tuple)) and type in self.dependant_types: |
66 | | - if(self.dependant_types != None): |
67 | | - set_val = [self.dependant_types[type].construct(dt, sub_types) for dt in obj[type]] |
68 | | - setattr(self, type, set_val) |
69 | | - |
0 commit comments