Skip to content

Commit 258231f

Browse files
committed
feat: add tokens endpoints
1 parent a5541d1 commit 258231f

3 files changed

Lines changed: 286 additions & 0 deletions

File tree

client/api/tokens.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from client.resource import Resource
2+
3+
4+
class Tokens(Resource):
5+
6+
def all(self, page=None, limit=100, **kwargs):
7+
extra_params = {k: v for k, v in kwargs.items() if v is not None}
8+
params = {
9+
'page': page,
10+
'limit': limit,
11+
**extra_params
12+
}
13+
return self.with_endpoint('api').request_get('tokens', params)
14+
15+
def all_with_whitelist(self, whitelist, page=None, limit=100):
16+
params = {
17+
'page': page,
18+
'limit': limit,
19+
}
20+
return self.with_endpoint('api').request_post(
21+
'tokens', data={'whitelist': whitelist}, params=params
22+
)
23+
24+
def get(self, address):
25+
return self.with_endpoint('api').request_get(
26+
f'tokens/{address}'
27+
)
28+
29+
def holders(self, address, page=None, limit=100):
30+
params = {
31+
'page': page,
32+
'limit': limit,
33+
}
34+
return self.with_endpoint('api').request_get(
35+
f'tokens/{address}/holders', params
36+
)
37+
38+
def transfers(self, address, page=None, limit=100):
39+
params = {
40+
'page': page,
41+
'limit': limit,
42+
}
43+
return self.with_endpoint('api').request_get(
44+
f'tokens/{address}/transfers', params
45+
)
46+
47+
def all_transfers(self, page=None, limit=100):
48+
params = {
49+
'page': page,
50+
'limit': limit,
51+
}
52+
return self.with_endpoint('api').request_get(
53+
'tokens/transfers', params
54+
)
55+
56+
def whitelist(self):
57+
return self.with_endpoint('api').request_get('tokens/whitelist')

client/client.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from client.api.peers import Peers
1212
from client.api.receipts import Receipts
1313
from client.api.rounds import Rounds
14+
from client.api.tokens import Tokens
1415
from client.api.transactions import Transactions
1516
from client.api.votes import Votes
1617
from client.api.wallets import Wallets
@@ -103,6 +104,14 @@ def rounds(self):
103104
"""
104105
return Rounds(self.connection)
105106

107+
@property
108+
def tokens(self):
109+
"""
110+
:return: Tokens API
111+
:rtype: client.api.tokens.Tokens
112+
"""
113+
return Tokens(self.connection)
114+
106115
@property
107116
def transactions(self):
108117
"""

tests/api/test_tokens.py

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
import json
2+
3+
import responses
4+
5+
from client import ArkClient
6+
7+
8+
def test_all_calls_correct_url_with_default_params():
9+
responses.add(
10+
responses.GET,
11+
'http://127.0.0.1:4002/api/tokens',
12+
json={'success': True},
13+
status=200
14+
)
15+
16+
client = ArkClient('http://127.0.0.1:4002/api')
17+
client.tokens.all()
18+
assert len(responses.calls) == 1
19+
assert responses.calls[0].request.url == 'http://127.0.0.1:4002/api/tokens?limit=100'
20+
21+
22+
def test_all_calls_correct_url_with_passed_in_params():
23+
responses.add(
24+
responses.GET,
25+
'http://127.0.0.1:4002/api/tokens',
26+
json={'success': True},
27+
status=200
28+
)
29+
30+
client = ArkClient('http://127.0.0.1:4002/api')
31+
client.tokens.all(page=5, limit=69)
32+
assert len(responses.calls) == 1
33+
assert responses.calls[0].request.url.startswith('http://127.0.0.1:4002/api/tokens?')
34+
assert 'page=5' in responses.calls[0].request.url
35+
assert 'limit=69' in responses.calls[0].request.url
36+
37+
38+
def test_all_calls_correct_url_with_ignore_whitelist():
39+
responses.add(
40+
responses.GET,
41+
'http://127.0.0.1:4002/api/tokens',
42+
json={'success': True},
43+
status=200
44+
)
45+
46+
client = ArkClient('http://127.0.0.1:4002/api')
47+
client.tokens.all(ignoreWhitelist=True)
48+
assert len(responses.calls) == 1
49+
assert 'ignoreWhitelist=True' in responses.calls[0].request.url
50+
51+
52+
def test_all_with_whitelist_calls_correct_url():
53+
responses.add(
54+
responses.POST,
55+
'http://127.0.0.1:4002/api/tokens',
56+
json={'success': True},
57+
status=200
58+
)
59+
60+
client = ArkClient('http://127.0.0.1:4002/api')
61+
whitelist = ['0xabc', '0xdef']
62+
client.tokens.all_with_whitelist(whitelist)
63+
assert len(responses.calls) == 1
64+
assert responses.calls[0].request.url == 'http://127.0.0.1:4002/api/tokens?limit=100'
65+
body = json.loads(responses.calls[0].request.body)
66+
assert body == {'whitelist': ['0xabc', '0xdef']}
67+
68+
69+
def test_all_with_whitelist_calls_correct_url_with_params():
70+
responses.add(
71+
responses.POST,
72+
'http://127.0.0.1:4002/api/tokens',
73+
json={'success': True},
74+
status=200
75+
)
76+
77+
client = ArkClient('http://127.0.0.1:4002/api')
78+
client.tokens.all_with_whitelist(['0xabc'], page=2, limit=50)
79+
assert len(responses.calls) == 1
80+
assert 'page=2' in responses.calls[0].request.url
81+
assert 'limit=50' in responses.calls[0].request.url
82+
83+
84+
def test_get_calls_correct_url():
85+
address = '0x1234567890abcdef'
86+
responses.add(
87+
responses.GET,
88+
'http://127.0.0.1:4002/api/tokens/{}'.format(address),
89+
json={'success': True},
90+
status=200
91+
)
92+
93+
client = ArkClient('http://127.0.0.1:4002/api')
94+
client.tokens.get(address)
95+
assert len(responses.calls) == 1
96+
assert responses.calls[0].request.url == (
97+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef'
98+
)
99+
100+
101+
def test_holders_calls_correct_url_with_default_params():
102+
address = '0x1234567890abcdef'
103+
responses.add(
104+
responses.GET,
105+
'http://127.0.0.1:4002/api/tokens/{}/holders'.format(address),
106+
json={'success': True},
107+
status=200
108+
)
109+
110+
client = ArkClient('http://127.0.0.1:4002/api')
111+
client.tokens.holders(address)
112+
assert len(responses.calls) == 1
113+
assert responses.calls[0].request.url == (
114+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef/holders?limit=100'
115+
)
116+
117+
118+
def test_holders_calls_correct_url_with_passed_in_params():
119+
address = '0x1234567890abcdef'
120+
responses.add(
121+
responses.GET,
122+
'http://127.0.0.1:4002/api/tokens/{}/holders'.format(address),
123+
json={'success': True},
124+
status=200
125+
)
126+
127+
client = ArkClient('http://127.0.0.1:4002/api')
128+
client.tokens.holders(address, page=3, limit=50)
129+
assert len(responses.calls) == 1
130+
assert responses.calls[0].request.url.startswith(
131+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef/holders?'
132+
)
133+
assert 'page=3' in responses.calls[0].request.url
134+
assert 'limit=50' in responses.calls[0].request.url
135+
136+
137+
def test_transfers_calls_correct_url_with_default_params():
138+
address = '0x1234567890abcdef'
139+
responses.add(
140+
responses.GET,
141+
'http://127.0.0.1:4002/api/tokens/{}/transfers'.format(address),
142+
json={'success': True},
143+
status=200
144+
)
145+
146+
client = ArkClient('http://127.0.0.1:4002/api')
147+
client.tokens.transfers(address)
148+
assert len(responses.calls) == 1
149+
assert responses.calls[0].request.url == (
150+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef/transfers?limit=100'
151+
)
152+
153+
154+
def test_transfers_calls_correct_url_with_passed_in_params():
155+
address = '0x1234567890abcdef'
156+
responses.add(
157+
responses.GET,
158+
'http://127.0.0.1:4002/api/tokens/{}/transfers'.format(address),
159+
json={'success': True},
160+
status=200
161+
)
162+
163+
client = ArkClient('http://127.0.0.1:4002/api')
164+
client.tokens.transfers(address, page=2, limit=25)
165+
assert len(responses.calls) == 1
166+
assert responses.calls[0].request.url.startswith(
167+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef/transfers?'
168+
)
169+
assert 'page=2' in responses.calls[0].request.url
170+
assert 'limit=25' in responses.calls[0].request.url
171+
172+
173+
def test_all_transfers_calls_correct_url_with_default_params():
174+
responses.add(
175+
responses.GET,
176+
'http://127.0.0.1:4002/api/tokens/transfers',
177+
json={'success': True},
178+
status=200
179+
)
180+
181+
client = ArkClient('http://127.0.0.1:4002/api')
182+
client.tokens.all_transfers()
183+
assert len(responses.calls) == 1
184+
assert responses.calls[0].request.url == (
185+
'http://127.0.0.1:4002/api/tokens/transfers?limit=100'
186+
)
187+
188+
189+
def test_all_transfers_calls_correct_url_with_passed_in_params():
190+
responses.add(
191+
responses.GET,
192+
'http://127.0.0.1:4002/api/tokens/transfers',
193+
json={'success': True},
194+
status=200
195+
)
196+
197+
client = ArkClient('http://127.0.0.1:4002/api')
198+
client.tokens.all_transfers(page=1, limit=10)
199+
assert len(responses.calls) == 1
200+
assert responses.calls[0].request.url.startswith(
201+
'http://127.0.0.1:4002/api/tokens/transfers?'
202+
)
203+
assert 'page=1' in responses.calls[0].request.url
204+
assert 'limit=10' in responses.calls[0].request.url
205+
206+
207+
def test_whitelist_calls_correct_url():
208+
responses.add(
209+
responses.GET,
210+
'http://127.0.0.1:4002/api/tokens/whitelist',
211+
json={'success': True},
212+
status=200
213+
)
214+
215+
client = ArkClient('http://127.0.0.1:4002/api')
216+
client.tokens.whitelist()
217+
assert len(responses.calls) == 1
218+
assert responses.calls[0].request.url == (
219+
'http://127.0.0.1:4002/api/tokens/whitelist'
220+
)

0 commit comments

Comments
 (0)