Projekt

Obecné

Profil

Stáhnout (3.65 KB) Statistiky
| Větev: | Tag: | Revize:
1
import datetime
2

    
3
import six
4

    
5

    
6
def _deserialize(data, klass):
7
    """Deserializes dict, list, str into an object.
8

    
9
    :param data: dict, list or str.
10
    :param klass: class literal, or string of class name.
11

    
12
    :return: object.
13
    """
14
    if data is None:
15
        return None
16

    
17
    if klass in six.integer_types or klass in (float, str, bool):
18
        return _deserialize_primitive(data, klass)
19
    elif klass == object:
20
        return _deserialize_object(data)
21
    elif klass == datetime.date:
22
        return deserialize_date(data)
23
    elif klass == datetime.datetime:
24
        return deserialize_datetime(data)
25
    elif hasattr(klass, '__origin__'):
26
        if klass.__origin__ == list:
27
            return _deserialize_list(data, klass.__args__[0])
28
        if klass.__origin__ == dict:
29
            return _deserialize_dict(data, klass.__args__[1])
30
    else:
31
        return deserialize_model(data, klass)
32

    
33

    
34
def _deserialize_primitive(data, klass):
35
    """Deserializes to primitive type.
36

    
37
    :param data: data to deserialize.
38
    :param klass: class literal.
39

    
40
    :return: int, long, float, str, bool.
41
    :rtype: int | long | float | str | bool
42
    """
43
    try:
44
        value = klass(data)
45
    except UnicodeEncodeError:
46
        value = six.u(data)
47
    except TypeError:
48
        value = data
49
    return value
50

    
51

    
52
def _deserialize_object(value):
53
    """Return a original value.
54

    
55
    :return: object.
56
    """
57
    return value
58

    
59

    
60
def deserialize_date(string):
61
    """Deserializes string to date.
62

    
63
    :param string: str.
64
    :type string: str
65
    :return: date.
66
    :rtype: date
67
    """
68
    try:
69
        from dateutil.parser import parse
70
        return parse(string).date()
71
    except ImportError:
72
        return string
73

    
74

    
75
def deserialize_datetime(string):
76
    """Deserializes string to datetime.
77

    
78
    The string should be in iso8601 datetime format.
79

    
80
    :param string: str.
81
    :type string: str
82
    :return: datetime.
83
    :rtype: datetime
84
    """
85
    try:
86
        from dateutil.parser import parse
87
        return parse(string)
88
    except ImportError:
89
        return string
90

    
91

    
92
def deserialize_model(data, klass):
93
    """Deserializes list or dict to model.
94

    
95
    :param data: dict, list.
96
    :type data: dict | list
97
    :param klass: class literal.
98
    :return: model object.
99
    """
100
    instance = klass()
101

    
102
    if not instance.swagger_types:
103
        return data
104

    
105
    for attr, attr_type in six.iteritems(instance.swagger_types):
106
        if data is not None \
107
                and instance.attribute_map[attr] in data \
108
                and isinstance(data, (list, dict)):
109
            value = data[instance.attribute_map[attr]]
110
            setattr(instance, attr, _deserialize(value, attr_type))
111

    
112
    return instance
113

    
114

    
115
def _deserialize_list(data, boxed_type):
116
    """Deserializes a list and its elements.
117

    
118
    :param data: list to deserialize.
119
    :type data: list
120
    :param boxed_type: class literal.
121

    
122
    :return: deserialized list.
123
    :rtype: list
124
    """
125
    return [_deserialize(sub_data, boxed_type)
126
            for sub_data in data]
127

    
128

    
129
def _deserialize_dict(data, boxed_type):
130
    """Deserializes a dict and its elements.
131

    
132
    :param data: dict to deserialize.
133
    :type data: dict
134
    :param boxed_type: class literal.
135

    
136
    :return: deserialized dict.
137
    :rtype: dict
138
    """
139
    return {k: _deserialize(v, boxed_type)
140
            for k, v in six.iteritems(data)}
141

    
142

    
143
def dict_to_string(data):
144
    data_str = ""
145
    for key, value in data.items():
146
        data_str += f"\t\t{key}"
147

    
148
        if type(value) is dict:
149
            data_str += " --\n"
150
            for subkey, subvalue in value.items():
151
                data_str += f"\t\t\t{subkey} : {subvalue}\n"
152
        else:
153
            data_str += f" : {value}\n"
154

    
155
    return data_str
(6-6/6)