aboutsummaryrefslogtreecommitdiff
""" Error handlers for Fahamu Api"""
import json
from requests import HTTPError


class UnprocessableEntity(HTTPError):
    """Error for  HTTP 422 Unprocessable Entity
    https://help.helpjuice.com/en_US/api-v3/api-v3#errors
    """

    def __init__(self, request, response):
        """UnprocessableEntity constructor.

        Parses out error information from the error object and passes on to the
        :obj:`HTTPError` constructor.

        Args:
            exc (:obj:`HTTPError`): Original exception.
        """
        rq_json = next(iter(json.loads(request.body.decode()).values()))
        errors = response.json()

        for field, error in errors.items():
            rq_field = rq_json.get(field, None)
            if not rq_field:
                continue

            if isinstance(error, list):
                error = error.insert(0, rq_field)
            elif isinstance(error, str):
                error = f"{rq_field} {error}"

        msg = json.dumps(errors)
        super(HTTPError, self).__init__(
            msg, request=request, response=response)


class LLMError(Exception):
    """custom exception for LLMErrorMIxins"""