Example #1
0
def custom_error_formatter(error: GraphQLError, debug: bool) -> dict:
    if debug:
        return format_error(error, debug)

    formatted = error.formatted
    formatted["message"] = "CUSTOM TOY APP ERROR"
    formatted["debug"] = repr(error)
    return formatted
def error_formatter(error, debug):
    formatted = format_error(error, debug)
    if isinstance(error.original_error, ParkingPermitBaseException):
        formatted["message"] = str(error.original_error)
    elif isinstance(error.original_error, PermissionDenied):
        formatted["message"] = "Forbidden"
    else:
        formatted["message"] = "Internal Server Error"
    return formatted
Example #3
0
def error_formatter(error: GraphQLError, debug: bool = False) -> dict:
    if not debug:
        if isinstance(error.original_error, GraphQLError) and isinstance(
            error.original_error.original_error, ApiException
        ):
            formatted = error.formatted
            formatted["message"] = error.original_error.original_error.message
            return formatted
    return format_error(error, debug)
Example #4
0
def error_formatter(error: GraphQLError, debug: bool = False):
    """
    Custom Ariadne error formatter. A generic text is used if the
    server is not in debug mode and the original error is a
    different error (as in, a different kind of exception raised
    during processing).
    """
    if debug or not error.original_error or isinstance(error.original_error,
                                                       GraphQLError):
        return format_error(error, debug)

    formatted = error.formatted
    formatted["message"] = "Internal server error"
    return formatted
Example #5
0
def error_formatter(error: GraphQLError, debug: bool = False) -> dict:
    lib_error = unwrap_graphql_error(error)

    def enhance_error(error):
        try:
            return dict(
                error,
                message=lib_error.message,  # type: ignore
                type=lib_error.__class__.__name__,
            )
        except AttributeError:  # This isn't a lib error but a real error.
            return error

    if debug:  # pragma: no cover
        return enhance_error(format_error(error, debug))

    return enhance_error(error.formatted)
Example #6
0
def error_formatter(error: GraphQLError, debug: bool = False):
    """Replace Ariadne default error formatter.

    Args:
        error (GraphQLError): The GraphQL error
        debug (bool, optional): True if ASGI app has been
            instantiated with debug=True. Defaults to False.

    Returns:
        dict: [description]
    """
    if debug:
        # If debug is enabled, reuse Ariadne's formatting logic
        formatted = format_error(error, debug)
    else:
        formatted = error.formatted  # pragma: no cover

    return formatted
Example #7
0
def format_database_errors(error, debug=False):
    """Custom formatting of peewee errors (indicating a missing resource) to avoid SQL
    queries from being exposed to the client.
    In the resulting response, the corresponding field for `data` will be None, and the
    `errors` list will have a single entry.
    """
    if debug:  # pragma: no cover
        return ariadne.format_error(error, debug)

    if isinstance(error.original_error,
                  (peewee.DoesNotExist, peewee.IntegrityError)):
        # IntegrityError is raised when foreign key ID does not exist.
        error.message = ""  # setting `error.formatted["message"] = ""` has no effect
        error.extensions = RequestedResourceNotFound.extensions
    elif isinstance(error.original_error, peewee.PeeweeException):
        error.message = ""
        error.extensions = {
            "code": "INTERNAL_SERVER_ERROR",
            "description":
            "The database failed to perform the requested action.",
        }
    return error.formatted