Skip to content

Commit 040ef1c

Browse files
authored
feat: add token endpoints (#140)
1 parent dc1680b commit 040ef1c

File tree

3 files changed

+208
-0
lines changed

3 files changed

+208
-0
lines changed

client/api/tokens.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from client.resource import Resource
2+
3+
4+
class Tokens(Resource):
5+
6+
def all(self, page=None, limit=100):
7+
params = {
8+
'page': page,
9+
'limit': limit,
10+
}
11+
return self.with_endpoint('api').request_get('tokens', params)
12+
13+
def get(self, address):
14+
return self.with_endpoint('api').request_get(
15+
f'tokens/{address}'
16+
)
17+
18+
def holders(self, address, page=None, limit=100):
19+
params = {
20+
'page': page,
21+
'limit': limit,
22+
}
23+
return self.with_endpoint('api').request_get(
24+
f'tokens/{address}/holders', params
25+
)
26+
27+
def transfers_by_token(self, address, page=None, limit=100):
28+
params = {
29+
'page': page,
30+
'limit': limit,
31+
}
32+
return self.with_endpoint('api').request_get(
33+
f'tokens/{address}/transfers', params
34+
)
35+
36+
def transfers(self, page=None, limit=100):
37+
params = {
38+
'page': page,
39+
'limit': limit,
40+
}
41+
return self.with_endpoint('api').request_get(
42+
'tokens/transfers', params
43+
)

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: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
import responses
2+
3+
from client import ArkClient
4+
5+
6+
def test_all_calls_correct_url_with_default_params():
7+
responses.add(
8+
responses.GET,
9+
'http://127.0.0.1:4002/api/tokens',
10+
json={'success': True},
11+
status=200
12+
)
13+
14+
client = ArkClient('http://127.0.0.1:4002/api')
15+
client.tokens.all()
16+
assert len(responses.calls) == 1
17+
assert responses.calls[0].request.url == 'http://127.0.0.1:4002/api/tokens?limit=100'
18+
19+
20+
def test_all_calls_correct_url_with_passed_in_params():
21+
responses.add(
22+
responses.GET,
23+
'http://127.0.0.1:4002/api/tokens',
24+
json={'success': True},
25+
status=200
26+
)
27+
28+
client = ArkClient('http://127.0.0.1:4002/api')
29+
client.tokens.all(page=5, limit=69)
30+
assert len(responses.calls) == 1
31+
assert responses.calls[0].request.url.startswith('http://127.0.0.1:4002/api/tokens?')
32+
assert 'page=5' in responses.calls[0].request.url
33+
assert 'limit=69' in responses.calls[0].request.url
34+
35+
36+
def test_get_calls_correct_url():
37+
address = '0x1234567890abcdef'
38+
responses.add(
39+
responses.GET,
40+
'http://127.0.0.1:4002/api/tokens/{}'.format(address),
41+
json={'success': True},
42+
status=200
43+
)
44+
45+
client = ArkClient('http://127.0.0.1:4002/api')
46+
client.tokens.get(address)
47+
assert len(responses.calls) == 1
48+
assert responses.calls[0].request.url == (
49+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef'
50+
)
51+
52+
53+
def test_holders_calls_correct_url_with_default_params():
54+
address = '0x1234567890abcdef'
55+
responses.add(
56+
responses.GET,
57+
'http://127.0.0.1:4002/api/tokens/{}/holders'.format(address),
58+
json={'success': True},
59+
status=200
60+
)
61+
62+
client = ArkClient('http://127.0.0.1:4002/api')
63+
client.tokens.holders(address)
64+
assert len(responses.calls) == 1
65+
assert responses.calls[0].request.url == (
66+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef/holders?limit=100'
67+
)
68+
69+
70+
def test_holders_calls_correct_url_with_passed_in_params():
71+
address = '0x1234567890abcdef'
72+
responses.add(
73+
responses.GET,
74+
'http://127.0.0.1:4002/api/tokens/{}/holders'.format(address),
75+
json={'success': True},
76+
status=200
77+
)
78+
79+
client = ArkClient('http://127.0.0.1:4002/api')
80+
client.tokens.holders(address, page=3, limit=50)
81+
assert len(responses.calls) == 1
82+
assert responses.calls[0].request.url.startswith(
83+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef/holders?'
84+
)
85+
assert 'page=3' in responses.calls[0].request.url
86+
assert 'limit=50' in responses.calls[0].request.url
87+
88+
89+
def test_transfers_by_token_calls_correct_url_with_default_params():
90+
address = '0x1234567890abcdef'
91+
responses.add(
92+
responses.GET,
93+
'http://127.0.0.1:4002/api/tokens/{}/transfers'.format(address),
94+
json={'success': True},
95+
status=200
96+
)
97+
98+
client = ArkClient('http://127.0.0.1:4002/api')
99+
client.tokens.transfers_by_token(address)
100+
assert len(responses.calls) == 1
101+
assert responses.calls[0].request.url == (
102+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef/transfers?limit=100'
103+
)
104+
105+
106+
def test_transfers_by_token_calls_correct_url_with_passed_in_params():
107+
address = '0x1234567890abcdef'
108+
responses.add(
109+
responses.GET,
110+
'http://127.0.0.1:4002/api/tokens/{}/transfers'.format(address),
111+
json={'success': True},
112+
status=200
113+
)
114+
115+
client = ArkClient('http://127.0.0.1:4002/api')
116+
client.tokens.transfers_by_token(address, page=2, limit=25)
117+
assert len(responses.calls) == 1
118+
assert responses.calls[0].request.url.startswith(
119+
'http://127.0.0.1:4002/api/tokens/0x1234567890abcdef/transfers?'
120+
)
121+
assert 'page=2' in responses.calls[0].request.url
122+
assert 'limit=25' in responses.calls[0].request.url
123+
124+
125+
def test_transfers_calls_correct_url_with_default_params():
126+
responses.add(
127+
responses.GET,
128+
'http://127.0.0.1:4002/api/tokens/transfers',
129+
json={'success': True},
130+
status=200
131+
)
132+
133+
client = ArkClient('http://127.0.0.1:4002/api')
134+
client.tokens.transfers()
135+
assert len(responses.calls) == 1
136+
assert responses.calls[0].request.url == (
137+
'http://127.0.0.1:4002/api/tokens/transfers?limit=100'
138+
)
139+
140+
141+
def test_transfers_calls_correct_url_with_passed_in_params():
142+
responses.add(
143+
responses.GET,
144+
'http://127.0.0.1:4002/api/tokens/transfers',
145+
json={'success': True},
146+
status=200
147+
)
148+
149+
client = ArkClient('http://127.0.0.1:4002/api')
150+
client.tokens.transfers(page=1, limit=10)
151+
assert len(responses.calls) == 1
152+
assert responses.calls[0].request.url.startswith(
153+
'http://127.0.0.1:4002/api/tokens/transfers?'
154+
)
155+
assert 'page=1' in responses.calls[0].request.url
156+
assert 'limit=10' in responses.calls[0].request.url

0 commit comments

Comments
 (0)