moto/moto/glue/exceptions.py
2023-05-12 15:41:48 +00:00

318 lines
10 KiB
Python

from typing import Optional
from moto.core.exceptions import JsonRESTError
class GlueClientError(JsonRESTError):
code = 400
class AlreadyExistsException(GlueClientError):
def __init__(self, typ: str):
super().__init__("AlreadyExistsException", f"{typ} already exists.")
class DatabaseAlreadyExistsException(AlreadyExistsException):
def __init__(self) -> None:
super().__init__("Database")
class TableAlreadyExistsException(AlreadyExistsException):
def __init__(self) -> None:
super().__init__("Table")
class PartitionAlreadyExistsException(AlreadyExistsException):
def __init__(self) -> None:
super().__init__("Partition")
class CrawlerAlreadyExistsException(AlreadyExistsException):
def __init__(self) -> None:
super().__init__("Crawler")
class SessionAlreadyExistsException(AlreadyExistsException):
def __init__(self) -> None:
super().__init__("Session")
class EntityNotFoundException(GlueClientError):
def __init__(self, msg: str):
super().__init__("EntityNotFoundException", msg)
class DatabaseNotFoundException(EntityNotFoundException):
def __init__(self, db: str):
super().__init__(f"Database {db} not found.")
class TableNotFoundException(EntityNotFoundException):
def __init__(self, tbl: str):
super().__init__(f"Table {tbl} not found.")
class PartitionNotFoundException(EntityNotFoundException):
def __init__(self) -> None:
super().__init__("Cannot find partition.")
class CrawlerNotFoundException(EntityNotFoundException):
def __init__(self, crawler: str):
super().__init__(f"Crawler {crawler} not found.")
class JobNotFoundException(EntityNotFoundException):
def __init__(self, job: str):
super().__init__(f"Job {job} not found.")
class JobRunNotFoundException(EntityNotFoundException):
def __init__(self, job_run: str):
super().__init__(f"Job run {job_run} not found.")
class VersionNotFoundException(EntityNotFoundException):
def __init__(self) -> None:
super().__init__("Version not found.")
class SchemaNotFoundException(EntityNotFoundException):
def __init__(
self,
schema_name: str,
registry_name: str,
schema_arn: Optional[str],
null: str = "null",
):
super().__init__(
f"Schema is not found. RegistryName: {registry_name if registry_name else null}, SchemaName: {schema_name if schema_name else null}, SchemaArn: {schema_arn if schema_arn else null}",
)
class SchemaVersionNotFoundFromSchemaIdException(EntityNotFoundException):
def __init__(
self,
registry_name: Optional[str],
schema_name: Optional[str],
schema_arn: Optional[str],
version_number: Optional[str],
latest_version: Optional[str],
null: str = "null",
false: str = "false",
):
super().__init__(
f"Schema version is not found. RegistryName: {registry_name if registry_name else null}, SchemaName: {schema_name if schema_name else null}, SchemaArn: {schema_arn if schema_arn else null}, VersionNumber: {version_number if version_number else null}, isLatestVersion: {latest_version if latest_version else false}",
)
class SchemaVersionNotFoundFromSchemaVersionIdException(EntityNotFoundException):
def __init__(self, schema_version_id: str):
super().__init__(
f"Schema version is not found. SchemaVersionId: {schema_version_id}",
)
class SessionNotFoundException(EntityNotFoundException):
def __init__(self, session: str):
super().__init__(f"Session {session} not found.")
class IllegalSessionStateException(GlueClientError):
def __init__(self, msg: str):
super().__init__("IllegalSessionStateException", msg)
class RegistryNotFoundException(EntityNotFoundException):
def __init__(self, resource: str, param_name: str, param_value: Optional[str]):
super().__init__(
resource + " is not found. " + param_name + ": " + param_value, # type: ignore
)
class TriggerNotFoundException(EntityNotFoundException):
def __init__(self, trigger: str):
super().__init__(f"Trigger {trigger} not found.")
class CrawlerRunningException(GlueClientError):
def __init__(self, msg: str):
super().__init__("CrawlerRunningException", msg)
class CrawlerNotRunningException(GlueClientError):
def __init__(self, msg: str):
super().__init__("CrawlerNotRunningException", msg)
class ConcurrentRunsExceededException(GlueClientError):
def __init__(self, msg: str):
super().__init__("ConcurrentRunsExceededException", msg)
class ResourceNumberLimitExceededException(GlueClientError):
def __init__(self, msg: str):
super().__init__(
"ResourceNumberLimitExceededException",
msg,
)
class GeneralResourceNumberLimitExceededException(ResourceNumberLimitExceededException):
def __init__(self, resource: str):
super().__init__(
"More "
+ resource
+ " cannot be created. The maximum limit has been reached.",
)
class SchemaVersionMetadataLimitExceededException(ResourceNumberLimitExceededException):
def __init__(self) -> None:
super().__init__(
"Your resource limits for Schema Version Metadata have been exceeded.",
)
class GSRAlreadyExistsException(GlueClientError):
def __init__(self, msg: str):
super().__init__(
"AlreadyExistsException",
msg,
)
class SchemaVersionMetadataAlreadyExistsException(GSRAlreadyExistsException):
def __init__(self, schema_version_id: str, metadata_key: str, metadata_value: str):
super().__init__(
f"Resource already exist for schema version id: {schema_version_id}, metadata key: {metadata_key}, metadata value: {metadata_value}",
)
class GeneralGSRAlreadyExistsException(GSRAlreadyExistsException):
def __init__(self, resource: str, param_name: str, param_value: str):
super().__init__(
resource + " already exists. " + param_name + ": " + param_value,
)
class _InvalidOperationException(GlueClientError):
def __init__(self, error_type: str, op: str, msg: str):
super().__init__(
error_type,
"An error occurred (%s) when calling the %s operation: %s"
% (error_type, op, msg),
)
class InvalidStateException(_InvalidOperationException):
def __init__(self, op: str, msg: str):
super().__init__("InvalidStateException", op, msg)
class InvalidInputException(_InvalidOperationException):
def __init__(self, op: str, msg: str):
super().__init__("InvalidInputException", op, msg)
class GSRInvalidInputException(GlueClientError):
def __init__(self, msg: str):
super().__init__("InvalidInputException", msg)
class ResourceNameTooLongException(GSRInvalidInputException):
def __init__(self, param_name: str):
super().__init__(
"The resource name contains too many or too few characters. Parameter Name: "
+ param_name,
)
class ParamValueContainsInvalidCharactersException(GSRInvalidInputException):
def __init__(self, param_name: str):
super().__init__(
"The parameter value contains one or more characters that are not valid. Parameter Name: "
+ param_name,
)
class InvalidNumberOfTagsException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__(
"New Tags cannot be empty or more than 50",
)
class InvalidDataFormatException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__(
"Data format is not valid.",
)
class InvalidCompatibilityException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__(
"Compatibility is not valid.",
)
class InvalidSchemaDefinitionException(GSRInvalidInputException):
def __init__(self, data_format_name: str, err: ValueError):
super().__init__(
"Schema definition of "
+ data_format_name
+ " data format is invalid: "
+ str(err),
)
class InvalidRegistryIdBothParamsProvidedException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__(
"One of registryName or registryArn has to be provided, both cannot be provided.",
)
class InvalidSchemaIdBothParamsProvidedException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__(
"One of (registryName and schemaName) or schemaArn has to be provided, both cannot be provided.",
)
class InvalidSchemaIdNotProvidedException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__(
"At least one of (registryName and schemaName) or schemaArn has to be provided.",
)
class InvalidSchemaVersionNumberBothParamsProvidedException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__("Only one of VersionNumber or LatestVersion is required.")
class InvalidSchemaVersionNumberNotProvidedException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__("One of version number (or) latest version is required.")
class InvalidSchemaVersionIdProvidedWithOtherParamsException(GSRInvalidInputException):
def __init__(self) -> None:
super().__init__(
"No other input parameters can be specified when fetching by SchemaVersionId."
)
class DisabledCompatibilityVersioningException(GSRInvalidInputException):
def __init__(
self,
schema_name: str,
registry_name: str,
schema_arn: Optional[str],
null: str = "null",
):
super().__init__(
f"Compatibility DISABLED does not allow versioning. SchemaId: SchemaId(schemaArn={schema_arn if schema_arn else null}, schemaName={schema_name if schema_name else null}, registryName={registry_name if registry_name else null})"
)