b225e96ae0
* Placeholder to test Application Autoscaling. * Wire everything together and create a first passing test without any real functionality. * Get one test working properly. * Add some TODO items. * Reformat code with black * Second passing test for describe_scalable_targets. * New test for NextToken. * Add some tests for ParamValidationError and ValidationException. * black * Ensure scalable targets are being captured in an OrderedDict() for deterministic return later. * Add validation to describe_scalable_targets and register_scalable_target. * Fix tests. * Add creation_time, refactor, add ECS backend, and add failing test for checking that ecs service exists. * Add parameter validation. * Improved documentation for CONTRIBUTING.md Adds some details to give people an idea what's involved in adding new features/services * Integrate with ECS. * black * Refactor to allow implementation of SuspendedState. * Complete support for SuspendedState. * Bump up implementation coverage percentage. * Tidy up code; add comments. * Implement suggested changes from code review. * Minor refactorings for elegance. * README update Co-authored-by: Bert Blommers <bblommers@users.noreply.github.com>
106 lines
4.0 KiB
Python
106 lines
4.0 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import importlib
|
|
|
|
BACKENDS = {
|
|
"acm": ("acm", "acm_backends"),
|
|
"apigateway": ("apigateway", "apigateway_backends"),
|
|
"athena": ("athena", "athena_backends"),
|
|
"applicationautoscaling": (
|
|
"applicationautoscaling",
|
|
"applicationautoscaling_backends",
|
|
),
|
|
"autoscaling": ("autoscaling", "autoscaling_backends"),
|
|
"batch": ("batch", "batch_backends"),
|
|
"cloudformation": ("cloudformation", "cloudformation_backends"),
|
|
"cloudwatch": ("cloudwatch", "cloudwatch_backends"),
|
|
"codecommit": ("codecommit", "codecommit_backends"),
|
|
"codepipeline": ("codepipeline", "codepipeline_backends"),
|
|
"cognito-identity": ("cognitoidentity", "cognitoidentity_backends"),
|
|
"cognito-idp": ("cognitoidp", "cognitoidp_backends"),
|
|
"config": ("config", "config_backends"),
|
|
"datapipeline": ("datapipeline", "datapipeline_backends"),
|
|
"datasync": ("datasync", "datasync_backends"),
|
|
"dynamodb": ("dynamodb", "dynamodb_backends"),
|
|
"dynamodb2": ("dynamodb2", "dynamodb_backends2"),
|
|
"dynamodbstreams": ("dynamodbstreams", "dynamodbstreams_backends"),
|
|
"ec2": ("ec2", "ec2_backends"),
|
|
"ec2instanceconnect": ("ec2instanceconnect", "ec2instanceconnect_backends"),
|
|
"ecr": ("ecr", "ecr_backends"),
|
|
"ecs": ("ecs", "ecs_backends"),
|
|
"elasticbeanstalk": ("elasticbeanstalk", "eb_backends"),
|
|
"elb": ("elb", "elb_backends"),
|
|
"elbv2": ("elbv2", "elbv2_backends"),
|
|
"emr": ("emr", "emr_backends"),
|
|
"events": ("events", "events_backends"),
|
|
"glacier": ("glacier", "glacier_backends"),
|
|
"glue": ("glue", "glue_backends"),
|
|
"iam": ("iam", "iam_backends"),
|
|
"instance_metadata": ("instance_metadata", "instance_metadata_backends"),
|
|
"iot": ("iot", "iot_backends"),
|
|
"iot-data": ("iotdata", "iotdata_backends"),
|
|
"kinesis": ("kinesis", "kinesis_backends"),
|
|
"kms": ("kms", "kms_backends"),
|
|
"lambda": ("awslambda", "lambda_backends"),
|
|
"logs": ("logs", "logs_backends"),
|
|
"managedblockchain": ("managedblockchain", "managedblockchain_backends"),
|
|
"moto_api": ("core", "moto_api_backends"),
|
|
"opsworks": ("opsworks", "opsworks_backends"),
|
|
"organizations": ("organizations", "organizations_backends"),
|
|
"polly": ("polly", "polly_backends"),
|
|
"rds": ("rds2", "rds2_backends"),
|
|
"redshift": ("redshift", "redshift_backends"),
|
|
"resource-groups": ("resourcegroups", "resourcegroups_backends"),
|
|
"resourcegroupstaggingapi": (
|
|
"resourcegroupstaggingapi",
|
|
"resourcegroupstaggingapi_backends",
|
|
),
|
|
"route53": ("route53", "route53_backends"),
|
|
"s3": ("s3", "s3_backends"),
|
|
"s3bucket_path": ("s3", "s3_backends"),
|
|
"secretsmanager": ("secretsmanager", "secretsmanager_backends"),
|
|
"ses": ("ses", "ses_backends"),
|
|
"sns": ("sns", "sns_backends"),
|
|
"sqs": ("sqs", "sqs_backends"),
|
|
"ssm": ("ssm", "ssm_backends"),
|
|
"stepfunctions": ("stepfunctions", "stepfunction_backends"),
|
|
"sts": ("sts", "sts_backends"),
|
|
"swf": ("swf", "swf_backends"),
|
|
"xray": ("xray", "xray_backends"),
|
|
}
|
|
|
|
|
|
def _import_backend(module_name, backends_name):
|
|
module = importlib.import_module("moto." + module_name)
|
|
return getattr(module, backends_name)
|
|
|
|
|
|
def backends():
|
|
for module_name, backends_name in BACKENDS.values():
|
|
yield _import_backend(module_name, backends_name)
|
|
|
|
|
|
def named_backends():
|
|
for name, (module_name, backends_name) in BACKENDS.items():
|
|
yield name, _import_backend(module_name, backends_name)
|
|
|
|
|
|
def get_backend(name):
|
|
module_name, backends_name = BACKENDS[name]
|
|
return _import_backend(module_name, backends_name)
|
|
|
|
|
|
def search_backend(predicate):
|
|
for name, backend in named_backends():
|
|
if predicate(backend):
|
|
return name
|
|
|
|
|
|
def get_model(name, region_name):
|
|
for backends_ in backends():
|
|
for region, backend in backends_.items():
|
|
if region == region_name:
|
|
models = getattr(backend.__class__, "__models__", {})
|
|
if name in models:
|
|
return list(getattr(backend, models[name])())
|