Skip to content

Commit 88a371f

Browse files
author
gabino
committed
Refactor error handling with pattern matching
1 parent df8dcc6 commit 88a371f

File tree

1 file changed

+24
-23
lines changed

1 file changed

+24
-23
lines changed

quienesquien/client.py

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,6 @@
1515
)
1616
from .person import Person
1717

18-
NOT_FOUND_ERROR_RESPONSE = 'No se han encontrado coincidencias'
19-
INVALID_TOKEN_ERROR_RESPONSE = (
20-
'El token proporcionado para realizar esta acción es inválido'
21-
)
22-
INVALID_PLAN_ERROR_RESPONSE = (
23-
'Tu plan de consultas ha expirado, '
24-
'por favor actualiza tu plan para continuar usando la API'
25-
)
26-
2718

2819
@dataclass
2920
class Client:
@@ -145,24 +136,34 @@ async def search(
145136
'GET', search_url, params=params, headers=headers
146137
)
147138
except httpx.HTTPStatusError as exc:
148-
if exc.response.status_code == 401:
149-
self._invalidate_auth_token()
150-
raise InvalidTokenError(exc.response)
151-
if exc.response.status_code == 403:
152-
raise InsufficientBalanceError(exc.response)
153-
raise QuienEsQuienError(exc.response) from exc
139+
match exc.response.status_code:
140+
case 401:
141+
self._invalidate_auth_token()
142+
raise InvalidTokenError(exc.response)
143+
case 403:
144+
raise InsufficientBalanceError(exc.response)
145+
case _:
146+
raise QuienEsQuienError(exc.response) from exc
154147

155148
response_data = response.json()
156149
if not response_data.get('success', False):
157150
status = response_data.get('status', '')
158-
if status == NOT_FOUND_ERROR_RESPONSE:
159-
raise PersonNotFoundError(response)
160-
if status == INVALID_TOKEN_ERROR_RESPONSE:
161-
self._invalidate_auth_token()
162-
raise InvalidTokenError(response)
163-
if status == INVALID_PLAN_ERROR_RESPONSE:
164-
raise InvalidPlanError(response)
165-
raise QuienEsQuienError(response)
151+
match status:
152+
case 'No se han encontrado coincidencias':
153+
raise PersonNotFoundError(response)
154+
case (
155+
'El token proporcionado para realizar esta acción '
156+
'es inválido'
157+
):
158+
self._invalidate_auth_token()
159+
raise InvalidTokenError(response)
160+
case (
161+
'Tu plan de consultas ha expirado, por favor '
162+
'actualiza tu plan para continuar usando la API'
163+
):
164+
raise InvalidPlanError(response)
165+
case _:
166+
raise QuienEsQuienError(response)
166167

167168
matched_persons = [
168169
Person(**person_data)

0 commit comments

Comments
 (0)