Skip to content

Commit bafbc3b

Browse files
codebydivineclaude
andcommitted
fix: Add proper type casts to fix remaining mypy errors
- Add cast imports to svm.py, evm.py, base.py, and simple.py - Cast all response.data returns to their proper types - This ensures mypy understands the return types from divine-requests 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent c778786 commit bafbc3b

File tree

4 files changed

+28
-23
lines changed

4 files changed

+28
-23
lines changed

src/thegraph_token_api/base.py

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

77
import os
8+
from typing import cast
89

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

7374
async def get_version(self) -> VersionResponse:
7475
"""
@@ -80,7 +81,7 @@ async def get_version(self) -> VersionResponse:
8081
response = await self.manager.get(
8182
f"{self.base_url}/version", headers=self._headers, expected_type=VersionResponse
8283
)
83-
return response.data
84+
return cast(VersionResponse, response.data)
8485

8586
async def get_networks(self) -> NetworksResponse:
8687
"""
@@ -92,4 +93,4 @@ async def get_networks(self) -> NetworksResponse:
9293
response = await self.manager.get(
9394
f"{self.base_url}/networks", headers=self._headers, expected_type=NetworksResponse
9495
)
95-
return response.data
96+
return cast(NetworksResponse, response.data)

src/thegraph_token_api/evm.py

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

7+
from typing import cast
8+
79
from .base import BaseTokenAPI
810
from .types import (
911
BalancesResponse,
@@ -101,7 +103,7 @@ async def get_nft_ownerships(
101103
params=params,
102104
expected_type=NFTOwnershipsResponse,
103105
)
104-
return response.data
106+
return cast(NFTOwnershipsResponse, response.data)
105107

106108
async def get_nft_collection(self, contract: str) -> NFTCollectionsResponse:
107109
"""
@@ -121,7 +123,7 @@ async def get_nft_collection(self, contract: str) -> NFTCollectionsResponse:
121123
params=params,
122124
expected_type=NFTCollectionsResponse,
123125
)
124-
return response.data
126+
return cast(NFTCollectionsResponse, response.data)
125127

126128
async def get_nft_item(self, contract: str, token_id: str) -> NFTItemsResponse:
127129
"""
@@ -142,7 +144,7 @@ async def get_nft_item(self, contract: str, token_id: str) -> NFTItemsResponse:
142144
params=params,
143145
expected_type=NFTItemsResponse,
144146
)
145-
return response.data
147+
return cast(NFTItemsResponse, response.data)
146148

147149
async def get_nft_activities(
148150
self,
@@ -202,7 +204,7 @@ async def get_nft_activities(
202204
params=params,
203205
expected_type=NFTActivitiesResponse,
204206
)
205-
return response.data
207+
return cast(NFTActivitiesResponse, response.data)
206208

207209
async def get_nft_holders(self, contract: str) -> NFTHoldersResponse:
208210
"""
@@ -222,7 +224,7 @@ async def get_nft_holders(self, contract: str) -> NFTHoldersResponse:
222224
params=params,
223225
expected_type=NFTHoldersResponse,
224226
)
225-
return response.data
227+
return cast(NFTHoldersResponse, response.data)
226228

227229
async def get_nft_sales(
228230
self,
@@ -283,7 +285,7 @@ async def get_nft_sales(
283285
response = await self.manager.get(
284286
f"{self.base_url}/nft/sales/evm", headers=self._headers, params=params, expected_type=NFTSalesResponse
285287
)
286-
return response.data
288+
return cast(NFTSalesResponse, response.data)
287289

288290
# ===== Balance Methods =====
289291

@@ -314,7 +316,7 @@ async def get_balances(
314316
expected_type=BalancesResponse,
315317
)
316318
# Return the full response object
317-
return response.data
319+
return cast(BalancesResponse, response.data)
318320

319321
# ===== Transfer Methods =====
320322

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

379381
# ===== Token Methods =====
380382

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

399401
async def get_token_holders(
400402
self,
@@ -432,7 +434,7 @@ async def get_token_holders(
432434
params=params,
433435
expected_type=TokenHoldersResponse,
434436
)
435-
return response.data
437+
return cast(TokenHoldersResponse, response.data)
436438

437439
# ===== Swap Methods =====
438440

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

506508
# ===== Pool Methods =====
507509

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

552554
# ===== OHLC Methods =====
553555

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

590592
async def get_ohlc_prices(
591593
self,
@@ -621,7 +623,7 @@ async def get_ohlc_prices(
621623
response = await self.manager.get(
622624
f"{self.base_url}/ohlc/prices/evm/{token}", headers=self._headers, params=params, expected_type=OHLCResponse
623625
)
624-
return response.data
626+
return cast(OHLCResponse, response.data)
625627

626628
# ===== Historical Methods =====
627629

@@ -666,4 +668,4 @@ async def get_historical_balances(
666668
params=params,
667669
expected_type=HistoricalBalancesResponse,
668670
)
669-
return response.data
671+
return cast(HistoricalBalancesResponse, 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
20+
from typing import Any, cast
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 response.data.get("data", [])
357+
return cast(list[dict[Any, Any]], response.data.get("data", []))
358358
return []
359359

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

src/thegraph_token_api/svm.py

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

7+
from typing import cast
8+
79
from .base import BaseTokenAPI
810
from .types import (
911
OrderBy,
@@ -103,7 +105,7 @@ async def get_balances(
103105
response = await self.manager.get(
104106
f"{self.base_url}/balances/svm", headers=self._headers, params=params, expected_type=SolanaBalancesResponse
105107
)
106-
return response.data
108+
return cast(SolanaBalancesResponse, response.data)
107109

108110
# ===== Transfer Methods =====
109111

@@ -174,7 +176,7 @@ async def get_transfers(
174176
params=params,
175177
expected_type=SolanaTransfersResponse,
176178
)
177-
return response.data
179+
return cast(SolanaTransfersResponse, response.data)
178180

179181
# ===== Swap Methods =====
180182

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

0 commit comments

Comments
 (0)