mangopay4-python-sdk 3.52.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mangopay/__init__.py +27 -0
- mangopay/api.py +381 -0
- mangopay/auth.py +130 -0
- mangopay/base.py +289 -0
- mangopay/compat.py +16 -0
- mangopay/constants.py +466 -0
- mangopay/exceptions.py +26 -0
- mangopay/fields.py +1345 -0
- mangopay/page.py +17 -0
- mangopay/query.py +280 -0
- mangopay/ratelimit.py +5 -0
- mangopay/resources.py +3219 -0
- mangopay/signals.py +14 -0
- mangopay/utils.py +1582 -0
- mangopay4_python_sdk-3.52.0.dist-info/METADATA +53 -0
- mangopay4_python_sdk-3.52.0.dist-info/RECORD +20 -0
- mangopay4_python_sdk-3.52.0.dist-info/WHEEL +6 -0
- mangopay4_python_sdk-3.52.0.dist-info/entry_points.txt +2 -0
- mangopay4_python_sdk-3.52.0.dist-info/licenses/LICENSE +22 -0
- mangopay4_python_sdk-3.52.0.dist-info/top_level.txt +1 -0
mangopay/page.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class Page:
|
|
2
|
+
|
|
3
|
+
def __init__(self, data, **kwargs):
|
|
4
|
+
self.data = data
|
|
5
|
+
self.page = kwargs.get('page', 1)
|
|
6
|
+
self.per_page = kwargs.get('per_page', 10)
|
|
7
|
+
self.total_pages = kwargs.get('total_pages')
|
|
8
|
+
self.total_items = kwargs.get('total_items')
|
|
9
|
+
|
|
10
|
+
def __len__(self):
|
|
11
|
+
return len(self.data)
|
|
12
|
+
|
|
13
|
+
def __iter__(self):
|
|
14
|
+
return iter(self.data)
|
|
15
|
+
|
|
16
|
+
def __getitem__(self, item):
|
|
17
|
+
return self.data[item]
|
mangopay/query.py
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import six
|
|
2
|
+
|
|
3
|
+
from mangopay.page import Page
|
|
4
|
+
from . import get_default_handler
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class BaseQuery(object):
|
|
8
|
+
def __init__(self, model, method=None):
|
|
9
|
+
self.model = model
|
|
10
|
+
self.method = method
|
|
11
|
+
self._handler = None
|
|
12
|
+
|
|
13
|
+
@property
|
|
14
|
+
def handler(self):
|
|
15
|
+
return self._handler or get_default_handler()
|
|
16
|
+
|
|
17
|
+
def parse_result(self, result, model_klass=None):
|
|
18
|
+
pairs = {}
|
|
19
|
+
model_klass = model_klass or self.model
|
|
20
|
+
|
|
21
|
+
for api_name, field_name in model_klass._meta.api_names.items():
|
|
22
|
+
field = model_klass._meta.get_field_by_name(field_name)
|
|
23
|
+
if result and api_name in result:
|
|
24
|
+
pairs[field_name] = field.python_value(result[api_name])
|
|
25
|
+
|
|
26
|
+
return pairs
|
|
27
|
+
|
|
28
|
+
def parse_url(self, meta_url, params=None, path_params=None):
|
|
29
|
+
if isinstance(meta_url, dict):
|
|
30
|
+
url = meta_url.get(self.identifier)
|
|
31
|
+
else:
|
|
32
|
+
url = meta_url
|
|
33
|
+
|
|
34
|
+
# useful when there is a need to pass a path param which should not be part of the object
|
|
35
|
+
if path_params:
|
|
36
|
+
url = url % path_params
|
|
37
|
+
|
|
38
|
+
if params:
|
|
39
|
+
url = url % params
|
|
40
|
+
|
|
41
|
+
return url
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class SelectQuery(BaseQuery):
|
|
45
|
+
identifier = 'SELECT'
|
|
46
|
+
|
|
47
|
+
def __init__(self, model, *args, **kwargs):
|
|
48
|
+
super(SelectQuery, self).__init__(model, 'GET')
|
|
49
|
+
|
|
50
|
+
def get(self, reference, handler=None, resource_model=None, without_client_id=False, with_query_params=False,
|
|
51
|
+
is_v3=False, strict_dict_parsing=True, **kwargs):
|
|
52
|
+
model = resource_model or self.model
|
|
53
|
+
handler = handler or self.handler
|
|
54
|
+
|
|
55
|
+
meta_url = self.parse_url(model._meta.url, kwargs)
|
|
56
|
+
if reference != "":
|
|
57
|
+
url = '%s/%s' % (meta_url, reference)
|
|
58
|
+
else:
|
|
59
|
+
url = '%s' % meta_url
|
|
60
|
+
|
|
61
|
+
if with_query_params:
|
|
62
|
+
result, data = handler.request(self.method, url, without_client_id=without_client_id, is_v3=is_v3, **kwargs)
|
|
63
|
+
else:
|
|
64
|
+
result, data = handler.request(self.method, url, without_client_id=without_client_id, is_v3=is_v3)
|
|
65
|
+
|
|
66
|
+
if 'errors' in data:
|
|
67
|
+
if result.status_code == 404:
|
|
68
|
+
raise model.DoesNotExist('instance %s matching reference %s does not exist' % (model._meta.model_name,
|
|
69
|
+
reference))
|
|
70
|
+
else:
|
|
71
|
+
return handler._create_apierror(result, url)
|
|
72
|
+
|
|
73
|
+
cast = getattr(model, 'cast', lambda result: model)
|
|
74
|
+
model_klass = cast(data)
|
|
75
|
+
|
|
76
|
+
if strict_dict_parsing:
|
|
77
|
+
return model_klass(handler=handler,
|
|
78
|
+
**dict(self.parse_result(data, model_klass)))
|
|
79
|
+
return data
|
|
80
|
+
|
|
81
|
+
def list(self, reference, resource_model, handler=None, **kwargs):
|
|
82
|
+
handler = handler or self.handler
|
|
83
|
+
|
|
84
|
+
result, data = handler.request(self.method,
|
|
85
|
+
'/%s/%s/%s' % (resource_model._meta.verbose_name_plural, reference,
|
|
86
|
+
self.model._meta.verbose_name_plural), **kwargs)
|
|
87
|
+
|
|
88
|
+
return [self.model(handler=handler,
|
|
89
|
+
**dict(self.parse_result(entry))) for entry in data]
|
|
90
|
+
|
|
91
|
+
def all(self, handler=None, without_client_id=False, **params):
|
|
92
|
+
handler = handler or self.handler
|
|
93
|
+
|
|
94
|
+
url = self.parse_url(self.model._meta.url, params)
|
|
95
|
+
result, data = handler.request(self.method, url, without_client_id=without_client_id, **params)
|
|
96
|
+
|
|
97
|
+
if 'errors' in data:
|
|
98
|
+
return handler._create_apierror(result, url)
|
|
99
|
+
|
|
100
|
+
results = []
|
|
101
|
+
cast = getattr(self.model, 'cast', lambda result: self.model)
|
|
102
|
+
if type(data) is not list:
|
|
103
|
+
data = [data]
|
|
104
|
+
for entry in data:
|
|
105
|
+
model_klass = cast(entry)
|
|
106
|
+
results.append(model_klass(handler=handler, **dict(self.parse_result(entry, model_klass))))
|
|
107
|
+
|
|
108
|
+
total_pages = result.headers.get('x-number-of-pages')
|
|
109
|
+
total_items = result.headers.get('x-number-of-items')
|
|
110
|
+
params.update({'total_items': total_items, 'total_pages': total_pages})
|
|
111
|
+
page = Page(results, **params)
|
|
112
|
+
return page
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class InsertQuery(BaseQuery):
|
|
116
|
+
identifier = 'INSERT'
|
|
117
|
+
|
|
118
|
+
def __init__(self, model, idempotency_key=None, path_params=None, **kwargs):
|
|
119
|
+
self.insert_query = kwargs
|
|
120
|
+
self.idempotency_key = idempotency_key
|
|
121
|
+
self.path_params = path_params
|
|
122
|
+
super(InsertQuery, self).__init__(model, 'POST')
|
|
123
|
+
|
|
124
|
+
def parse_insert(self):
|
|
125
|
+
pairs = {}
|
|
126
|
+
if hasattr(self.model, "_meta"):
|
|
127
|
+
for k, v in six.iteritems(self.insert_query):
|
|
128
|
+
field = self.model._meta.get_field_by_name(k)
|
|
129
|
+
|
|
130
|
+
if field.required or v is not None:
|
|
131
|
+
pairs[field.api_name] = field.api_value(v)
|
|
132
|
+
|
|
133
|
+
return pairs
|
|
134
|
+
|
|
135
|
+
def execute(self, handler=None, model_klass=None, is_v3=False, strict_dict_parsing=True):
|
|
136
|
+
handler = handler or self.handler
|
|
137
|
+
|
|
138
|
+
if strict_dict_parsing:
|
|
139
|
+
data = self.parse_insert()
|
|
140
|
+
else:
|
|
141
|
+
data = self.insert_query
|
|
142
|
+
|
|
143
|
+
url = self.parse_url(self.model._meta.url, self.insert_query, self.path_params)
|
|
144
|
+
|
|
145
|
+
result, data = handler.request(self.method,
|
|
146
|
+
url,
|
|
147
|
+
data=data,
|
|
148
|
+
idempotency_key=self.idempotency_key,
|
|
149
|
+
is_v3=is_v3)
|
|
150
|
+
|
|
151
|
+
if strict_dict_parsing:
|
|
152
|
+
return dict(self.parse_result(data, model_klass))
|
|
153
|
+
return data
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class InsertMultipartQuery(BaseQuery):
|
|
157
|
+
identifier = 'INSERT_MULTIPART'
|
|
158
|
+
|
|
159
|
+
def __init__(self, model, file, file_name, idempotency_key=None, **kwargs):
|
|
160
|
+
self.insert_query = kwargs
|
|
161
|
+
self.idempotency_key = idempotency_key
|
|
162
|
+
self.file = file
|
|
163
|
+
self.file_name = file_name
|
|
164
|
+
super(InsertMultipartQuery, self).__init__(model, 'POST')
|
|
165
|
+
|
|
166
|
+
def execute(self, handler=None, model_klass=None, is_v3=False):
|
|
167
|
+
handler = handler or self.handler
|
|
168
|
+
url = self.parse_url(self.model._meta.url)
|
|
169
|
+
result, data = handler.multipart_request(self.method,
|
|
170
|
+
url,
|
|
171
|
+
file=self.file,
|
|
172
|
+
file_name=self.file_name,
|
|
173
|
+
idempotency_key=self.idempotency_key,
|
|
174
|
+
is_v3=is_v3)
|
|
175
|
+
return dict(self.parse_result(data, model_klass))
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class UpdateQuery(BaseQuery):
|
|
179
|
+
identifier = 'UPDATE'
|
|
180
|
+
|
|
181
|
+
def __init__(self, model, reference, path_params=None, **kwargs):
|
|
182
|
+
self.update_query = kwargs
|
|
183
|
+
self.reference = reference
|
|
184
|
+
self.path_params = path_params
|
|
185
|
+
super(UpdateQuery, self).__init__(model, 'PUT')
|
|
186
|
+
|
|
187
|
+
def parse_update(self):
|
|
188
|
+
pairs = {}
|
|
189
|
+
for k, v in six.iteritems(self.update_query):
|
|
190
|
+
field = self.model._meta.get_field_by_name(k)
|
|
191
|
+
|
|
192
|
+
if field.required or v is not None:
|
|
193
|
+
pairs[field.api_name] = field.api_value(v)
|
|
194
|
+
|
|
195
|
+
return pairs
|
|
196
|
+
|
|
197
|
+
def execute(self, handler=None, is_v3=False):
|
|
198
|
+
handler = handler or self.handler
|
|
199
|
+
|
|
200
|
+
data = self.parse_update()
|
|
201
|
+
|
|
202
|
+
meta_url = self.parse_url(self.model._meta.url, self.update_query, self.path_params)
|
|
203
|
+
if self.reference is not None:
|
|
204
|
+
url = '%s/%s' % (meta_url, self.reference)
|
|
205
|
+
else:
|
|
206
|
+
url = meta_url
|
|
207
|
+
|
|
208
|
+
result, data = handler.request(self.method,
|
|
209
|
+
url,
|
|
210
|
+
data=data, is_v3=is_v3)
|
|
211
|
+
|
|
212
|
+
return self.parse_result(data)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
class UpdateMultipartQuery(BaseQuery):
|
|
216
|
+
identifier = 'UPDATE_MULTIPART'
|
|
217
|
+
|
|
218
|
+
def __init__(self, model, file, file_name, reference, **kwargs):
|
|
219
|
+
self.update_query = kwargs
|
|
220
|
+
self.reference = reference
|
|
221
|
+
self.file = file
|
|
222
|
+
self.file_name = file_name
|
|
223
|
+
super(UpdateMultipartQuery, self).__init__(model, 'PUT')
|
|
224
|
+
|
|
225
|
+
def execute(self, handler=None, is_v3=False):
|
|
226
|
+
handler = handler or self.handler
|
|
227
|
+
|
|
228
|
+
meta_url = self.parse_url(self.model._meta.url, self.update_query)
|
|
229
|
+
url = '%s/%s' % (meta_url, self.reference)
|
|
230
|
+
|
|
231
|
+
result, data = handler.multipart_request(self.method,
|
|
232
|
+
url,
|
|
233
|
+
file=self.file,
|
|
234
|
+
file_name=self.file_name,
|
|
235
|
+
is_v3=is_v3)
|
|
236
|
+
|
|
237
|
+
return self.parse_result(data)
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
class DeleteQuery(BaseQuery):
|
|
241
|
+
identifier = 'DELETE'
|
|
242
|
+
|
|
243
|
+
def __init__(self, model, reference, **kwargs):
|
|
244
|
+
self.delete_query = kwargs
|
|
245
|
+
self.reference = reference
|
|
246
|
+
super(DeleteQuery, self).__init__(model, 'DELETE')
|
|
247
|
+
|
|
248
|
+
def execute(self, handler=None):
|
|
249
|
+
handler = handler or self.handler
|
|
250
|
+
|
|
251
|
+
meta_url = self.parse_url(self.model._meta.url, self.delete_query)
|
|
252
|
+
url = '%s/%s' % (meta_url, self.reference)
|
|
253
|
+
|
|
254
|
+
result, data = handler.request(self.method, url)
|
|
255
|
+
|
|
256
|
+
return self.parse_result(data)
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
class ActionQuery(BaseQuery):
|
|
260
|
+
|
|
261
|
+
def __init__(self, model, reference, identifier, method='PUT', params=None, **kwargs):
|
|
262
|
+
self.action_query = kwargs
|
|
263
|
+
self.reference = reference
|
|
264
|
+
self.identifier = identifier
|
|
265
|
+
self.params = params
|
|
266
|
+
super(ActionQuery, self).__init__(model, method)
|
|
267
|
+
|
|
268
|
+
def execute(self, handler=None):
|
|
269
|
+
handler = handler or self.handler
|
|
270
|
+
|
|
271
|
+
data = self.action_query
|
|
272
|
+
url = self.parse_url(self.model._meta.url, self.params)
|
|
273
|
+
url = url % {'id': self.reference}
|
|
274
|
+
|
|
275
|
+
result, data = handler.request(self.method,
|
|
276
|
+
url,
|
|
277
|
+
data=data)
|
|
278
|
+
if isinstance(data, list):
|
|
279
|
+
return [self.parse_result(d) for d in data]
|
|
280
|
+
return self.parse_result(data)
|