@@ -35,21 +35,27 @@ class ApiClient:
3535 :param str token: Token de autenticación del usuario. Si no se proporciona,
3636 se intentará obtener de una variable de entorno.
3737 :param str url: URL base de la API. Si no se proporciona, se usará una
38- URL por defecto.
39- :param str version: Versión de la API. Si no se proporciona, se usará
40- una versión por defecto .
38+ URL por defecto según la versión .
39+ :param str version: Versión de la API. Si no se proporciona, se usará v2.
40+ También puede configurarse con la variable de entorno APIGATEWAY_API_VERSION .
4141 :param bool raise_for_status: Si se debe lanzar una excepción automáticamente
4242 para respuestas de error HTTP. Por defecto es True.
4343 '''
4444
45- __DEFAULT_URL = 'https://legacy.apigateway.cl'
46- __DEFAULT_VERSION = 'v1 '
45+ _url_v1 = 'https://legacy.apigateway.cl'
46+ _url_v2 = 'https://app.apigateway.cl '
4747
4848 def __init__ (self , token = None , url = None , version = None , raise_for_status = True ):
49+ self .version = version or getenv ('APIGATEWAY_API_VERSION' , 'v2' )
50+ if self .version == 'v1' :
51+ self .token_prefix = 'Bearer'
52+ self ._default_url = self ._url_v1
53+ else :
54+ self .token_prefix = 'Token'
55+ self ._default_url = self ._url_v2
4956 self .token = self .__validate_token (token )
5057 self .url = self .__validate_url (url )
5158 self .headers = self .__generate_headers ()
52- self .version = version or self .__DEFAULT_VERSION
5359 self .raise_for_status = raise_for_status
5460
5561 def __validate_token (self , token ):
@@ -77,7 +83,7 @@ def __validate_url(self, url):
7783 '''
7884 return str (url ).strip () if url else getenv (
7985 'APIGATEWAY_API_URL' ,
80- self .__DEFAULT_URL ).strip ()
86+ self ._default_url ).strip ()
8187
8288 def __generate_headers (self ):
8389 '''
@@ -90,7 +96,7 @@ def __generate_headers(self):
9096 'User-Agent' : 'API Gateway: Cliente de API en Python.' ,
9197 'Content-Type' : 'application/json' ,
9298 'Accept' : 'application/json' ,
93- 'Authorization' : 'Bearer %(token)s' % {'token' : self .token }
99+ 'Authorization' : '%(prefix)s %(token)s' % {'prefix' : self . token_prefix , 'token' : self .token }
94100 }
95101
96102 def __request (self , method , resource , data = None , headers = None ):
@@ -142,10 +148,12 @@ def __check_and_return_response(self, response):
142148 if response .status_code != 200 and self .raise_for_status :
143149 try :
144150 response .raise_for_status ()
145- except HTTPError as error :
151+ except HTTPError :
146152 try :
147153 error = response .json ()
148154 message = error .get (
155+ 'detail' , ''
156+ ) or error .get (
149157 'message' , ''
150158 ) or error .get (
151159 'exception' , ''
@@ -157,6 +165,9 @@ def __check_and_return_response(self, response):
157165 raise ApiException ('Error HTTP: %(message)s' % {
158166 'message' : message
159167 })
168+ if self .version == 'v2' :
169+ _original_json = response .json
170+ response .json = lambda : _original_json ()['data' ]
160171 return response
161172
162173 def get (self , resource , headers = None ):
@@ -255,8 +266,6 @@ class ApiBase(ABC):
255266 :param dict kwargs: Argumentos adicionales para la autenticación.
256267 '''
257268
258- auth = {}
259-
260269 def __init__ (
261270 self ,
262271 api_token = None ,
@@ -265,6 +274,7 @@ def __init__(
265274 api_raise_for_status = True ,
266275 ** kwargs
267276 ):
277+ self .auth = {}
268278 self .client = ApiClient (
269279 api_token ,
270280 api_url ,
@@ -354,7 +364,7 @@ def __is_auth_file_data(self, firma_electronica_base64):
354364 # Intenta decodificar la cadena con validación estricta
355365 base64 .b64decode (firma_electronica_base64 , validate = True )
356366 return True
357- except (base64 .binascii .Error , ValueError ):
367+ except (base64 .binascii .Error , ValueError ): # type: ignore
358368 return False
359369
360370 def __is_auth_cert_data (self , pem_str ):
@@ -405,7 +415,7 @@ def __is_auth_cert_data(self, pem_str):
405415 try :
406416 base64 .b64decode (base64_content , validate = True )
407417 return True
408- except (base64 .binascii .Error , ValueError ):
418+ except (base64 .binascii .Error , ValueError ): # type: ignore
409419 return False
410420
411421 def _get_auth_pass (self ):
0 commit comments