File: model.py

package info (click to toggle)
chargebee-python 1.6.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 484 kB
  • sloc: python: 1,008; makefile: 6; sh: 3
file content (47 lines) | stat: -rw-r--r-- 1,383 bytes parent folder | download | duplicates (4)
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