Skip to content

Commit fc4675d

Browse files
authored
Merge pull request #56 from tinymanorg/app-call-notes
fix client constructors
2 parents ac706c6 + b470a02 commit fc4675d

5 files changed

Lines changed: 144 additions & 58 deletions

File tree

tests/test.py

Lines changed: 0 additions & 53 deletions
This file was deleted.

tests/test_app_call_note.py

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
from base64 import b64encode
2+
from unittest import TestCase
3+
4+
from algosdk.v2client.algod import AlgodClient
5+
6+
from tinyman.utils import generate_app_call_note, parse_app_call_note
7+
from tinyman.v1.client import TinymanClient, TinymanTestnetClient, TinymanMainnetClient
8+
from tinyman.v1.constants import TESTNET_VALIDATOR_APP_ID_V1_1
9+
from tinyman.v2.client import (
10+
TinymanV2Client,
11+
TinymanV2TestnetClient,
12+
TinymanV2MainnetClient,
13+
)
14+
from tinyman.v2.constants import TESTNET_VALIDATOR_APP_ID_V2
15+
16+
17+
class AppCallNoteTestCase(TestCase):
18+
maxDiff = None
19+
20+
def test_app_call_note(self):
21+
note = generate_app_call_note(
22+
version="v2", client_name="unit-test", extra_data={"extra": "some text"}
23+
)
24+
expected_result = {
25+
"version": "v2",
26+
"data": {"extra": "some text", "origin": "unit-test"},
27+
}
28+
29+
# test possible versions
30+
string_note = note
31+
bytes_note = string_note.encode()
32+
base64_note = b64encode(bytes_note).decode()
33+
34+
result = parse_app_call_note(string_note)
35+
self.assertDictEqual(
36+
result,
37+
expected_result,
38+
)
39+
40+
result = parse_app_call_note(base64_note)
41+
self.assertDictEqual(
42+
result,
43+
expected_result,
44+
)
45+
46+
result = parse_app_call_note(base64_note)
47+
self.assertDictEqual(
48+
result,
49+
expected_result,
50+
)
51+
52+
result = parse_app_call_note("invalid format")
53+
self.assertEqual(result, None)
54+
result = parse_app_call_note(
55+
"INVALID+dGlueW1hbi92MjpqeyJvcmlnaW4iOiJ0aW55bWFuLXB5dGhvbi1zZGsifQ=="
56+
)
57+
self.assertEqual(result, None)
58+
result = parse_app_call_note(b"invalid format")
59+
self.assertEqual(result, None)
60+
result = parse_app_call_note(
61+
b'INVALID+tinyman/v2:j{"origin":"tinyman-python-sdk"}'
62+
)
63+
self.assertEqual(result, None)
64+
65+
def test_tinyman_clients(self):
66+
algod_client = AlgodClient(algod_token="", algod_address="")
67+
client_name = "test"
68+
69+
# V1
70+
self.assertEqual(
71+
TinymanClient(
72+
algod_client=algod_client,
73+
client_name=client_name,
74+
validator_app_id=TESTNET_VALIDATOR_APP_ID_V1_1,
75+
).generate_app_call_note(),
76+
'tinyman/v1:j{"origin":"test"}',
77+
)
78+
self.assertEqual(
79+
TinymanTestnetClient(
80+
algod_client=algod_client, client_name=client_name
81+
).generate_app_call_note(),
82+
'tinyman/v1:j{"origin":"test"}',
83+
)
84+
self.assertEqual(
85+
TinymanMainnetClient(
86+
algod_client=algod_client, client_name=client_name
87+
).generate_app_call_note(),
88+
'tinyman/v1:j{"origin":"test"}',
89+
)
90+
91+
# V2
92+
self.assertEqual(
93+
TinymanV2Client(
94+
algod_client=algod_client,
95+
client_name=client_name,
96+
validator_app_id=TESTNET_VALIDATOR_APP_ID_V2,
97+
).generate_app_call_note(),
98+
'tinyman/v2:j{"origin":"test"}',
99+
)
100+
self.assertEqual(
101+
TinymanV2TestnetClient(
102+
algod_client=algod_client, client_name=client_name
103+
).generate_app_call_note(),
104+
'tinyman/v2:j{"origin":"test"}',
105+
)
106+
self.assertEqual(
107+
TinymanV2MainnetClient(
108+
algod_client=algod_client, client_name=client_name
109+
).generate_app_call_note(),
110+
'tinyman/v2:j{"origin":"test"}',
111+
)

tinyman/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def __init__(
1313
self,
1414
algod_client: AlgodClient,
1515
validator_app_id: int,
16-
user_address=None,
16+
user_address: Optional[str] = None,
1717
staking_app_id: Optional[int] = None,
1818
client_name: Optional[str] = None,
1919
):

tinyman/v1/client.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
from base64 import b64decode
2+
from typing import Optional
3+
24
from algosdk.v2client.algod import AlgodClient
35
from algosdk.encoding import encode_address
46
from tinyman.assets import AssetAmount
@@ -65,20 +67,32 @@ def fetch_excess_amounts(self, user_address=None):
6567

6668

6769
class TinymanTestnetClient(TinymanClient):
68-
def __init__(self, algod_client: AlgodClient, user_address=None):
70+
def __init__(
71+
self,
72+
algod_client: AlgodClient,
73+
user_address: Optional[str] = None,
74+
client_name: Optional[str] = None,
75+
):
6976
super().__init__(
7077
algod_client,
7178
validator_app_id=TESTNET_VALIDATOR_APP_ID,
7279
user_address=user_address,
7380
staking_app_id=TESTNET_STAKING_APP_ID,
81+
client_name=client_name,
7482
)
7583

7684

7785
class TinymanMainnetClient(TinymanClient):
78-
def __init__(self, algod_client: AlgodClient, user_address=None):
86+
def __init__(
87+
self,
88+
algod_client: AlgodClient,
89+
user_address: Optional[str] = None,
90+
client_name: Optional[str] = None,
91+
):
7992
super().__init__(
8093
algod_client,
8194
validator_app_id=MAINNET_VALIDATOR_APP_ID,
8295
user_address=user_address,
8396
staking_app_id=MAINNET_STAKING_APP_ID,
97+
client_name=client_name,
8498
)

tinyman/v2/client.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from typing import Optional
2+
13
from algosdk.v2client.algod import AlgodClient
24
from tinyman.client import BaseTinymanClient
35
from tinyman.staking.constants import (
@@ -32,20 +34,32 @@ def handle_error(self, exception, txn_group):
3234

3335

3436
class TinymanV2TestnetClient(TinymanV2Client):
35-
def __init__(self, algod_client: AlgodClient, user_address=None):
37+
def __init__(
38+
self,
39+
algod_client: AlgodClient,
40+
user_address: Optional[str] = None,
41+
client_name: Optional[str] = None,
42+
):
3643
super().__init__(
3744
algod_client,
3845
validator_app_id=TESTNET_VALIDATOR_APP_ID,
3946
user_address=user_address,
4047
staking_app_id=TESTNET_STAKING_APP_ID,
48+
client_name=client_name,
4149
)
4250

4351

4452
class TinymanV2MainnetClient(TinymanV2Client):
45-
def __init__(self, algod_client: AlgodClient, user_address=None):
53+
def __init__(
54+
self,
55+
algod_client: AlgodClient,
56+
user_address: Optional[str] = None,
57+
client_name: Optional[str] = None,
58+
):
4659
super().__init__(
4760
algod_client,
4861
validator_app_id=MAINNET_VALIDATOR_APP_ID,
4962
user_address=user_address,
5063
staking_app_id=MAINNET_STAKING_APP_ID,
64+
client_name=client_name,
5165
)

0 commit comments

Comments
 (0)