"""AuroraDSQLBackend class with methods for supported APIs.""" from collections import OrderedDict from typing import Any, Dict, Optional from moto.core.base_backend import BackendDict, BaseBackend from moto.core.common_models import BaseModel from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow from moto.moto_api._internal import mock_random from moto.moto_api._internal.managed_state_model import ManagedState from moto.utilities.utils import get_partition from .exceptions import ValidationException class Cluster(BaseModel, ManagedState): """Model for an AuroraDSQL cluster.""" def to_dict(self) -> Dict[str, Any]: dct = { "identifier": self.identifier, "arn": self.arn, "status": self.status, "creationTime": iso_8601_datetime_with_milliseconds(self.creation_time), "deletionProtectionEnabled": self.deletion_protection_enabled, } return {k: v for k, v in dct.items() if v is not None} def __init__( self, region_name: str, account_id: str, deletion_protection_enabled: Optional[bool], tags: Optional[Dict[str, str]], client_token: Optional[str], ): ManagedState.__init__( self, "dsql::cluster", transitions=[("CREATING", "ACTIVE")] ) self.region_name = region_name self.account_id = account_id self.identifier = mock_random.get_random_hex(26) self.arn = f"arn:{get_partition(self.region_name)}:dsql:{self.region_name}:{self.account_id}:cluster/{self.identifier}" self.creation_time = utcnow() self.deletion_protection_enabled = deletion_protection_enabled self.tags = tags self.client_token = client_token class AuroraDSQLBackend(BaseBackend): """Implementation of AuroraDSQL APIs.""" def __init__(self, region_name: str, account_id: str): super().__init__(region_name, account_id) self.region_name = region_name self.account_id = account_id self.partition = get_partition(region_name) self.clusters: Dict[str, Cluster] = OrderedDict() def create_cluster( self, deletion_protection_enabled: bool, tags: Optional[Dict[str, str]], client_token: Optional[str], ) -> Cluster: cluster = Cluster( self.region_name, self.account_id, deletion_protection_enabled, tags, client_token, ) self.clusters[cluster.identifier] = cluster return cluster def get_cluster( self, identifier: str, ) -> Cluster: cluster = self.clusters.get(identifier) if cluster is None: raise ValidationException("invalid Cluster Id") return cluster dsql_backends = BackendDict( AuroraDSQLBackend, "dsql", # currently botocore does not provide a dsql endpoint # https://github.com/boto/botocore/blob/e07cddc333fe4fb90efcd5d04324dd83f9cc3a57/botocore/data/endpoints.json use_boto3_regions=False, additional_regions=["us-east-1", "us-east-2"], )
Memory