Projekt

Obecné

Profil

Stáhnout (3.65 KB) Statistiky
| Větev: | Tag: | Revize:
1 fe572bb6 Captain_Trojan
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 ca436714 David Friesecký
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