99import logging .config
1010import os
1111from json import JSONDecodeError
12- from typing import Any , Dict , List , Optional , Union , IO
12+ from typing import IO , Any
1313
1414from requests import Response , Session
1515from requests .adapters import HTTPAdapter , Retry
2323MAX_NUM_ROWS_PER_BATCH = 32_000
2424
2525
26- # pylint: disable=too-few-public-methods
2726class BaseDuneClient :
2827 """
2928 A Base Client for Dune which sets up default values
3029 and provides some convenient functions to use in other clients
3130 """
3231
33- def __init__ ( # pylint: disable=too-many-arguments
32+ def __init__ (
3433 self ,
3534 api_key : str ,
3635 base_url : str = "https://api.dune.com" ,
@@ -67,15 +66,15 @@ def from_env(cls) -> BaseDuneClient:
6766 return cls (
6867 api_key = os .environ ["DUNE_API_KEY" ],
6968 base_url = os .environ .get ("DUNE_API_BASE_URL" , "https://api.dune.com" ),
70- request_timeout = float (os .environ .get ("DUNE_API_REQUEST_TIMEOUT" , 10 )),
69+ request_timeout = float (os .environ .get ("DUNE_API_REQUEST_TIMEOUT" , "10" )),
7170 )
7271
7372 @property
7473 def api_version (self ) -> str :
7574 """Returns client version string"""
7675 return f"/api/{ self .client_version } "
7776
78- def default_headers (self ) -> Dict [str , str ]:
77+ def default_headers (self ) -> dict [str , str ]:
7978 """Return default headers containing Dune Api token"""
8079 client_version = get_package_version ("dune-client" ) or "1.3.0"
8180 return {
@@ -89,15 +88,15 @@ def default_headers(self) -> Dict[str, str]:
8988
9089 def _build_parameters (
9190 self ,
92- params : Optional [ Dict [ str , Union [ str , int ]]] = None ,
93- columns : Optional [ List [ str ]] = None ,
94- sample_count : Optional [ int ] = None ,
95- filters : Optional [ str ] = None ,
96- sort_by : Optional [ List [ str ]] = None ,
97- limit : Optional [ int ] = None ,
98- offset : Optional [ int ] = None ,
91+ params : dict [ str , str | int ] | None = None ,
92+ columns : list [ str ] | None = None ,
93+ sample_count : int | None = None ,
94+ filters : str | None = None ,
95+ sort_by : list [ str ] | None = None ,
96+ limit : int | None = None ,
97+ offset : int | None = None ,
9998 allow_partial_results : str = "true" ,
100- ) -> Dict [str , Union [ str , int ] ]:
99+ ) -> dict [str , str | int ]:
101100 """
102101 Utility function that builds a dictionary of parameters to be used
103102 when retrieving advanced results (filters, pagination, sorting, etc.).
@@ -138,13 +137,14 @@ def _handle_response(self, response: Response) -> Any:
138137 # Some responses can be decoded and converted to DuneErrors
139138 response_json = response .json ()
140139 self .logger .debug (f"received response { response_json } " )
141- return response_json
142140 except JSONDecodeError as err :
143141 # Others can't. Only raise HTTP error for not decodable errors
144142 response .raise_for_status ()
145143 raise ValueError ("Unreachable since previous line raises" ) from err
144+ else :
145+ return response_json
146146
147- def _route_url (self , route : Optional [ str ] = None , url : Optional [ str ] = None ) -> str :
147+ def _route_url (self , route : str | None = None , url : str | None = None ) -> str :
148148 if route is not None :
149149 final_url = f"{ self .base_url } { self .api_version } { route } "
150150 elif url is not None :
@@ -156,10 +156,10 @@ def _route_url(self, route: Optional[str] = None, url: Optional[str] = None) ->
156156
157157 def _get (
158158 self ,
159- route : Optional [ str ] = None ,
160- params : Optional [ Any ] = None ,
159+ route : str | None = None ,
160+ params : Any | None = None ,
161161 raw : bool = False ,
162- url : Optional [ str ] = None ,
162+ url : str | None = None ,
163163 ) -> Any :
164164 """Generic interface for the GET method of a Dune API request"""
165165 final_url = self ._route_url (route = route , url = url )
@@ -178,9 +178,9 @@ def _get(
178178 def _post (
179179 self ,
180180 route : str ,
181- params : Optional [ Any ] = None ,
182- data : Optional [ IO [bytes ]] = None ,
183- headers : Optional [ Dict [ str , str ]] = None ,
181+ params : Any | None = None ,
182+ data : IO [bytes ] | None = None ,
183+ headers : dict [ str , str ] | None = None ,
184184 ) -> Any :
185185 """Generic interface for the POST method of a Dune API request"""
186186 url = self ._route_url (route )
0 commit comments