Skip to content

Commit a95de85

Browse files
codebydivineclaude
andcommitted
chore: Update divine-requests to 0.1.15 with proper type annotations
- Use divine-requests 0.1.15 which has explicit type annotations for TypedResponse - This should resolve mypy type errors without needing cast() calls - The TypedResponse[T].data attribute is now properly typed as T Note: Package 0.1.15 is still being published to PyPI. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent bafbc3b commit a95de85

File tree

5 files changed

+24
-29
lines changed

5 files changed

+24
-29
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ classifiers = [
2626
]
2727
keywords = ["blockchain", "ethereum", "solana", "defi", "nft", "api", "thegraph", "web3", "crypto"]
2828
dependencies = [
29-
"divine-requests==0.1.14",
29+
"divine-requests==0.1.15",
3030
"divine-type-enforcer==0.1.8",
3131
"anyio>=4.0.0",
3232
]

src/thegraph_token_api/base.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
"""
66

77
import os
8-
from typing import cast
98

109
# Import divine-requests (should be installed as a package)
1110
from requests import NetworkingManager # type: ignore[attr-defined]
@@ -69,7 +68,7 @@ async def get_health(self) -> str:
6968
Health status string (should be "OK")
7069
"""
7170
response = await self.manager.get(f"{self.base_url}/health", headers=self._headers)
72-
return cast(str, response.text)
71+
return response.text
7372

7473
async def get_version(self) -> VersionResponse:
7574
"""
@@ -81,7 +80,7 @@ async def get_version(self) -> VersionResponse:
8180
response = await self.manager.get(
8281
f"{self.base_url}/version", headers=self._headers, expected_type=VersionResponse
8382
)
84-
return cast(VersionResponse, response.data)
83+
return response.data
8584

8685
async def get_networks(self) -> NetworksResponse:
8786
"""
@@ -93,4 +92,4 @@ async def get_networks(self) -> NetworksResponse:
9392
response = await self.manager.get(
9493
f"{self.base_url}/networks", headers=self._headers, expected_type=NetworksResponse
9594
)
96-
return cast(NetworksResponse, response.data)
95+
return response.data

src/thegraph_token_api/evm.py

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
Provides access to EVM blockchain data including NFTs, tokens, balances, transfers, and DEX data.
55
"""
66

7-
from typing import cast
8-
97
from .base import BaseTokenAPI
108
from .types import (
119
BalancesResponse,
@@ -103,7 +101,7 @@ async def get_nft_ownerships(
103101
params=params,
104102
expected_type=NFTOwnershipsResponse,
105103
)
106-
return cast(NFTOwnershipsResponse, response.data)
104+
return response.data
107105

108106
async def get_nft_collection(self, contract: str) -> NFTCollectionsResponse:
109107
"""
@@ -123,7 +121,7 @@ async def get_nft_collection(self, contract: str) -> NFTCollectionsResponse:
123121
params=params,
124122
expected_type=NFTCollectionsResponse,
125123
)
126-
return cast(NFTCollectionsResponse, response.data)
124+
return response.data
127125

128126
async def get_nft_item(self, contract: str, token_id: str) -> NFTItemsResponse:
129127
"""
@@ -144,7 +142,7 @@ async def get_nft_item(self, contract: str, token_id: str) -> NFTItemsResponse:
144142
params=params,
145143
expected_type=NFTItemsResponse,
146144
)
147-
return cast(NFTItemsResponse, response.data)
145+
return response.data
148146

149147
async def get_nft_activities(
150148
self,
@@ -204,7 +202,7 @@ async def get_nft_activities(
204202
params=params,
205203
expected_type=NFTActivitiesResponse,
206204
)
207-
return cast(NFTActivitiesResponse, response.data)
205+
return response.data
208206

209207
async def get_nft_holders(self, contract: str) -> NFTHoldersResponse:
210208
"""
@@ -224,7 +222,7 @@ async def get_nft_holders(self, contract: str) -> NFTHoldersResponse:
224222
params=params,
225223
expected_type=NFTHoldersResponse,
226224
)
227-
return cast(NFTHoldersResponse, response.data)
225+
return response.data
228226

229227
async def get_nft_sales(
230228
self,
@@ -285,7 +283,7 @@ async def get_nft_sales(
285283
response = await self.manager.get(
286284
f"{self.base_url}/nft/sales/evm", headers=self._headers, params=params, expected_type=NFTSalesResponse
287285
)
288-
return cast(NFTSalesResponse, response.data)
286+
return response.data
289287

290288
# ===== Balance Methods =====
291289

@@ -316,7 +314,7 @@ async def get_balances(
316314
expected_type=BalancesResponse,
317315
)
318316
# Return the full response object
319-
return cast(BalancesResponse, response.data)
317+
return response.data
320318

321319
# ===== Transfer Methods =====
322320

@@ -376,7 +374,7 @@ async def get_transfers(
376374
response = await self.manager.get(
377375
f"{self.base_url}/transfers/evm", headers=self._headers, params=params, expected_type=TransfersResponse
378376
)
379-
return cast(TransfersResponse, response.data)
377+
return response.data
380378

381379
# ===== Token Methods =====
382380

@@ -396,7 +394,7 @@ async def get_token(self, contract: str) -> TokensResponse:
396394
f"{self.base_url}/tokens/evm/{contract}", headers=self._headers, params=params, expected_type=TokensResponse
397395
)
398396
# Return the full response object
399-
return cast(TokensResponse, response.data)
397+
return response.data
400398

401399
async def get_token_holders(
402400
self,
@@ -434,7 +432,7 @@ async def get_token_holders(
434432
params=params,
435433
expected_type=TokenHoldersResponse,
436434
)
437-
return cast(TokenHoldersResponse, response.data)
435+
return response.data
438436

439437
# ===== Swap Methods =====
440438

@@ -503,7 +501,7 @@ async def get_swaps(
503501
f"{self.base_url}/swaps/evm", headers=self._headers, params=params, expected_type=SwapsResponse
504502
)
505503
# Return the full response object, since response is already the validated dict
506-
return cast(SwapsResponse, response.data)
504+
return response.data
507505

508506
# ===== Pool Methods =====
509507

@@ -549,7 +547,7 @@ async def get_pools(
549547
response = await self.manager.get(
550548
f"{self.base_url}/pools/evm", headers=self._headers, params=params, expected_type=PoolsResponse
551549
)
552-
return cast(PoolsResponse, response.data)
550+
return response.data
553551

554552
# ===== OHLC Methods =====
555553

@@ -587,7 +585,7 @@ async def get_ohlc_pools(
587585
response = await self.manager.get(
588586
f"{self.base_url}/ohlc/pools/evm/{pool}", headers=self._headers, params=params, expected_type=OHLCResponse
589587
)
590-
return cast(OHLCResponse, response.data)
588+
return response.data
591589

592590
async def get_ohlc_prices(
593591
self,
@@ -623,7 +621,7 @@ async def get_ohlc_prices(
623621
response = await self.manager.get(
624622
f"{self.base_url}/ohlc/prices/evm/{token}", headers=self._headers, params=params, expected_type=OHLCResponse
625623
)
626-
return cast(OHLCResponse, response.data)
624+
return response.data
627625

628626
# ===== Historical Methods =====
629627

@@ -668,4 +666,4 @@ async def get_historical_balances(
668666
params=params,
669667
expected_type=HistoricalBalancesResponse,
670668
)
671-
return cast(HistoricalBalancesResponse, response.data)
669+
return response.data

src/thegraph_token_api/simple.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import os
1919
from datetime import datetime, timedelta
20-
from typing import Any, cast
20+
from typing import Any
2121

2222
from dotenv import load_dotenv
2323

@@ -354,7 +354,7 @@ def __init__(
354354
def _extract_data(self, response) -> list[dict[Any, Any]]:
355355
"""Extract clean data from API response."""
356356
if hasattr(response, "data") and isinstance(response.data, dict):
357-
return cast(list[dict[Any, Any]], response.data.get("data", []))
357+
return response.data.get("data", [])
358358
return []
359359

360360
# ===== EVM Internal Methods =====

src/thegraph_token_api/svm.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
Provides access to Solana blockchain data including SPL tokens, balances, transfers, and DEX swaps.
55
"""
66

7-
from typing import cast
8-
97
from .base import BaseTokenAPI
108
from .types import (
119
OrderBy,
@@ -105,7 +103,7 @@ async def get_balances(
105103
response = await self.manager.get(
106104
f"{self.base_url}/balances/svm", headers=self._headers, params=params, expected_type=SolanaBalancesResponse
107105
)
108-
return cast(SolanaBalancesResponse, response.data)
106+
return response.data
109107

110108
# ===== Transfer Methods =====
111109

@@ -176,7 +174,7 @@ async def get_transfers(
176174
params=params,
177175
expected_type=SolanaTransfersResponse,
178176
)
179-
return cast(SolanaTransfersResponse, response.data)
177+
return response.data
180178

181179
# ===== Swap Methods =====
182180

@@ -247,4 +245,4 @@ async def get_swaps(
247245
response = await self.manager.get(
248246
f"{self.base_url}/swaps/svm", headers=self._headers, params=params, expected_type=SolanaSwapsResponse
249247
)
250-
return cast(SolanaSwapsResponse, response.data)
248+
return response.data

0 commit comments

Comments
 (0)