Skip to content

Commit 61d1889

Browse files
committed
Added webmasters money transfers
1 parent 9cae134 commit 61d1889

File tree

7 files changed

+246
-4
lines changed

7 files changed

+246
-4
lines changed

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,26 @@ API Items
354354
res = client.PaymentsManage.delete(71)
355355

356356

357+
### Money transfers ###
358+
359+
360+
###### List of money transfers ######
361+
362+
res = client.MoneyTransfers.get()
363+
res = client.MoneyTransfers.get(limit=2)
364+
res = client.MoneyTransfers.getOne(2)
365+
res = client.MoneyTransfers.get(sender='sender')
366+
res = client.MoneyTransfers.get(currency='USD')
367+
368+
###### Manage money transfers ######
369+
370+
res = client.MoneyTransfersManage.create(
371+
currency='USD',
372+
recipient='recipient',
373+
comment='comment',
374+
sum=10)
375+
376+
357377
Notes
358378
------
359379

pyadmitad/items/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@
99
from pyadmitad.items.products import *
1010
from pyadmitad.items.announcements import *
1111
from pyadmitad.items.payments import *
12+
from pyadmitad.items.money_transfers import *

pyadmitad/items/base.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,22 @@ def sanitize_integer_value(value, name, blank=False):
5050
return value
5151
raise ValueError("Invalid integer value '%s': %s" % (name, value))
5252

53+
@staticmethod
54+
def sanitize_float_value(value, name, blank=False):
55+
if not value:
56+
if not blank:
57+
raise ValueError("Blank float value '%s': %s" % (name, value))
58+
return value
59+
if type(value) in (float, int):
60+
return str(value)
61+
elif type(value) == str:
62+
try:
63+
float(value)
64+
return value
65+
except ValueError:
66+
raise ValueError("Invalid float value '%s': %s" % (name, value))
67+
raise ValueError("Invalid float value '%s': %s" % (name, value))
68+
5369
@staticmethod
5470
def sanitize_integer_array(values, name, blank=False):
5571
if not values:

pyadmitad/items/money_transfers.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
from copy import deepcopy
2+
from pyadmitad.items.base import Item
3+
4+
5+
__all__ = (
6+
'MoneyTransfers',
7+
'MoneyTransfersManage',
8+
)
9+
10+
11+
class MoneyTransfersBase(Item):
12+
13+
ORDERING = ('date_created',)
14+
FILTERING = {
15+
'sender': Item.to_unicode,
16+
'recipient': Item.to_unicode,
17+
'currency': Item.to_unicode,
18+
}
19+
20+
21+
class MoneyTransfers(Item):
22+
"""
23+
List of webmaster money transfers
24+
25+
Required scope - "webmaster_money_transfers"
26+
"""
27+
URL = Item.prepare_url('webmaster_money_transfers')
28+
SINGLE_URL = Item.prepare_url('webmaster_money_transfer/%(id)s')
29+
30+
def get(self, **kwargs):
31+
"""
32+
res = client.MoneyTransfers.get()
33+
res = client.MoneyTransfers.get(limit=2)
34+
35+
"""
36+
kwargs['url'] = self.URL
37+
return self.transport.set_method('GET').\
38+
set_pagination(**kwargs).set_filtering(**kwargs).\
39+
set_ordering(**kwargs).request(**kwargs)
40+
41+
def getOne(self, _id, **kwargs):
42+
"""
43+
res = client.MoneyTransfers.getOne(_id=2)
44+
res = client.MoneyTransfers.getOne(2)
45+
"""
46+
kwargs['url'] = self.SINGLE_URL
47+
kwargs['id'] = self.sanitize_id(_id)
48+
return self.transport.set_method('GET').request(**kwargs)
49+
50+
51+
class MoneyTransfersManage(Item):
52+
"""
53+
Manage webmaster money transfers
54+
55+
Required scope - "manage_webmaster_money_transfers"
56+
"""
57+
CREATE_FIELDS = {
58+
'comment': lambda x: Item.sanitize_string_value(x, 'comment'),
59+
'recipient': lambda x: Item.sanitize_string_value(x, 'recipient'),
60+
'currency': lambda x: Item.sanitize_currency(x, 'currency'),
61+
'sum': lambda x: Item.sanitize_float_value(x, 'sum')
62+
}
63+
64+
CREATE_URL = Item.prepare_url('webmaster_money_transfer/create')
65+
66+
@staticmethod
67+
def sanitize_fields(fields, **kwargs):
68+
data = deepcopy(kwargs)
69+
for field in fields:
70+
data[field] = fields[field](data.get(field))
71+
return dict([(key, value) for (key, value) in data.items() if value])
72+
73+
def create(self, **kwargs):
74+
"""
75+
Create a webmaster money transfers
76+
77+
res = client.MoneyTransfersManage.create(
78+
sender='webmaster',
79+
recipient='recipient',
80+
sum=200,
81+
currency='USD',
82+
comment='comment')
83+
84+
"""
85+
data = self.sanitize_fields(self.CREATE_FIELDS, **kwargs)
86+
kwargs['url'] = self.CREATE_URL
87+
return self.transport.set_method('POST').\
88+
set_data(data).request(**kwargs)

pyadmitad/items/websites.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,8 @@ class WebsitesManage(Item):
9898
x, 'atnd_hits', blank=True)
9999
}
100100

101-
def sanitize_fields(self, fields, **kwargs):
101+
@staticmethod
102+
def sanitize_fields(fields, **kwargs):
102103
data = deepcopy(kwargs)
103104
for field in fields:
104105
data[field] = fields[field](data.get(field))
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import unittest
4+
from pyadmitad.items import MoneyTransfers, MoneyTransfersManage
5+
from pyadmitad.tests.base import BaseTestCase
6+
7+
8+
MONEY_TRANSFER_CREATE_DATA = dict(
9+
currency='USD',
10+
comment="test",
11+
recipient="admitadppvweb",
12+
sum='200.12',
13+
)
14+
15+
16+
class MoneyTransfersTestCase(BaseTestCase):
17+
18+
def test_get_money_transfers_request(self):
19+
self.set_mocker(MoneyTransfers.URL, limit=1)
20+
result = {
21+
"_meta": {
22+
"count": 6,
23+
"limit": 1,
24+
"offset": 0
25+
},
26+
"results": [
27+
{
28+
"comment": "test",
29+
"sender": {
30+
"username": "webmaster1",
31+
"id": 96
32+
},
33+
"sum": 200.0,
34+
"currency": "USD",
35+
"date_created": "2013-12-06T12:28:29",
36+
"recipient": {
37+
"username": "admitadppvweb",
38+
"id": 100
39+
},
40+
"id": 8
41+
}
42+
]
43+
}
44+
self.mocker.result(result)
45+
self.mocker.replay()
46+
res = self.client.MoneyTransfers.get(limit=1)
47+
self.assertIn(u'results', res)
48+
self.assertIn(u'_meta', res)
49+
self.assertIsInstance(res[u'results'], list)
50+
self.assertIsInstance(res[u'_meta'], dict)
51+
self.assertEqual(res[u'_meta'][u'limit'], 1)
52+
self.assertEqual(res[u'results'][0][u'currency'], u'USD')
53+
self.mocker.verify()
54+
55+
def test_get_money_transfers_request_with_id(self):
56+
self.set_mocker(MoneyTransfers.SINGLE_URL, id=8, with_pagination=False)
57+
result = {
58+
"comment": "test",
59+
"sender": {
60+
"username": "webmaster1",
61+
"id": 96
62+
},
63+
"sum": 200.0,
64+
"currency": "USD",
65+
"date_created": "2013-12-06T12:28:29",
66+
"recipient": {
67+
"username": "admitadppvweb",
68+
"id": 100
69+
},
70+
"id": 8
71+
}
72+
self.mocker.result(result)
73+
self.mocker.replay()
74+
res = self.client.MoneyTransfers.getOne(8)
75+
self.assertEqual(res[u'id'], 8)
76+
self.mocker.verify()
77+
78+
79+
class MoneyTransfersManageTestCase(BaseTestCase):
80+
81+
def test_create_payments_request(self):
82+
self.set_mocker(MoneyTransfersManage.CREATE_URL,
83+
method='POST',
84+
with_pagination=False,
85+
data=MONEY_TRANSFER_CREATE_DATA)
86+
result = {
87+
"comment": "test",
88+
"sender": {
89+
"username": "webmaster1",
90+
"id": 96
91+
},
92+
"sum": 200.12,
93+
"currency": "USD",
94+
"date_created": "2013-12-06T12:28:29",
95+
"recipient": {
96+
"username": "admitadppvweb",
97+
"id": 100
98+
},
99+
"id": 9
100+
}
101+
self.mocker.result(result)
102+
self.mocker.replay()
103+
res = self.client.MoneyTransfersManage.create(
104+
**MONEY_TRANSFER_CREATE_DATA)
105+
self.assertEqual(res[u'comment'], u'test')
106+
self.assertEqual(res[u'currency'], u'USD')
107+
self.assertEqual(res[u'sum'], 200.12)
108+
self.assertEqual(res[u'sender'][u'username'], u'webmaster1')
109+
self.mocker.verify()
110+
111+
if __name__ == '__main__':
112+
unittest.main()

pyadmitad/transport.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -443,9 +443,13 @@ def request(self, **kwargs):
443443
raise AttributeError(
444444
'Absent url parameter. Use set_url method or pass '
445445
'url parameter in this method.')
446-
response = self.api_request(
447-
self._url, method=self._method,
448-
headers=self._headers, data=self._data, debug=self._debug)
446+
requests_kwargs = {
447+
'method': self._method,
448+
'headers': self._headers,
449+
'data': self._data,
450+
'debug': self._debug
451+
}
452+
response = self.api_request(self._url, **requests_kwargs)
449453
return kwargs.get('handler', self._handle_response)(response)
450454

451455
def __call__(self, **kwargs):

0 commit comments

Comments
 (0)