1313 SantanderClientError ,
1414 SantanderRequestError ,
1515)
16- from .helpers import get_status_code_description , try_parse_response_to_json
16+ from .helpers import try_parse_response_to_json
1717
1818BEFORE_EXPIRE_TOKEN_SECONDS = timedelta (seconds = 60 )
1919TOKEN_ENDPOINT = "/auth/oauth/v2/token"
2020
21- logger = logging .getLogger (__name__ )
22-
2321
2422class SantanderApiClient :
2523 """
@@ -47,7 +45,7 @@ def __init__(self, config: SantanderClientConfiguration):
4745 self .session = BaseURLSession (base_url = config .base_url )
4846 self .session .cert = config .cert
4947 self .session .auth = SantanderAuth .from_config (config )
50-
48+ self . logger = config . logger or logging . getLogger ( __name__ )
5149 self ._set_default_workspace_id ()
5250
5351 def _set_default_workspace_id (self ):
@@ -58,7 +56,9 @@ def _set_default_workspace_id(self):
5856 "Conta sem configuração de workspace na configuração e na conta."
5957 )
6058
61- logger .info (f"Workspace obtido e configurado com sucesso: { workspace_id } " )
59+ self .logger .info (
60+ f"Workspace obtido e configurado com sucesso: { workspace_id } "
61+ )
6262 self .config .set_workspace_id (workspace_id )
6363
6464 def get (self , endpoint : str , params : dict | None = None ) -> dict :
@@ -94,17 +94,81 @@ def _request(
9494 params : dict | None = None ,
9595 ) -> dict :
9696 url = self ._prepare_url (endpoint )
97+ response = None
9798 try :
9899 response = self .session .request (
99100 method , url , json = data , params = params , timeout = 60
100101 )
101102 response .raise_for_status ()
103+ self ._log_request_success_if_needed (method , url , params , data , response )
104+
102105 return response .json ()
103106 except requests .exceptions .RequestException as e :
104107 status_code = getattr (e .response , "status_code" , 0 )
105108 error_content = try_parse_response_to_json (e .response )
106- status_description = get_status_code_description (status_code )
109+ self ._log_error_if_needed (method , url , params , data , e )
110+ raise SantanderRequestError (
111+ "Not successful code" , status_code , error_content
112+ )
107113
108- raise SantanderRequestError (status_description , status_code , error_content )
109114 except Exception as e :
110- raise SantanderRequestError (f"Erro na requisição: { e } " , 0 , None ) from e
115+ self ._log_error_if_needed (method , url , params , data , e )
116+ raise SantanderRequestError ("Error in request: %s" % str (e ), 0 , None ) from e
117+
118+ def _log_error_if_needed (
119+ self ,
120+ method : str ,
121+ url : str ,
122+ params : dict | None ,
123+ data : dict | None ,
124+ error : Exception | None ,
125+ ):
126+ if not self .config .log_request_response_level in ["ALL" , "ERROR" ]:
127+ self .logger .info ("Logging error is disabled in client configuration" )
128+
129+ response = getattr (error , "response" , None )
130+ extra = self ._get_request_summary (
131+ method , url , response , request_data = data , request_params = params , error = error
132+ )
133+ self .logger .error ("API request failed" , extra = extra )
134+
135+ def _log_request_success_if_needed (
136+ self ,
137+ method : str ,
138+ url : str ,
139+ params : dict | None ,
140+ data : dict | None ,
141+ response : requests .Response ,
142+ ):
143+ if not self .config .log_request_response_level == "ALL" :
144+ self .logger .info ("Request successful" , url )
145+ return
146+
147+ extra = self ._get_request_summary (
148+ method , url , response , request_data = data , request_params = params
149+ )
150+ self .logger .info ("API request successful" , extra = extra )
151+
152+ def _get_request_summary (
153+ self ,
154+ method : str ,
155+ url : str ,
156+ response : requests .Response | None ,
157+ request_data : dict | None = None ,
158+ request_params : dict | None = None ,
159+ error : Exception | None = None ,
160+ ) -> dict :
161+ return {
162+ "method" : method ,
163+ "url" : url ,
164+ "request_body" : request_data ,
165+ "request_params" : request_params ,
166+ "status_code" : response .status_code if response is not None else None ,
167+ "response_body" : try_parse_response_to_json (response )
168+ if response is not None
169+ else None ,
170+ "status" : "error" if error else "success" ,
171+ "error" : {"message" : str (error ), "type" : type (error ).__name__ }
172+ if error
173+ else None ,
174+ }
0 commit comments