moto/moto/backends.py

677 lines
25 KiB
Python

import importlib
import os
from typing import TYPE_CHECKING, Iterable, Optional, Union, overload
import moto
if TYPE_CHECKING:
from typing_extensions import Literal
from moto.acm.models import AWSCertificateManagerBackend
from moto.acmpca.models import ACMPCABackend
from moto.amp.models import PrometheusServiceBackend
from moto.apigateway.models import APIGatewayBackend
from moto.apigatewaymanagementapi.models import ApiGatewayManagementApiBackend
from moto.apigatewayv2.models import ApiGatewayV2Backend
from moto.appconfig.models import AppConfigBackend
from moto.applicationautoscaling.models import ApplicationAutoscalingBackend
from moto.appsync.models import AppSyncBackend
from moto.athena.models import AthenaBackend
from moto.autoscaling.models import AutoScalingBackend
from moto.awslambda.models import LambdaBackend
from moto.batch.models import BatchBackend
from moto.budgets.models import BudgetsBackend
from moto.ce.models import CostExplorerBackend
from moto.cloudformation.models import CloudFormationBackend
from moto.cloudfront.models import CloudFrontBackend
from moto.cloudtrail.models import CloudTrailBackend
from moto.cloudwatch.models import CloudWatchBackend
from moto.codebuild.models import CodeBuildBackend
from moto.codecommit.models import CodeCommitBackend
from moto.codepipeline.models import CodePipelineBackend
from moto.cognitoidentity.models import CognitoIdentityBackend
from moto.cognitoidp.models import CognitoIdpBackend
from moto.comprehend.models import ComprehendBackend
from moto.config.models import ConfigBackend
from moto.core.base_backend import SERVICE_BACKEND, BackendDict
from moto.databrew.models import DataBrewBackend
from moto.datapipeline.models import DataPipelineBackend
from moto.datasync.models import DataSyncBackend
from moto.dax.models import DAXBackend
from moto.dms.models import DatabaseMigrationServiceBackend
from moto.ds.models import DirectoryServiceBackend
from moto.dynamodb.models import DynamoDBBackend
from moto.dynamodb_v20111205.models import (
DynamoDBBackend as DynamoDBBackend_v20111205,
)
from moto.dynamodbstreams.models import DynamoDBStreamsBackend
from moto.ebs.models import EBSBackend
from moto.ec2.models import EC2Backend
from moto.ec2instanceconnect.models import Ec2InstanceConnectBackend
from moto.ecr.models import ECRBackend
from moto.ecs.models import EC2ContainerServiceBackend
from moto.efs.models import EFSBackend
from moto.eks.models import EKSBackend
from moto.elasticache.models import ElastiCacheBackend
from moto.elasticbeanstalk.models import EBBackend
from moto.elastictranscoder.models import ElasticTranscoderBackend
from moto.elb.models import ELBBackend
from moto.elbv2.models import ELBv2Backend
from moto.emr.models import ElasticMapReduceBackend
from moto.emrcontainers.models import EMRContainersBackend
from moto.emrserverless.models import EMRServerlessBackend
from moto.es.models import ElasticsearchServiceBackend
from moto.events.models import EventsBackend
from moto.firehose.models import FirehoseBackend
from moto.forecast.models import ForecastBackend
from moto.glacier.models import GlacierBackend
from moto.glue.models import GlueBackend
from moto.greengrass.models import GreengrassBackend
from moto.guardduty.models import GuardDutyBackend
from moto.iam.models import IAMBackend
from moto.identitystore.models import IdentityStoreBackend
from moto.inspector2.models import Inspector2Backend
from moto.instance_metadata.models import InstanceMetadataBackend
from moto.iot.models import IoTBackend
from moto.iotdata.models import IoTDataPlaneBackend
from moto.ivs.models import IVSBackend
from moto.kinesis.models import KinesisBackend
from moto.kinesisvideo.models import KinesisVideoBackend
from moto.kinesisvideoarchivedmedia.models import KinesisVideoArchivedMediaBackend
from moto.kms.models import KmsBackend
from moto.lakeformation.models import LakeFormationBackend
from moto.logs.models import LogsBackend
from moto.managedblockchain.models import ManagedBlockchainBackend
from moto.mediaconnect.models import MediaConnectBackend
from moto.medialive.models import MediaLiveBackend
from moto.mediapackage.models import MediaPackageBackend
from moto.mediastore.models import MediaStoreBackend
from moto.mediastoredata.models import MediaStoreDataBackend
from moto.meteringmarketplace.models import MeteringMarketplaceBackend
from moto.moto_api._internal.models import MotoAPIBackend
from moto.mq.models import MQBackend
from moto.neptune.models import NeptuneBackend
from moto.opensearch.models import OpenSearchServiceBackend
from moto.opsworks.models import OpsWorksBackend
from moto.organizations.models import OrganizationsBackend
from moto.personalize.models import PersonalizeBackend
from moto.pinpoint.models import PinpointBackend
from moto.polly.models import PollyBackend
from moto.quicksight.models import QuickSightBackend
from moto.ram.models import ResourceAccessManagerBackend
from moto.rds.models import RDSBackend
from moto.rdsdata.models import RDSDataServiceBackend
from moto.redshift.models import RedshiftBackend
from moto.redshiftdata.models import RedshiftDataAPIServiceBackend
from moto.rekognition.models import RekognitionBackend
from moto.resiliencehub.models import ResilienceHubBackend
from moto.resourcegroups.models import ResourceGroupsBackend
from moto.resourcegroupstaggingapi.models import ResourceGroupsTaggingAPIBackend
from moto.robomaker.models import RoboMakerBackend
from moto.route53.models import Route53Backend
from moto.route53domains.models import Route53DomainsBackend
from moto.route53resolver.models import Route53ResolverBackend
from moto.s3.models import S3Backend
from moto.s3control.models import S3ControlBackend
from moto.sagemaker.models import SageMakerModelBackend
from moto.sagemakerruntime.models import SageMakerRuntimeBackend
from moto.scheduler.models import EventBridgeSchedulerBackend
from moto.sdb.models import SimpleDBBackend
from moto.secretsmanager.models import SecretsManagerBackend
from moto.servicediscovery.models import ServiceDiscoveryBackend
from moto.servicequotas.models import ServiceQuotasBackend
from moto.ses.models import SESBackend
from moto.sesv2.models import SESV2Backend
from moto.signer.models import SignerBackend
from moto.sns.models import SNSBackend
from moto.sqs.models import SQSBackend
from moto.ssm.models import SimpleSystemManagerBackend
from moto.ssoadmin.models import SSOAdminBackend
from moto.stepfunctions.models import StepFunctionBackend
from moto.sts.models import STSBackend
from moto.support.models import SupportBackend
from moto.swf.models import SWFBackend
from moto.textract.models import TextractBackend
from moto.timestreamwrite.models import TimestreamWriteBackend
from moto.transcribe.models import TranscribeBackend
from moto.wafv2.models import WAFV2Backend
from moto.workspaces.models import WorkSpacesBackend
from moto.xray.models import XRayBackend
ALT_SERVICE_NAMES = {"lambda": "awslambda", "moto_api": "moto_api._internal"}
ALT_BACKEND_NAMES = {
"moto_api._internal": "moto_api",
"awslambda": "lambda",
"awslambda_simple": "lambda_simple",
"dynamodb_v20111205": "dynamodb",
"elasticbeanstalk": "eb",
}
def list_of_moto_modules() -> Iterable[str]:
path = os.path.dirname(moto.__file__)
for backend in sorted(os.listdir(path)):
is_dir = os.path.isdir(os.path.join(path, backend))
valid_folder = not backend.startswith("__")
if is_dir and valid_folder:
yield backend
def get_service_from_url(url: str) -> Optional[str]:
from moto.backend_index import backend_url_patterns
for service, pattern in backend_url_patterns:
if pattern.match(url):
return service
return None
# There's a similar Union that we could import from boto3-stubs, but it wouldn't have
# moto's custom service backends
SERVICE_NAMES = Union[
"Literal['acm']",
"Literal['acm-pca']",
"Literal['amp']",
"Literal['apigateway']",
"Literal['apigatewaymanagementapi']",
"Literal['apigatewayv2']",
"Literal['appconfig']",
"Literal['applicationautoscaling']",
"Literal['appsync']",
"Literal['athena']",
"Literal['autoscaling']",
"Literal['batch']",
"Literal['budgets']",
"Literal['ce']",
"Literal['cloudformation']",
"Literal['cloudfront']",
"Literal['cloudtrail']",
"Literal['cloudwatch']",
"Literal['codebuild']",
"Literal['codecommit']",
"Literal['codepipeline']",
"Literal['cognito-identity']",
"Literal['cognito-idp']",
"Literal['comprehend']",
"Literal['config']",
"Literal['databrew']",
"Literal['datapipeline']",
"Literal['datasync']",
"Literal['dax']",
"Literal['dms']",
"Literal['ds']",
"Literal['dynamodb']",
"Literal['dynamodb_v20111205']",
"Literal['dynamodbstreams']",
"Literal['ebs']",
"Literal['ec2']",
"Literal['ec2instanceconnect']",
"Literal['ecr']",
"Literal['ecs']",
"Literal['efs']",
"Literal['eks']",
"Literal['elasticache']",
"Literal['elasticbeanstalk']",
"Literal['elastictranscoder']",
"Literal['elb']",
"Literal['elbv2']",
"Literal['emr']",
"Literal['emr-containers']",
"Literal['emr-serverless']",
"Literal['es']",
"Literal['events']",
"Literal['firehose']",
"Literal['forecast']",
"Literal['glacier']",
"Literal['glue']",
"Literal['greengrass']",
"Literal['guardduty']",
"Literal['iam']",
"Literal['identitystore']",
"Literal['inspector2']",
"Literal['instance_metadata']",
"Literal['iot']",
"Literal['iot-data']",
"Literal['ivs']",
"Literal['kinesis']",
"Literal['kinesisvideo']",
"Literal['kinesis-video-archived-media']",
"Literal['kms']",
"Literal['lakeformation']",
"Literal['lambda']",
"Literal['logs']",
"Literal['managedblockchain']",
"Literal['mediaconnect']",
"Literal['medialive']",
"Literal['mediapackage']",
"Literal['mediastore']",
"Literal['mediastore-data']",
"Literal['meteringmarketplace']",
"Literal['moto_api']",
"Literal['mq']",
"Literal['neptune']",
"Literal['opensearch']",
"Literal['opsworks']",
"Literal['organizations']",
"Literal['personalize']",
"Literal['pinpoint']",
"Literal['polly']",
"Literal['quicksight']",
"Literal['ram']",
"Literal['rds']",
"Literal['rds-data']",
"Literal['redshift']",
"Literal['redshift-data']",
"Literal['rekognition']",
"Literal['resiliencehub']",
"Literal['resource-groups']",
"Literal['resourcegroupstaggingapi']",
"Literal['robomaker']",
"Literal['route53']",
"Literal['route53resolver']",
"Literal['route53domains']",
"Literal['s3']",
"Literal['s3bucket_path']",
"Literal['s3control']",
"Literal['sagemaker']",
"Literal['sagemaker-runtime']",
"Literal['scheduler']",
"Literal['sdb']",
"Literal['secretsmanager']",
"Literal['servicediscovery']",
"Literal['service-quotas']",
"Literal['ses']",
"Literal['sesv2']",
"Literal['signer']",
"Literal['sns']",
"Literal['sqs']",
"Literal['ssm']",
"Literal['sso-admin']",
"Literal['stepfunctions']",
"Literal['sts']",
"Literal['support']",
"Literal['swf']",
"Literal['textract']",
"Literal['timestream-write']",
"Literal['transcribe']",
"Literal['wafv2']",
"Literal['workspaces']",
"Literal['xray']",
]
def _import_backend(
module_name: str,
backends_name: str,
) -> "BackendDict[SERVICE_BACKEND]":
module = importlib.import_module("moto." + module_name)
return getattr(module, backends_name)
@overload
def get_backend(
name: "Literal['acm']",
) -> "BackendDict[AWSCertificateManagerBackend]": ...
@overload
def get_backend(name: "Literal['acm-pca']") -> "BackendDict[ACMPCABackend]": ...
@overload
def get_backend(name: "Literal['amp']") -> "BackendDict[PrometheusServiceBackend]": ...
@overload
def get_backend(name: "Literal['apigateway']") -> "BackendDict[APIGatewayBackend]": ...
@overload
def get_backend(
name: "Literal['apigatewaymanagementapi']",
) -> "BackendDict[ApiGatewayManagementApiBackend]": ...
@overload
def get_backend(
name: "Literal['apigatewayv2']",
) -> "BackendDict[ApiGatewayV2Backend]": ...
@overload
def get_backend(name: "Literal['appconfig']") -> "BackendDict[AppConfigBackend]": ...
@overload
def get_backend(
name: "Literal['applicationautoscaling']",
) -> "BackendDict[ApplicationAutoscalingBackend]": ...
@overload
def get_backend(name: "Literal['appsync']") -> "BackendDict[AppSyncBackend]": ...
@overload
def get_backend(name: "Literal['athena']") -> "BackendDict[AthenaBackend]": ...
@overload
def get_backend(
name: "Literal['autoscaling']",
) -> "BackendDict[AutoScalingBackend]": ...
@overload
def get_backend(name: "Literal['batch']") -> "BackendDict[BatchBackend]": ...
@overload
def get_backend(name: "Literal['budgets']") -> "BackendDict[BudgetsBackend]": ...
@overload
def get_backend(name: "Literal['ce']") -> "BackendDict[CostExplorerBackend]": ...
@overload
def get_backend(
name: "Literal['cloudformation']",
) -> "BackendDict[CloudFormationBackend]": ...
@overload
def get_backend(name: "Literal['cloudfront']") -> "BackendDict[CloudFrontBackend]": ...
@overload
def get_backend(name: "Literal['cloudtrail']") -> "BackendDict[CloudTrailBackend]": ...
@overload
def get_backend(name: "Literal['cloudwatch']") -> "BackendDict[CloudWatchBackend]": ...
@overload
def get_backend(name: "Literal['codebuild']") -> "BackendDict[CodeBuildBackend]": ...
@overload
def get_backend(name: "Literal['codecommit']") -> "BackendDict[CodeCommitBackend]": ...
@overload
def get_backend(
name: "Literal['codepipeline']",
) -> "BackendDict[CodePipelineBackend]": ...
@overload
def get_backend(
name: "Literal['cognito-identity']",
) -> "BackendDict[CognitoIdentityBackend]": ...
@overload
def get_backend(name: "Literal['cognito-idp']") -> "BackendDict[CognitoIdpBackend]": ...
@overload
def get_backend(name: "Literal['comprehend']") -> "BackendDict[ComprehendBackend]": ...
@overload
def get_backend(name: "Literal['config']") -> "BackendDict[ConfigBackend]": ...
@overload
def get_backend(name: "Literal['databrew']") -> "BackendDict[DataBrewBackend]": ...
@overload
def get_backend(
name: "Literal['datapipeline']",
) -> "BackendDict[DataPipelineBackend]": ...
@overload
def get_backend(name: "Literal['datasync']") -> "BackendDict[DataSyncBackend]": ...
@overload
def get_backend(name: "Literal['dax']") -> "BackendDict[DAXBackend]": ...
@overload
def get_backend(
name: "Literal['dms']",
) -> "BackendDict[DatabaseMigrationServiceBackend]": ...
@overload
def get_backend(name: "Literal['ds']") -> "BackendDict[DirectoryServiceBackend]": ...
@overload
def get_backend(name: "Literal['dynamodb']") -> "BackendDict[DynamoDBBackend]": ...
@overload
def get_backend(
name: "Literal['dynamodb_v20111205']",
) -> "BackendDict[DynamoDBBackend_v20111205]": ...
@overload
def get_backend(
name: "Literal['dynamodbstreams']",
) -> "BackendDict[DynamoDBStreamsBackend]": ...
@overload
def get_backend(name: "Literal['ebs']") -> "BackendDict[EBSBackend]": ...
@overload
def get_backend(name: "Literal['ec2']") -> "BackendDict[EC2Backend]": ...
@overload
def get_backend(
name: "Literal['ec2instanceconnect']",
) -> "BackendDict[Ec2InstanceConnectBackend]": ...
@overload
def get_backend(name: "Literal['ecr']") -> "BackendDict[ECRBackend]": ...
@overload
def get_backend(
name: "Literal['ecs']",
) -> "BackendDict[EC2ContainerServiceBackend]": ...
@overload
def get_backend(name: "Literal['efs']") -> "BackendDict[EFSBackend]": ...
@overload
def get_backend(name: "Literal['eks']") -> "BackendDict[EKSBackend]": ...
@overload
def get_backend(
name: "Literal['elasticache']",
) -> "BackendDict[ElastiCacheBackend]": ...
@overload
def get_backend(name: "Literal['elasticbeanstalk']") -> "BackendDict[EBBackend]": ...
@overload
def get_backend(
name: "Literal['elastictranscoder']",
) -> "BackendDict[ElasticTranscoderBackend]": ...
@overload
def get_backend(name: "Literal['elb']") -> "BackendDict[ELBBackend]": ...
@overload
def get_backend(name: "Literal['elbv2']") -> "BackendDict[ELBv2Backend]": ...
@overload
def get_backend(name: "Literal['emr']") -> "BackendDict[ElasticMapReduceBackend]": ...
@overload
def get_backend(
name: "Literal['emr-containers']",
) -> "BackendDict[EMRContainersBackend]": ...
@overload
def get_backend(
name: "Literal['emr-serverless']",
) -> "BackendDict[EMRServerlessBackend]": ...
@overload
def get_backend(
name: "Literal['es']",
) -> "BackendDict[ElasticsearchServiceBackend]": ...
@overload
def get_backend(name: "Literal['events']") -> "BackendDict[EventsBackend]": ...
@overload
def get_backend(name: "Literal['firehose']") -> "BackendDict[FirehoseBackend]": ...
@overload
def get_backend(name: "Literal['forecast']") -> "BackendDict[ForecastBackend]": ...
@overload
def get_backend(name: "Literal['glacier']") -> "BackendDict[GlacierBackend]": ...
@overload
def get_backend(name: "Literal['glue']") -> "BackendDict[GlueBackend]": ...
@overload
def get_backend(name: "Literal['greengrass']") -> "BackendDict[GreengrassBackend]": ...
@overload
def get_backend(name: "Literal['guardduty']") -> "BackendDict[GuardDutyBackend]": ...
@overload
def get_backend(name: "Literal['iam']") -> "BackendDict[IAMBackend]": ...
@overload
def get_backend(
name: "Literal['identitystore']",
) -> "BackendDict[IdentityStoreBackend]": ...
@overload
def get_backend(name: "Literal['inspector2']") -> "BackendDict[Inspector2Backend]": ...
@overload
def get_backend(
name: "Literal['instance_metadata']",
) -> "BackendDict[InstanceMetadataBackend]": ...
@overload
def get_backend(name: "Literal['iot']") -> "BackendDict[IoTBackend]": ...
@overload
def get_backend(name: "Literal['iot-data']") -> "BackendDict[IoTDataPlaneBackend]": ...
@overload
def get_backend(name: "Literal['ivs']") -> "BackendDict[IVSBackend]": ...
@overload
def get_backend(name: "Literal['kinesis']") -> "BackendDict[KinesisBackend]": ...
@overload
def get_backend(
name: "Literal['kinesisvideo']",
) -> "BackendDict[KinesisVideoBackend]": ...
@overload
def get_backend(
name: "Literal['kinesis-video-archived-media']",
) -> "BackendDict[KinesisVideoArchivedMediaBackend]": ...
@overload
def get_backend(name: "Literal['kms']") -> "BackendDict[KmsBackend]": ...
@overload
def get_backend(
name: "Literal['lakeformation']",
) -> "BackendDict[LakeFormationBackend]": ...
@overload
def get_backend(name: "Literal['lambda']") -> "BackendDict[LambdaBackend]": ...
@overload
def get_backend(name: "Literal['logs']") -> "BackendDict[LogsBackend]": ...
@overload
def get_backend(
name: "Literal['managedblockchain']",
) -> "BackendDict[ManagedBlockchainBackend]": ...
@overload
def get_backend(
name: "Literal['mediaconnect']",
) -> "BackendDict[MediaConnectBackend]": ...
@overload
def get_backend(name: "Literal['medialive']") -> "BackendDict[MediaLiveBackend]": ...
@overload
def get_backend(
name: "Literal['mediapackage']",
) -> "BackendDict[MediaPackageBackend]": ...
@overload
def get_backend(name: "Literal['mediastore']") -> "BackendDict[MediaStoreBackend]": ...
@overload
def get_backend(
name: "Literal['mediastore-data']",
) -> "BackendDict[MediaStoreDataBackend]": ...
@overload
def get_backend(
name: "Literal['meteringmarketplace']",
) -> "BackendDict[MeteringMarketplaceBackend]": ...
@overload
def get_backend(name: "Literal['moto_api']") -> "BackendDict[MotoAPIBackend]": ...
@overload
def get_backend(name: "Literal['mq']") -> "BackendDict[MQBackend]": ...
@overload
def get_backend(name: "Literal['neptune']") -> "BackendDict[NeptuneBackend]": ...
@overload
def get_backend(
name: "Literal['opensearch']",
) -> "BackendDict[OpenSearchServiceBackend]": ...
@overload
def get_backend(name: "Literal['opsworks']") -> "BackendDict[OpsWorksBackend]": ...
@overload
def get_backend(
name: "Literal['organizations']",
) -> "BackendDict[OrganizationsBackend]": ...
@overload
def get_backend(
name: "Literal['personalize']",
) -> "BackendDict[PersonalizeBackend]": ...
@overload
def get_backend(name: "Literal['pinpoint']") -> "BackendDict[PinpointBackend]": ...
@overload
def get_backend(name: "Literal['polly']") -> "BackendDict[PollyBackend]": ...
@overload
def get_backend(name: "Literal['quicksight']") -> "BackendDict[QuickSightBackend]": ...
@overload
def get_backend(
name: "Literal['ram']",
) -> "BackendDict[ResourceAccessManagerBackend]": ...
@overload
def get_backend(name: "Literal['rds']") -> "BackendDict[RDSBackend]": ...
@overload
def get_backend(
name: "Literal['rds-data']",
) -> "BackendDict[RDSDataServiceBackend]": ...
@overload
def get_backend(name: "Literal['redshift']") -> "BackendDict[RedshiftBackend]": ...
@overload
def get_backend(
name: "Literal['redshift-data']",
) -> "BackendDict[RedshiftDataAPIServiceBackend]": ...
@overload
def get_backend(
name: "Literal['rekognition']",
) -> "BackendDict[RekognitionBackend]": ...
@overload
def get_backend(
name: "Literal['resiliencehub']",
) -> "BackendDict[ResilienceHubBackend]": ...
@overload
def get_backend(
name: "Literal['resource-groups']",
) -> "BackendDict[ResourceGroupsBackend]": ...
@overload
def get_backend(
name: "Literal['resourcegroupstaggingapi']",
) -> "BackendDict[ResourceGroupsTaggingAPIBackend]": ...
@overload
def get_backend(name: "Literal['robomaker']") -> "BackendDict[RoboMakerBackend]": ...
@overload
def get_backend(name: "Literal['route53']") -> "BackendDict[Route53Backend]": ...
@overload
def get_backend(
name: "Literal['route53resolver']",
) -> "BackendDict[Route53ResolverBackend]": ...
@overload
def get_backend(
name: "Literal['route53domains']",
) -> "BackendDict[Route53DomainsBackend]": ...
@overload
def get_backend(name: "Literal['s3']") -> "BackendDict[S3Backend]": ...
@overload
def get_backend(name: "Literal['s3bucket_path']") -> "BackendDict[S3Backend]": ...
@overload
def get_backend(name: "Literal['s3control']") -> "BackendDict[S3ControlBackend]": ...
@overload
def get_backend(
name: "Literal['sagemaker']",
) -> "BackendDict[SageMakerModelBackend]": ...
@overload
def get_backend(
name: "Literal['sagemaker-runtime']",
) -> "BackendDict[SageMakerRuntimeBackend]": ...
@overload
def get_backend(
name: "Literal['scheduler']",
) -> "BackendDict[EventBridgeSchedulerBackend]": ...
@overload
def get_backend(name: "Literal['sdb']") -> "BackendDict[SimpleDBBackend]": ...
@overload
def get_backend(
name: "Literal['secretsmanager']",
) -> "BackendDict[SecretsManagerBackend]": ...
@overload
def get_backend(
name: "Literal['servicediscovery']",
) -> "BackendDict[ServiceDiscoveryBackend]": ...
@overload
def get_backend(
name: "Literal['service-quotas']",
) -> "BackendDict[ServiceQuotasBackend]": ...
@overload
def get_backend(name: "Literal['ses']") -> "BackendDict[SESBackend]": ...
@overload
def get_backend(name: "Literal['sesv2']") -> "BackendDict[SESV2Backend]": ...
@overload
def get_backend(name: "Literal['signer']") -> "BackendDict[SignerBackend]": ...
@overload
def get_backend(name: "Literal['sns']") -> "BackendDict[SNSBackend]": ...
@overload
def get_backend(name: "Literal['sqs']") -> "BackendDict[SQSBackend]": ...
@overload
def get_backend(
name: "Literal['ssm']",
) -> "BackendDict[SimpleSystemManagerBackend]": ...
@overload
def get_backend(name: "Literal['sso-admin']") -> "BackendDict[SSOAdminBackend]": ...
@overload
def get_backend(
name: "Literal['stepfunctions']",
) -> "BackendDict[StepFunctionBackend]": ...
@overload
def get_backend(name: "Literal['sts']") -> "BackendDict[STSBackend]": ...
@overload
def get_backend(name: "Literal['support']") -> "BackendDict[SupportBackend]": ...
@overload
def get_backend(name: "Literal['swf']") -> "BackendDict[SWFBackend]": ...
@overload
def get_backend(name: "Literal['textract']") -> "BackendDict[TextractBackend]": ...
@overload
def get_backend(
name: "Literal['timestream-write']",
) -> "BackendDict[TimestreamWriteBackend]": ...
@overload
def get_backend(name: "Literal['transcribe']") -> "BackendDict[TranscribeBackend]": ...
@overload
def get_backend(name: "Literal['wafv2']") -> "BackendDict[WAFV2Backend]": ...
@overload
def get_backend(name: "Literal['workspaces']") -> "BackendDict[WorkSpacesBackend]": ...
@overload
def get_backend(name: "Literal['xray']") -> "BackendDict[XRayBackend]": ...
def get_backend(name: SERVICE_NAMES) -> "BackendDict[SERVICE_BACKEND]":
# fmt: on
safe_name = name.replace("-", "")
return _import_backend(
ALT_SERVICE_NAMES.get(safe_name, safe_name),
f"{ALT_BACKEND_NAMES.get(safe_name, safe_name)}_backends",
)