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/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)
mangopay/ratelimit.py ADDED
@@ -0,0 +1,5 @@
1
+ class RateLimit:
2
+ interval_minutes = 0
3
+ calls_made = 0
4
+ calls_remaining = 0
5
+ reset_time_millis = 0