Skip to content

Commit 16c42b7

Browse files
authored
Merge pull request #2 from Ankr-network/advanced-api-goes-freemium
Make api_key required param
2 parents d5e2fb1 + 0d59aad commit 16c42b7

File tree

11 files changed

+528
-470
lines changed

11 files changed

+528
-470
lines changed

.github/workflows/test.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ jobs:
2929
isort .
3030
test:
3131
needs: linting
32+
env:
33+
ANKR_API_KEY: ${{ secrets.ANKR_API_KEY }}
3234
strategy:
3335
fail-fast: true
3436
matrix:

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ pip install ankr-sdk
1212

1313
#### 2. Initialize the SDK
1414

15+
_Note: to use Advanced API for free starting from May 29th, 2023 you have to register on the platform._
16+
17+
Get your individual endpoint here https://www.ankr.com/rpc/advanced-api and provide it to the `AnkrWeb3` class.
18+
1519
```python3
1620
from ankr import AnkrWeb3
1721

18-
ankr_w3 = AnkrWeb3()
19-
20-
# Or, if you have an Ankr Protocol premium plan
2122
ankr_w3 = AnkrWeb3("YOUR-TOKEN")
2223
```
2324

@@ -218,7 +219,6 @@ tx = ankr_w3.query.get_transaction(
218219

219220
### About API keys
220221

221-
For now, Ankr is offering _free_ access to these APIs with no request limits i.e. you don't need an API key at this
222-
time.
222+
Ankr is offering _free_ access to Advanced API, however you have to register on Ankr platform to access it.
223223

224-
Later on, these APIs will become a part of Ankr Protocol's [Premium Plan](https://www.ankr.com/protocol/plan/).
224+
Get your individual API Key here https://www.ankr.com/rpc/advanced-api.

ankr/advanced_apis.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
class AnkrMultichainAPI:
1111
def __init__(
1212
self,
13-
api_key: Optional[str] = None,
13+
api_key: str,
1414
endpoint_uri: Optional[str] = None,
1515
) -> None:
16-
self.provider = MultichainHTTPProvider(api_key or "", endpoint_uri)
16+
self.provider = MultichainHTTPProvider(api_key, endpoint_uri)
1717

1818

1919
class AnkrQueryAPI(AnkrMultichainAPI):

ankr/providers.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@
1919
class MultichainHTTPProvider(HTTPProvider):
2020
def __init__(
2121
self,
22-
api_key: str = "",
22+
api_key: str,
2323
endpoint_uri: Optional[Union[URI, str]] = None,
2424
request_kwargs: Optional[Any] = None,
2525
session: Optional[Any] = None,
2626
) -> None:
27-
if endpoint_uri is None:
28-
endpoint_uri = "https://rpc.ankr.com/multichain/"
27+
endpoint_uri = endpoint_uri or "https://rpc.ankr.com/multichain/"
2928
super().__init__(endpoint_uri + api_key, request_kwargs, session)
3029

3130
def make_request(self, method: RPCEndpoint, params: Any) -> RPCResponse:

ankr/web3.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class AnkrWeb3(Web3, metaclass=_Web3NamedMeta):
5656

5757
def __init__(
5858
self,
59-
api_key: Optional[str] = None,
59+
api_key: str,
6060
request_kwargs: Optional[Any] = None,
6161
middlewares: Optional[Sequence[Any]] = None,
6262
modules: Optional[Dict[str, Union[Type[Module], Sequence[Any]]]] = None,

poetry.lock

Lines changed: 474 additions & 413 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "ankr-sdk"
3-
version = "0.3.0"
3+
version = "0.4.0"
44
description = "Compact Python library for interacting with Ankr's Advanced APIs."
55
authors = ["Roman Fasakhov <[email protected]>"]
66
license = "MIT License"
@@ -16,14 +16,14 @@ packages = [{ include = "ankr" }]
1616

1717
[tool.poetry.dependencies]
1818
python = "^3.8.1"
19-
web3 = "^6.0.0"
20-
pydantic = "^1.10.7"
19+
web3 = "^6.4.0"
20+
pydantic = "^1.10.8"
2121
pyhumps = "^3.8.0"
22-
typing-extensions = "^4.5.0"
22+
typing-extensions = "^4.6.2"
2323

2424
[tool.poetry.dev-dependencies]
25-
pytest = "^7.2.2"
26-
mypy = "^1.1.1"
25+
pytest = "^7.3.1"
26+
mypy = "^1.3.0"
2727
flake8 = "^6.0.0"
2828
isort = "^5.12.0"
2929

tests/conftest.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import os
2+
3+
import pytest
4+
5+
from ankr import AnkrAdvancedAPI
6+
7+
8+
@pytest.fixture
9+
def api_key() -> str:
10+
key = os.environ.get("ANKR_API_KEY")
11+
assert key
12+
return key
13+
14+
15+
@pytest.fixture
16+
def client(api_key: str) -> AnkrAdvancedAPI:
17+
return AnkrAdvancedAPI(api_key)

tests/test_client.py

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,14 @@
99

1010

1111
def test_client_api_key() -> None:
12-
client = AnkrAdvancedAPI()
13-
client_with_key = AnkrAdvancedAPI("my-test-api-key")
14-
15-
assert client.provider.endpoint_uri == "https://rpc.ankr.com/multichain/"
1612
assert (
17-
client_with_key.provider.endpoint_uri
13+
AnkrAdvancedAPI("my-test-api-key").provider.endpoint_uri
1814
== "https://rpc.ankr.com/multichain/my-test-api-key"
1915
)
2016

2117

2218
@pytest.mark.webtest
23-
def test_get_logs() -> None:
24-
client = AnkrAdvancedAPI()
19+
def test_get_logs(client: AnkrAdvancedAPI) -> None:
2520
logs = list(
2621
client.get_logs(
2722
blockchain=Blockchain.ETH,
@@ -39,12 +34,11 @@ def test_get_logs() -> None:
3934
assert len(logs) == 18
4035
assert logs[0].address == "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
4136
assert logs[0].event
42-
assert logs[0].event.name == "Deposit"
37+
assert logs[0].event.name == "Transfer"
4338

4439

4540
@pytest.mark.webtest
46-
def test_get_blocks() -> None:
47-
client = AnkrAdvancedAPI()
41+
def test_get_blocks(client: AnkrAdvancedAPI) -> None:
4842
blocks = client.get_blocks(
4943
blockchain=Blockchain.ETH,
5044
from_block=14500001,
@@ -63,8 +57,7 @@ def test_get_blocks() -> None:
6357

6458

6559
@pytest.mark.webtest
66-
def test_get_nfts() -> None:
67-
client = AnkrAdvancedAPI()
60+
def test_get_nfts(client: AnkrAdvancedAPI) -> None:
6861
nfts = list(
6962
client.get_nfts(
7063
blockchain=Blockchain.ETH,
@@ -83,8 +76,7 @@ def test_get_nfts() -> None:
8376

8477

8578
@pytest.mark.webtest
86-
def test_get_nft_metadata() -> None:
87-
client = AnkrAdvancedAPI()
79+
def test_get_nft_metadata(client: AnkrAdvancedAPI) -> None:
8880
reply = client.get_nft_metadata(
8981
blockchain="eth",
9082
contract_address="0x4100670ee2f8aef6c47a4ed13c7f246e621228ec",
@@ -99,8 +91,7 @@ def test_get_nft_metadata() -> None:
9991

10092

10193
@pytest.mark.webtest
102-
def test_get_nft_holders() -> None:
103-
client = AnkrAdvancedAPI()
94+
def test_get_nft_holders(client: AnkrAdvancedAPI) -> None:
10495
holders = list(
10596
client.get_nft_holders(
10697
blockchain="eth",
@@ -114,8 +105,7 @@ def test_get_nft_holders() -> None:
114105

115106

116107
@pytest.mark.webtest
117-
def test_get_transactions() -> None:
118-
client = AnkrAdvancedAPI()
108+
def test_get_transactions(client: AnkrAdvancedAPI) -> None:
119109
tx = client.get_transaction(
120110
transaction_hash="0x82c13aaac6f0b6471afb94a3a64ae89d45baa3608ad397621dbb0d847f51196f",
121111
include_logs=True,
@@ -135,8 +125,7 @@ def test_get_transactions() -> None:
135125

136126

137127
@pytest.mark.webtest
138-
def test_get_token_holders() -> None:
139-
client = AnkrAdvancedAPI()
128+
def test_get_token_holders(client: AnkrAdvancedAPI) -> None:
140129
holders = list(
141130
client.get_token_holders(
142131
blockchain="bsc",
@@ -152,8 +141,7 @@ def test_get_token_holders() -> None:
152141

153142

154143
@pytest.mark.webtest
155-
def test_get_token_holders_pagination() -> None:
156-
client = AnkrAdvancedAPI()
144+
def test_get_token_holders_pagination(client: AnkrAdvancedAPI) -> None:
157145
holders = list(
158146
client.get_token_holders(
159147
blockchain="bsc",
@@ -169,8 +157,7 @@ def test_get_token_holders_pagination() -> None:
169157

170158

171159
@pytest.mark.webtest
172-
def test_get_token_holders_count_history() -> None:
173-
client = AnkrAdvancedAPI()
160+
def test_get_token_holders_count_history(client: AnkrAdvancedAPI) -> None:
174161
daily_holders_counts = list(
175162
client.get_token_holders_count_history(
176163
blockchain="bsc",
@@ -187,8 +174,7 @@ def test_get_token_holders_count_history() -> None:
187174

188175

189176
@pytest.mark.webtest
190-
def test_get_token_holders_count() -> None:
191-
client = AnkrAdvancedAPI()
177+
def test_get_token_holders_count(client: AnkrAdvancedAPI) -> None:
192178
holders_count = client.get_token_holders_count(
193179
blockchain="bsc",
194180
contract_address="0xf307910A4c7bbc79691fD374889b36d8531B08e3",
@@ -200,8 +186,7 @@ def test_get_token_holders_count() -> None:
200186

201187

202188
@pytest.mark.webtest
203-
def test_get_account_balance() -> None:
204-
client = AnkrAdvancedAPI()
189+
def test_get_account_balance(client: AnkrAdvancedAPI) -> None:
205190
assets = list(
206191
client.get_account_balance(
207192
wallet_address="0x77A859A53D4de24bBC0CC80dD93Fbe391Df45527",
@@ -214,8 +199,7 @@ def test_get_account_balance() -> None:
214199

215200

216201
@pytest.mark.webtest
217-
def test_get_token_price() -> None:
218-
client = AnkrAdvancedAPI()
202+
def test_get_token_price(client: AnkrAdvancedAPI) -> None:
219203
price = client.get_token_price(
220204
contract_address="0x8290333cef9e6d528dd5618fb97a76f268f3edd4",
221205
blockchain="eth",
@@ -226,8 +210,7 @@ def test_get_token_price() -> None:
226210

227211

228212
@pytest.mark.webtest
229-
def test_get_token_price__no_price() -> None:
230-
client = AnkrAdvancedAPI()
213+
def test_get_token_price__no_price(client: AnkrAdvancedAPI) -> None:
231214
price = client.get_token_price(
232215
contract_address="0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
233216
blockchain="eth",

tests/test_providers.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,8 @@
2222

2323

2424
def test_provider_api_key() -> None:
25-
provider = MultichainHTTPProvider()
26-
provider_with_key = MultichainHTTPProvider("my-test-api-key")
27-
28-
assert provider.endpoint_uri == "https://rpc.ankr.com/multichain/"
2925
assert (
30-
provider_with_key.endpoint_uri
26+
MultichainHTTPProvider("my-test-api-key").endpoint_uri
3127
== "https://rpc.ankr.com/multichain/my-test-api-key"
3228
)
3329

0 commit comments

Comments
 (0)