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
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)
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
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)
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
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