287 lines
7.3 KiB
Python
287 lines
7.3 KiB
Python
from moto.core.exceptions import JsonRESTError
|
|
from typing import Any
|
|
|
|
|
|
class ApiGatewayException(JsonRESTError):
|
|
pass
|
|
|
|
|
|
class BadRequestException(ApiGatewayException):
|
|
def __init__(self, message: str):
|
|
super().__init__("BadRequestException", message)
|
|
|
|
|
|
class NotFoundException(ApiGatewayException):
|
|
def __init__(self, message: str):
|
|
super().__init__("NotFoundException", message)
|
|
|
|
|
|
class AccessDeniedException(ApiGatewayException):
|
|
pass
|
|
|
|
|
|
class ConflictException(ApiGatewayException):
|
|
code = 409
|
|
|
|
def __init__(self, message: str):
|
|
super().__init__("ConflictException", message)
|
|
|
|
|
|
class AwsProxyNotAllowed(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__(
|
|
"Integrations of type 'AWS_PROXY' currently only supports Lambda function and Firehose stream invocations."
|
|
)
|
|
|
|
|
|
class CrossAccountNotAllowed(AccessDeniedException):
|
|
def __init__(self) -> None:
|
|
super().__init__(
|
|
"AccessDeniedException", "Cross-account pass role is not allowed."
|
|
)
|
|
|
|
|
|
class RoleNotSpecified(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__("Role ARN must be specified for AWS integrations")
|
|
|
|
|
|
class IntegrationMethodNotDefined(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__("Enumeration value for HttpMethod must be non-empty")
|
|
|
|
|
|
class InvalidOpenAPIDocumentException(BadRequestException):
|
|
def __init__(self, cause: Any):
|
|
super().__init__(
|
|
f"Failed to parse the uploaded OpenAPI document due to: {cause.message}"
|
|
)
|
|
|
|
|
|
class InvalidOpenApiDocVersionException(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__("Only OpenAPI 3.x.x are currently supported")
|
|
|
|
|
|
class InvalidOpenApiModeException(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__(
|
|
'Enumeration value of OpenAPI import mode must be "overwrite" or "merge"',
|
|
)
|
|
|
|
|
|
class InvalidResourcePathException(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__(
|
|
"Resource's path part only allow a-zA-Z0-9._- and curly braces at the beginning and the end and an optional plus sign before the closing brace."
|
|
)
|
|
|
|
|
|
class InvalidHttpEndpoint(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid HTTP endpoint specified for URI")
|
|
|
|
|
|
class InvalidArn(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid ARN specified in the request")
|
|
|
|
|
|
class InvalidIntegrationArn(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__("AWS ARN for integration must contain path or action")
|
|
|
|
|
|
class InvalidRequestInput(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid request input")
|
|
|
|
|
|
class NoIntegrationDefined(NotFoundException):
|
|
def __init__(self) -> None:
|
|
super().__init__("No integration defined for method")
|
|
|
|
|
|
class NoIntegrationResponseDefined(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid Response status code specified")
|
|
|
|
|
|
class NoMethodDefined(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__("The REST API doesn't contain any methods")
|
|
|
|
|
|
class AuthorizerNotFoundException(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid Authorizer identifier specified")
|
|
|
|
|
|
class StageNotFoundException(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid stage identifier specified")
|
|
|
|
|
|
class ApiKeyNotFoundException(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid API Key identifier specified")
|
|
|
|
|
|
class UsagePlanNotFoundException(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid Usage Plan ID specified")
|
|
|
|
|
|
class ApiKeyAlreadyExists(ApiGatewayException):
|
|
code = 409
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("ConflictException", "API Key already exists")
|
|
|
|
|
|
class InvalidDomainName(BadRequestException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("No Domain Name specified")
|
|
|
|
|
|
class DomainNameNotFound(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid domain name identifier specified")
|
|
|
|
|
|
class InvalidRestApiId(BadRequestException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("No Rest API Id specified")
|
|
|
|
|
|
class InvalidModelName(BadRequestException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("No Model Name specified")
|
|
|
|
|
|
class RestAPINotFound(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid Rest API Id specified")
|
|
|
|
|
|
class RequestValidatorNotFound(BadRequestException):
|
|
code = 400
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid Request Validator Id specified")
|
|
|
|
|
|
class ModelNotFound(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid Model Name specified")
|
|
|
|
|
|
class ApiKeyValueMinLength(BadRequestException):
|
|
code = 400
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("API Key value should be at least 20 characters")
|
|
|
|
|
|
class MethodNotFoundException(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid Method identifier specified")
|
|
|
|
|
|
class InvalidBasePathException(BadRequestException):
|
|
code = 400
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__(
|
|
"API Gateway V1 doesn't support the slash character (/) in base path mappings. "
|
|
"To create a multi-level base path mapping, use API Gateway V2."
|
|
)
|
|
|
|
|
|
class DeploymentNotFoundException(NotFoundException):
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid Deployment identifier specified")
|
|
|
|
|
|
class InvalidRestApiIdForBasePathMappingException(BadRequestException):
|
|
code = 400
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid REST API identifier specified")
|
|
|
|
|
|
class InvalidStageException(BadRequestException):
|
|
code = 400
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid stage identifier specified")
|
|
|
|
|
|
class BasePathConflictException(ConflictException):
|
|
def __init__(self) -> None:
|
|
super().__init__("Base path already exists for this domain name")
|
|
|
|
|
|
class BasePathNotFoundException(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid base path mapping identifier specified")
|
|
|
|
|
|
class ResourceIdNotFoundException(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("Invalid resource identifier specified")
|
|
|
|
|
|
class VpcLinkNotFound(NotFoundException):
|
|
code = 404
|
|
|
|
def __init__(self) -> None:
|
|
super().__init__("VPCLink not found")
|
|
|
|
|
|
class ValidationException(ApiGatewayException):
|
|
code = 400
|
|
|
|
def __init__(self, message: str):
|
|
super().__init__("ValidationException", message)
|
|
|
|
|
|
class StageStillActive(BadRequestException):
|
|
def __init__(self) -> None:
|
|
super().__init__(
|
|
"Active stages pointing to this deployment must be moved or deleted"
|
|
)
|
|
|
|
|
|
class GatewayResponseNotFound(NotFoundException):
|
|
def __init__(self) -> None:
|
|
super().__init__("GatewayResponse not found")
|