@@ -59,6 +59,8 @@ def __init__(
5959 self ,
6060 api_key : str | None = None ,
6161 base_url : str = "https://tango.makegov.com" ,
62+ user_agent : str | None = None ,
63+ extra_headers : dict [str , str ] | None = None ,
6264 ):
6365 """
6466 Initialize the Tango API client
@@ -67,6 +69,8 @@ def __init__(
6769 api_key: API key for authentication. If not provided, will attempt to load from
6870 TANGO_API_KEY environment variable.
6971 base_url: Base URL for the API
72+ user_agent: Custom User-Agent header value.
73+ extra_headers: Additional headers to include in every request.
7074 """
7175 # Load API key from environment if not provided
7276 self .api_key = api_key or os .getenv ("TANGO_API_KEY" )
@@ -76,9 +80,14 @@ def __init__(
7680 headers = {}
7781 if self .api_key :
7882 headers ["X-API-KEY" ] = self .api_key
83+ if user_agent :
84+ headers ["User-Agent" ] = user_agent
85+ if extra_headers :
86+ headers .update (extra_headers )
7987
8088 self .client = httpx .Client (headers = headers , timeout = 30.0 )
8189 self ._last_rate_limit_info : RateLimitInfo | None = None
90+ self ._last_response_headers : httpx .Headers | None = None
8291
8392 # Use hardcoded sensible defaults
8493 cache_size = 100
@@ -105,6 +114,11 @@ def rate_limit_info(self) -> RateLimitInfo | None:
105114 """Rate limit info from the most recent API response."""
106115 return self ._last_rate_limit_info
107116
117+ @property
118+ def last_response_headers (self ) -> httpx .Headers | None :
119+ """Full HTTP headers from the most recent API response."""
120+ return self ._last_response_headers
121+
108122 @staticmethod
109123 def _parse_rate_limit_headers (headers : httpx .Headers ) -> RateLimitInfo :
110124 """Extract rate limit info from response headers."""
@@ -140,6 +154,7 @@ def _request(
140154
141155 try :
142156 response = self .client .request (method = method , url = url , params = params , json = json_data )
157+ self ._last_response_headers = response .headers
143158 self ._last_rate_limit_info = self ._parse_rate_limit_headers (response .headers )
144159
145160 if response .status_code == 401 :
0 commit comments