99from .models .request import RequestOptionBuilder
1010from ..logging import get_logger
1111import logging
12+ from urllib .parse import urlencode
1213from ..exceptions import AuthError , BadResponse , NoResultsError
1314
1415logger = get_logger ("RESTClient" )
@@ -29,6 +30,7 @@ def __init__(
2930 retries : int ,
3031 base : str ,
3132 verbose : bool ,
33+ trace : bool ,
3234 custom_json : Optional [Any ] = None ,
3335 ):
3436 if api_key is None :
@@ -58,6 +60,7 @@ def __init__(
5860 self .retries = retries
5961 if verbose :
6062 logger .setLevel (logging .DEBUG )
63+ self .trace = trace
6164 if custom_json :
6265 self .json = custom_json
6366 else :
@@ -77,14 +80,32 @@ def _get(
7780 ) -> Any :
7881 option = options if options is not None else RequestOptionBuilder ()
7982
83+ headers = self ._concat_headers (option .headers )
84+
85+ if self .trace :
86+ full_url = f"{ self .BASE } { path } "
87+ if params :
88+ full_url += f"?{ urlencode (params )} "
89+ print_headers = headers .copy ()
90+ if "Authorization" in print_headers :
91+ print_headers ["Authorization" ] = print_headers ["Authorization" ].replace (
92+ self .API_KEY , "REDACTED"
93+ )
94+ print (f"Request URL: { full_url } " )
95+ print (f"Request Headers: { print_headers } " )
96+
8097 resp = self .client .request (
8198 "GET" ,
8299 self .BASE + path ,
83100 fields = params ,
84101 retries = self .retries ,
85- headers = self . _concat_headers ( option . headers ) ,
102+ headers = headers ,
86103 )
87104
105+ if self .trace :
106+ resp_headers_dict = dict (resp .headers .items ())
107+ print (f"Response Headers: { resp_headers_dict } " )
108+
88109 if resp .status != 200 :
89110 raise BadResponse (resp .data .decode ("utf-8" ))
90111
0 commit comments