diff --git a/konviva-events/app/konviva.py b/konviva-events/app/konviva.py index e8c5fca..00ae75d 100644 --- a/konviva-events/app/konviva.py +++ b/konviva-events/app/konviva.py @@ -26,6 +26,19 @@ class EmailAlreadyExistsError(KonvivaError): pass +def _raise_konviva_errors_if_any(data: dict = {}) -> None: + """Raises specific exceptions if Konviva API returned errors in the response body""" + errors = glom(data, 'errors', default=None) + if not errors: + return + + error_str = errors[0] if isinstance(errors, list) else errors + if error_str == 'Login já existente': + raise EmailAlreadyExistsError(error_str) + + raise KonvivaError(error_str) + + def create_user( id: str, name: str, @@ -59,15 +72,7 @@ def create_user( ) r.raise_for_status() data = r.json() - - # Because Konviva does not return the proper HTTP status code - if err := glom(data, 'errors', default=None): - err = err[0] if isinstance(err, list) else err - - if err == 'Login já existente': - raise EmailAlreadyExistsError(err) - else: - raise KonvivaError(err) + _raise_konviva_errors_if_any(data) return int(data.get('IDUsuario')) @@ -88,10 +93,7 @@ def update_user(id: str, **kwargs) -> dict: ) r.raise_for_status() data = r.json() - - if err := glom(data, 'errors', default=None): - err = err[0] if isinstance(err, list) else err - raise KonvivaError(err) + _raise_konviva_errors_if_any(data) return data @@ -124,10 +126,7 @@ def _post_enrollment(json: dict) -> dict: ) r.raise_for_status() data = r.json() - - if err := glom(data, 'errors', default=None): - err = err[0] if isinstance(err, list) else err - raise KonvivaError(err) + _raise_konviva_errors_if_any(data) return data