示例#1
0
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()
示例#2
0
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)
示例#3
0
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
示例#4
0
def validation_exception(exception: Exception) -> dict:
    message = error_reporter.get_exception_message(exception)
    return format_error("VALIDATION_ERROR", message)
示例#5
0
def bad_request(exception: Exception) -> dict:
    message = error_reporter.get_exception_message(exception)
    return format_error("BAD_REQUEST", message)
示例#6
0
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.",
    )
示例#7
0
def too_many_requests(exception: Exception) -> dict:
    message = error_reporter.get_exception_message(exception)
    return format_error("TOO_MANY_REQUESTS", message)
示例#8
0
def invalid_auth(exception: Exception) -> dict:
    message = error_reporter.get_exception_message(exception)
    return format_error("AUTHENTICATION_ERROR", message)
示例#9
0
def action_forbidden(exception: Exception) -> dict:
    message = error_reporter.get_exception_message(exception)
    return format_error("ACTION_FORBIDDEN", message)
示例#10
0
def interchain_publish_error(exception: Exception) -> dict:
    message = error_reporter.get_exception_message(exception)
    return format_error("INTERCHAIN_PUBLISH_ERROR", message)