def error_handler(loop: "asyncio.AbstractEventLoop", context: dict) -> None: exception = context.get("exception") if exception: message = error_reporter.get_exception_message(exception) error_reporter.report_exception(exception, message) loop.stop() loop.close()
def webserver_error_handler( exception: Exception) -> Tuple[str, int, Dict[str, str]]: # noqa C901 if isinstance(exception, exceptions.UnauthorizedException): status_code = 401 surface_error = invalid_auth(exception) elif isinstance(exception, exceptions.APIRateLimitException): status_code = 429 surface_error = too_many_requests(exception) elif isinstance(exception, exceptions.NotFound): status_code = 404 surface_error = NOT_FOUND elif isinstance(exception, exceptions.ValidationException): status_code = 400 surface_error = validation_exception(exception) elif isinstance(exception, exceptions.BadRequest): status_code = 400 surface_error = bad_request(exception) elif isinstance(exception, exceptions.ActionForbidden): status_code = 403 surface_error = action_forbidden(exception) elif isinstance(exception, exceptions.NotEnoughCrypto): status_code = 400 surface_error = INSUFFICIENT_CRYPTO elif isinstance(exception, exceptions.ContractConflict): status_code = 409 surface_error = CONTRACT_CONFLICT elif isinstance(exception, exceptions.TransactionTypeConflict): status_code = 409 surface_error = TRANSACTION_TYPE_CONFLICT elif isinstance(exception, exceptions.InterchainConflict): status_code = 409 surface_error = INTERCHAIN_CONFLICT elif isinstance(exception, exceptions.InvalidTransactionType): status_code = 403 surface_error = INVALID_TRANSACTION_TYPE elif isinstance(exception, exceptions.ContractLimitExceeded): status_code = 403 surface_error = contract_limit_exceeded(exception) elif isinstance(exception, exceptions.BadStateError): status_code = 400 surface_error = BAD_STATE elif isinstance(exception, exceptions.InvalidNodeLevel): status_code = 400 surface_error = INVALID_NODE_LEVEL elif isinstance(exception, exceptions.NotAcceptingVerifications): status_code = 412 surface_error = NOT_ACCEPTING_VERIFICATIONS elif isinstance(exception, exceptions.BadDockerAuth): status_code = 400 surface_error = BAD_DOCKER_AUTH_ERROR elif isinstance(exception, exceptions.LabChainForbiddenException): status_code = 403 surface_error = ACTION_FORBIDDEN_LAB_CHAIN elif isinstance(exception, werkzeug_exceptions.MethodNotAllowed): status_code = 405 surface_error = METHOD_NOT_ALLOWED elif isinstance(exception, werkzeug_exceptions.NotFound): status_code = 404 surface_error = ROUTE_NOT_FOUND elif isinstance(exception, exceptions.OpenFaasException): status_code = 500 surface_error = OPENFAAS_ERROR else: status_code = 500 surface_error = INTERNAL_SERVER_ERROR _log.error(f"Responding: {status_code} {surface_error}") if status_code >= 500: try: message = error_reporter.get_exception_message(exception) error_reporter.report_exception(exception, message) except Exception: _log.exception("Exception while attempting to report error") else: # Exception didn't get logged in report_exception _log.exception("Error:") return flask_http_response(status_code, surface_error)
def error_handler(event: "apscheduler.events.JobExecutionEvent") -> bool: exception = event.exception message = error_reporter.get_exception_message(exception) error_reporter.report_exception(exception, message) _scheduler.shutdown() return False
def validation_exception(exception: Exception) -> dict: message = error_reporter.get_exception_message(exception) return format_error("VALIDATION_ERROR", message)
def bad_request(exception: Exception) -> dict: message = error_reporter.get_exception_message(exception) return format_error("BAD_REQUEST", message)
def contract_limit_exceeded(exception: Exception) -> dict: parameter = error_reporter.get_exception_message(exception) return format_error( "CONTRACT_LIMIT_EXCEEDED", f"This chain has exceeded the limit of {parameter} contracts. Please delete contracts before attempting to create more.", )
def too_many_requests(exception: Exception) -> dict: message = error_reporter.get_exception_message(exception) return format_error("TOO_MANY_REQUESTS", message)
def invalid_auth(exception: Exception) -> dict: message = error_reporter.get_exception_message(exception) return format_error("AUTHENTICATION_ERROR", message)
def action_forbidden(exception: Exception) -> dict: message = error_reporter.get_exception_message(exception) return format_error("ACTION_FORBIDDEN", message)
def interchain_publish_error(exception: Exception) -> dict: message = error_reporter.get_exception_message(exception) return format_error("INTERCHAIN_PUBLISH_ERROR", message)