Add missing regions to all services

This commit is contained in:
gruebel 2019-12-26 17:12:22 +01:00
parent b8a1f85285
commit d7ba355a65
38 changed files with 358 additions and 107 deletions

View File

@ -847,3 +847,11 @@ class APIGatewayBackend(BaseBackend):
apigateway_backends = {} apigateway_backends = {}
for region_name in Session().get_available_regions("apigateway"): for region_name in Session().get_available_regions("apigateway"):
apigateway_backends[region_name] = APIGatewayBackend(region_name) apigateway_backends[region_name] = APIGatewayBackend(region_name)
for region_name in Session().get_available_regions(
"apigateway", partition_name="aws-us-gov"
):
apigateway_backends[region_name] = APIGatewayBackend(region_name)
for region_name in Session().get_available_regions(
"apigateway", partition_name="aws-cn"
):
apigateway_backends[region_name] = APIGatewayBackend(region_name)

View File

@ -1,7 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import time import time
import boto3 from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.core import ACCOUNT_ID from moto.core import ACCOUNT_ID
@ -77,5 +78,9 @@ class AthenaBackend(BaseBackend):
athena_backends = {} athena_backends = {}
for region in boto3.Session().get_available_regions("athena"): for region in Session().get_available_regions("athena"):
athena_backends[region] = AthenaBackend(region)
for region in Session().get_available_regions("athena", partition_name="aws-us-gov"):
athena_backends[region] = AthenaBackend(region)
for region in Session().get_available_regions("athena", partition_name="aws-cn"):
athena_backends[region] = AthenaBackend(region) athena_backends[region] = AthenaBackend(region)

View File

@ -24,6 +24,8 @@ import weakref
import requests.adapters import requests.adapters
import boto.awslambda import boto.awslambda
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.core.exceptions import RESTError from moto.core.exceptions import RESTError
from moto.iam.models import iam_backend from moto.iam.models import iam_backend
@ -1043,10 +1045,10 @@ def do_validate_s3():
return os.environ.get("VALIDATE_LAMBDA_S3", "") in ["", "1", "true"] return os.environ.get("VALIDATE_LAMBDA_S3", "") in ["", "1", "true"]
# Handle us forgotten regions, unless Lambda truly only runs out of US and lambda_backends = {}
lambda_backends = { for region in Session().get_available_regions("lambda"):
_region.name: LambdaBackend(_region.name) for _region in boto.awslambda.regions() lambda_backends[region] = LambdaBackend(region)
} for region in Session().get_available_regions("lambda", partition_name="aws-us-gov"):
lambda_backends[region] = LambdaBackend(region)
lambda_backends["ap-southeast-2"] = LambdaBackend("ap-southeast-2") for region in Session().get_available_regions("lambda", partition_name="aws-cn"):
lambda_backends["us-gov-west-1"] = LambdaBackend("us-gov-west-1") lambda_backends[region] = LambdaBackend(region)

View File

@ -1,5 +1,4 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import boto3
import re import re
import requests.adapters import requests.adapters
from itertools import cycle from itertools import cycle
@ -12,6 +11,8 @@ import docker
import functools import functools
import threading import threading
import dateutil.parser import dateutil.parser
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.iam import iam_backends from moto.iam import iam_backends
from moto.ec2 import ec2_backends from moto.ec2 import ec2_backends
@ -1317,7 +1318,10 @@ class BatchBackend(BaseBackend):
job.terminate(reason) job.terminate(reason)
available_regions = boto3.session.Session().get_available_regions("batch") batch_backends = {}
batch_backends = { for region in Session().get_available_regions("batch"):
region: BatchBackend(region_name=region) for region in available_regions batch_backends[region] = BatchBackend(region)
} for region in Session().get_available_regions("batch", partition_name="aws-us-gov"):
batch_backends[region] = BatchBackend(region)
for region in Session().get_available_regions("batch", partition_name="aws-cn"):
batch_backends[region] = BatchBackend(region)

View File

@ -5,6 +5,8 @@ import yaml
import uuid import uuid
import boto.cloudformation import boto.cloudformation
from boto3 import Session
from moto.compat import OrderedDict from moto.compat import OrderedDict
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
@ -717,5 +719,13 @@ class CloudFormationBackend(BaseBackend):
cloudformation_backends = {} cloudformation_backends = {}
for region in boto.cloudformation.regions(): for region in Session().get_available_regions("cloudformation"):
cloudformation_backends[region.name] = CloudFormationBackend() cloudformation_backends[region] = CloudFormationBackend()
for region in Session().get_available_regions(
"cloudformation", partition_name="aws-us-gov"
):
cloudformation_backends[region] = CloudFormationBackend()
for region in Session().get_available_regions(
"cloudformation", partition_name="aws-cn"
):
cloudformation_backends[region] = CloudFormationBackend()

View File

@ -1,4 +1,7 @@
import json import json
from boto3 import Session
from moto.core.utils import iso_8601_datetime_with_milliseconds from moto.core.utils import iso_8601_datetime_with_milliseconds
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.core.exceptions import RESTError from moto.core.exceptions import RESTError
@ -431,5 +434,11 @@ class LogGroup(BaseModel):
cloudwatch_backends = {} cloudwatch_backends = {}
for region in boto.ec2.cloudwatch.regions(): for region in Session().get_available_regions("cloudwatch"):
cloudwatch_backends[region.name] = CloudWatchBackend() cloudwatch_backends[region] = CloudWatchBackend()
for region in Session().get_available_regions(
"cloudwatch", partition_name="aws-us-gov"
):
cloudwatch_backends[region] = CloudWatchBackend()
for region in Session().get_available_regions("cloudwatch", partition_name="aws-cn"):
cloudwatch_backends[region] = CloudWatchBackend()

View File

@ -149,3 +149,9 @@ class CodePipelineBackend(BaseBackend):
codepipeline_backends = {} codepipeline_backends = {}
for region in Session().get_available_regions("codepipeline"): for region in Session().get_available_regions("codepipeline"):
codepipeline_backends[region] = CodePipelineBackend() codepipeline_backends[region] = CodePipelineBackend()
for region in Session().get_available_regions(
"codepipeline", partition_name="aws-us-gov"
):
codepipeline_backends[region] = CodePipelineBackend()
for region in Session().get_available_regions("codepipeline", partition_name="aws-cn"):
codepipeline_backends[region] = CodePipelineBackend()

View File

@ -4,6 +4,7 @@ import datetime
import json import json
import boto.cognito.identity import boto.cognito.identity
from boto3 import Session
from moto.compat import OrderedDict from moto.compat import OrderedDict
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
@ -136,5 +137,13 @@ class CognitoIdentityBackend(BaseBackend):
cognitoidentity_backends = {} cognitoidentity_backends = {}
for region in boto.cognito.identity.regions(): for region in Session().get_available_regions("cognito-identity"):
cognitoidentity_backends[region.name] = CognitoIdentityBackend(region.name) cognitoidentity_backends[region] = CognitoIdentityBackend(region)
for region in Session().get_available_regions(
"cognito-identity", partition_name="aws-us-gov"
):
cognitoidentity_backends[region] = CognitoIdentityBackend(region)
for region in Session().get_available_regions(
"cognito-identity", partition_name="aws-cn"
):
cognitoidentity_backends[region] = CognitoIdentityBackend(region)

View File

@ -10,6 +10,7 @@ import time
import uuid import uuid
import boto.cognito.identity import boto.cognito.identity
from boto3 import Session
from jose import jws from jose import jws
from moto.compat import OrderedDict from moto.compat import OrderedDict
@ -749,8 +750,14 @@ class CognitoIdpBackend(BaseBackend):
cognitoidp_backends = {} cognitoidp_backends = {}
for region in boto.cognito.identity.regions(): for region in Session().get_available_regions("cognito-idp"):
cognitoidp_backends[region.name] = CognitoIdpBackend(region.name) cognitoidp_backends[region] = CognitoIdpBackend(region)
for region in Session().get_available_regions(
"cognito-idp", partition_name="aws-us-gov"
):
cognitoidp_backends[region] = CognitoIdpBackend(region)
for region in Session().get_available_regions("cognito-idp", partition_name="aws-cn"):
cognitoidp_backends[region] = CognitoIdpBackend(region)
# Hack to help moto-server process requests on localhost, where the region isn't # Hack to help moto-server process requests on localhost, where the region isn't

View File

@ -1084,6 +1084,9 @@ class ConfigBackend(BaseBackend):
config_backends = {} config_backends = {}
boto3_session = Session() for region in Session().get_available_regions("config"):
for region in boto3_session.get_available_regions("config"): config_backends[region] = ConfigBackend()
for region in Session().get_available_regions("config", partition_name="aws-us-gov"):
config_backends[region] = ConfigBackend()
for region in Session().get_available_regions("config", partition_name="aws-cn"):
config_backends[region] = ConfigBackend() config_backends[region] = ConfigBackend()

View File

@ -2,6 +2,8 @@ from __future__ import unicode_literals
import datetime import datetime
import boto.datapipeline import boto.datapipeline
from boto3 import Session
from moto.compat import OrderedDict from moto.compat import OrderedDict
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from .utils import get_random_pipeline_id, remove_capitalization_of_dict_keys from .utils import get_random_pipeline_id, remove_capitalization_of_dict_keys
@ -142,5 +144,11 @@ class DataPipelineBackend(BaseBackend):
datapipeline_backends = {} datapipeline_backends = {}
for region in boto.datapipeline.regions(): for region in Session().get_available_regions("datapipeline"):
datapipeline_backends[region.name] = DataPipelineBackend() datapipeline_backends[region] = DataPipelineBackend()
for region in Session().get_available_regions(
"datapipeline", partition_name="aws-us-gov"
):
datapipeline_backends[region] = DataPipelineBackend()
for region in Session().get_available_regions("datapipeline", partition_name="aws-cn"):
datapipeline_backends[region] = DataPipelineBackend(region)

View File

@ -1,4 +1,5 @@
import boto3 from boto3 import Session
from moto.compat import OrderedDict from moto.compat import OrderedDict
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
@ -226,5 +227,9 @@ class DataSyncBackend(BaseBackend):
datasync_backends = {} datasync_backends = {}
for region in boto3.Session().get_available_regions("datasync"): for region in Session().get_available_regions("datasync"):
datasync_backends[region] = DataSyncBackend(region_name=region) datasync_backends[region] = DataSyncBackend(region)
for region in Session().get_available_regions("datasync", partition_name="aws-us-gov"):
datasync_backends[region] = DataSyncBackend(region)
for region in Session().get_available_regions("datasync", partition_name="aws-cn"):
datasync_backends[region] = DataSyncBackend(region)

View File

@ -8,7 +8,7 @@ import re
import uuid import uuid
import six import six
import boto3 from boto3 import Session
from botocore.exceptions import ParamValidationError from botocore.exceptions import ParamValidationError
from moto.compat import OrderedDict from moto.compat import OrderedDict
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
@ -1484,7 +1484,10 @@ class DynamoDBBackend(BaseBackend):
return table.ttl return table.ttl
available_regions = boto3.session.Session().get_available_regions("dynamodb") dynamodb_backends = {}
dynamodb_backends = { for region in Session().get_available_regions("dynamodb"):
region: DynamoDBBackend(region_name=region) for region in available_regions dynamodb_backends[region] = DynamoDBBackend(region)
} for region in Session().get_available_regions("dynamodb", partition_name="aws-us-gov"):
dynamodb_backends[region] = DynamoDBBackend(region)
for region in Session().get_available_regions("dynamodb", partition_name="aws-cn"):
dynamodb_backends[region] = DynamoDBBackend(region)

View File

@ -2,9 +2,10 @@ from __future__ import unicode_literals
import os import os
import json import json
import boto3
import base64 import base64
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.dynamodb2.models import dynamodb_backends from moto.dynamodb2.models import dynamodb_backends
@ -139,7 +140,14 @@ class DynamoDBStreamsBackend(BaseBackend):
return json.dumps(shard_iterator.get(limit)) return json.dumps(shard_iterator.get(limit))
available_regions = boto3.session.Session().get_available_regions("dynamodbstreams") dynamodbstreams_backends = {}
dynamodbstreams_backends = { for region in Session().get_available_regions("dynamodbstreams"):
region: DynamoDBStreamsBackend(region=region) for region in available_regions dynamodbstreams_backends[region] = DynamoDBStreamsBackend(region)
} for region in Session().get_available_regions(
"dynamodbstreams", partition_name="aws-us-gov"
):
dynamodbstreams_backends[region] = DynamoDBStreamsBackend(region)
for region in Session().get_available_regions(
"dynamodbstreams", partition_name="aws-cn"
):
dynamodbstreams_backends[region] = DynamoDBStreamsBackend(region)

View File

@ -8,6 +8,8 @@ import os
import re import re
import six import six
import warnings import warnings
from boto3 import Session
from pkg_resources import resource_filename from pkg_resources import resource_filename
import boto.ec2 import boto.ec2
@ -1473,7 +1475,13 @@ class Zone(object):
class RegionsAndZonesBackend(object): class RegionsAndZonesBackend(object):
regions = [Region(ri.name, ri.endpoint) for ri in boto.ec2.regions()] regions = []
for region in Session().get_available_regions("ec2"):
regions.append(Region(region, "ec2.{}.amazonaws.com".format(region)))
for region in Session().get_available_regions("ec2", partition_name="aws-us-gov"):
regions.append(Region(region, "ec2.{}.amazonaws.com".format(region)))
for region in Session().get_available_regions("ec2", partition_name="aws-cn"):
regions.append(Region(region, "ec2.{}.amazonaws.com.cn".format(region)))
zones = { zones = {
"ap-south-1": [ "ap-south-1": [
@ -1536,6 +1544,11 @@ class RegionsAndZonesBackend(object):
zone_id="apne1-az2", zone_id="apne1-az2",
), ),
], ],
"ap-east-1": [
Zone(region_name="ap-east-1", name="ap-east-1a", zone_id="ape1-az1"),
Zone(region_name="ap-east-1", name="ap-east-1b", zone_id="ape1-az2"),
Zone(region_name="ap-east-1", name="ap-east-1c", zone_id="ape1-az3"),
],
"sa-east-1": [ "sa-east-1": [
Zone(region_name="sa-east-1", name="sa-east-1a", zone_id="sae1-az1"), Zone(region_name="sa-east-1", name="sa-east-1a", zone_id="sae1-az1"),
Zone(region_name="sa-east-1", name="sa-east-1c", zone_id="sae1-az3"), Zone(region_name="sa-east-1", name="sa-east-1c", zone_id="sae1-az3"),
@ -1605,10 +1618,32 @@ class RegionsAndZonesBackend(object):
Zone(region_name="us-west-2", name="us-west-2b", zone_id="usw2-az1"), Zone(region_name="us-west-2", name="us-west-2b", zone_id="usw2-az1"),
Zone(region_name="us-west-2", name="us-west-2c", zone_id="usw2-az3"), Zone(region_name="us-west-2", name="us-west-2c", zone_id="usw2-az3"),
], ],
"me-south-1": [
Zone(region_name="me-south-1", name="me-south-1a", zone_id="mes1-az1"),
Zone(region_name="me-south-1", name="me-south-1b", zone_id="mes1-az2"),
Zone(region_name="me-south-1", name="me-south-1c", zone_id="mes1-az3"),
],
"cn-north-1": [ "cn-north-1": [
Zone(region_name="cn-north-1", name="cn-north-1a", zone_id="cnn1-az1"), Zone(region_name="cn-north-1", name="cn-north-1a", zone_id="cnn1-az1"),
Zone(region_name="cn-north-1", name="cn-north-1b", zone_id="cnn1-az2"), Zone(region_name="cn-north-1", name="cn-north-1b", zone_id="cnn1-az2"),
], ],
"cn-northwest-1": [
Zone(
region_name="cn-northwest-1",
name="cn-northwest-1a",
zone_id="cnnw1-az1",
),
Zone(
region_name="cn-northwest-1",
name="cn-northwest-1b",
zone_id="cnnw1-az2",
),
Zone(
region_name="cn-northwest-1",
name="cn-northwest-1c",
zone_id="cnnw1-az3",
),
],
"us-gov-west-1": [ "us-gov-west-1": [
Zone( Zone(
region_name="us-gov-west-1", name="us-gov-west-1a", zone_id="usgw1-az1" region_name="us-gov-west-1", name="us-gov-west-1a", zone_id="usgw1-az1"
@ -1620,6 +1655,17 @@ class RegionsAndZonesBackend(object):
region_name="us-gov-west-1", name="us-gov-west-1c", zone_id="usgw1-az3" region_name="us-gov-west-1", name="us-gov-west-1c", zone_id="usgw1-az3"
), ),
], ],
"us-gov-east-1": [
Zone(
region_name="us-gov-east-1", name="us-gov-east-1a", zone_id="usge1-az1"
),
Zone(
region_name="us-gov-east-1", name="us-gov-east-1b", zone_id="usge1-az2"
),
Zone(
region_name="us-gov-east-1", name="us-gov-east-1c", zone_id="usge1-az3"
),
],
} }
def describe_regions(self, region_names=[]): def describe_regions(self, region_names=[]):

View File

@ -3,9 +3,10 @@ import re
import uuid import uuid
from datetime import datetime from datetime import datetime
from random import random, randint from random import random, randint
import boto3
import pytz import pytz
from boto3 import Session
from moto.core.exceptions import JsonRESTError from moto.core.exceptions import JsonRESTError
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.core.utils import unix_time from moto.core.utils import unix_time
@ -1302,7 +1303,10 @@ class EC2ContainerServiceBackend(BaseBackend):
raise NotImplementedError() raise NotImplementedError()
available_regions = boto3.session.Session().get_available_regions("ecs") ecs_backends = {}
ecs_backends = { for region in Session().get_available_regions("ecs"):
region: EC2ContainerServiceBackend(region) for region in available_regions ecs_backends[region] = EC2ContainerServiceBackend(region)
} for region in Session().get_available_regions("ecs", partition_name="aws-us-gov"):
ecs_backends[region] = EC2ContainerServiceBackend(region)
for region in Session().get_available_regions("ecs", partition_name="aws-cn"):
ecs_backends[region] = EC2ContainerServiceBackend(region)

View File

@ -4,6 +4,7 @@ from datetime import timedelta
import boto.emr import boto.emr
import pytz import pytz
from boto3 import Session
from dateutil.parser import parse as dtparse from dateutil.parser import parse as dtparse
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.emr.exceptions import EmrError from moto.emr.exceptions import EmrError
@ -460,5 +461,9 @@ class ElasticMapReduceBackend(BaseBackend):
emr_backends = {} emr_backends = {}
for region in boto.emr.regions(): for region in Session().get_available_regions("emr"):
emr_backends[region.name] = ElasticMapReduceBackend(region.name) emr_backends[region] = ElasticMapReduceBackend(region)
for region in Session().get_available_regions("emr", partition_name="aws-us-gov"):
emr_backends[region] = ElasticMapReduceBackend(region)
for region in Session().get_available_regions("emr", partition_name="aws-cn"):
emr_backends[region] = ElasticMapReduceBackend(region)

View File

@ -1,7 +1,7 @@
import os import os
import re import re
import json import json
import boto3 from boto3 import Session
from moto.core.exceptions import JsonRESTError from moto.core.exceptions import JsonRESTError
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
@ -362,5 +362,10 @@ class EventsBackend(BaseBackend):
self.event_buses.pop(name, None) self.event_buses.pop(name, None)
available_regions = boto3.session.Session().get_available_regions("events") events_backends = {}
events_backends = {region: EventsBackend(region) for region in available_regions} for region in Session().get_available_regions("events"):
events_backends[region] = EventsBackend(region)
for region in Session().get_available_regions("events", partition_name="aws-us-gov"):
events_backends[region] = EventsBackend(region)
for region in Session().get_available_regions("events", partition_name="aws-cn"):
events_backends[region] = EventsBackend(region)

View File

@ -6,6 +6,8 @@ import datetime
import boto.glacier import boto.glacier
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from .utils import get_job_id from .utils import get_job_id
@ -221,5 +223,9 @@ class GlacierBackend(BaseBackend):
glacier_backends = {} glacier_backends = {}
for region in boto.glacier.regions(): for region in Session().get_available_regions("glacier"):
glacier_backends[region.name] = GlacierBackend(region) glacier_backends[region] = GlacierBackend(region)
for region in Session().get_available_regions("glacier", partition_name="aws-us-gov"):
glacier_backends[region] = GlacierBackend(region)
for region in Session().get_available_regions("glacier", partition_name="aws-cn"):
glacier_backends[region] = GlacierBackend(region)

View File

@ -9,7 +9,7 @@ import uuid
from collections import OrderedDict from collections import OrderedDict
from datetime import datetime from datetime import datetime
import boto3 from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from .exceptions import ( from .exceptions import (
@ -825,5 +825,10 @@ class IoTBackend(BaseBackend):
return self.jobs[job_id] return self.jobs[job_id]
available_regions = boto3.session.Session().get_available_regions("iot") iot_backends = {}
iot_backends = {region: IoTBackend(region) for region in available_regions} for region in Session().get_available_regions("iot"):
iot_backends[region] = IoTBackend(region)
for region in Session().get_available_regions("iot", partition_name="aws-us-gov"):
iot_backends[region] = IoTBackend(region)
for region in Session().get_available_regions("iot", partition_name="aws-cn"):
iot_backends[region] = IoTBackend(region)

View File

@ -1,8 +1,9 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import json import json
import time import time
import boto3
import jsondiff import jsondiff
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.iot import iot_backends from moto.iot import iot_backends
from .exceptions import ( from .exceptions import (
@ -205,5 +206,10 @@ class IoTDataPlaneBackend(BaseBackend):
return None return None
available_regions = boto3.session.Session().get_available_regions("iot-data") iotdata_backends = {}
iotdata_backends = {region: IoTDataPlaneBackend(region) for region in available_regions} for region in Session().get_available_regions("iot-data"):
iotdata_backends[region] = IoTDataPlaneBackend(region)
for region in Session().get_available_regions("iot-data", partition_name="aws-us-gov"):
iotdata_backends[region] = IoTDataPlaneBackend(region)
for region in Session().get_available_regions("iot-data", partition_name="aws-cn"):
iotdata_backends[region] = IoTDataPlaneBackend(region)

View File

@ -10,6 +10,8 @@ import itertools
from operator import attrgetter from operator import attrgetter
from hashlib import md5 from hashlib import md5
from boto3 import Session
from moto.compat import OrderedDict from moto.compat import OrderedDict
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.core.utils import unix_time from moto.core.utils import unix_time
@ -530,5 +532,9 @@ class KinesisBackend(BaseBackend):
kinesis_backends = {} kinesis_backends = {}
for region in boto.kinesis.regions(): for region in Session().get_available_regions("kinesis"):
kinesis_backends[region.name] = KinesisBackend() kinesis_backends[region] = KinesisBackend()
for region in Session().get_available_regions("kinesis", partition_name="aws-us-gov"):
kinesis_backends[region] = KinesisBackend()
for region in Session().get_available_regions("kinesis", partition_name="aws-cn"):
kinesis_backends[region] = KinesisBackend()

View File

@ -5,6 +5,7 @@ from collections import defaultdict
from datetime import datetime, timedelta from datetime import datetime, timedelta
import boto.kms import boto.kms
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.core.utils import iso_8601_datetime_without_milliseconds from moto.core.utils import iso_8601_datetime_without_milliseconds
@ -284,5 +285,9 @@ class KmsBackend(BaseBackend):
kms_backends = {} kms_backends = {}
for region in boto.kms.regions(): for region in Session().get_available_regions("kms"):
kms_backends[region.name] = KmsBackend() kms_backends[region] = KmsBackend()
for region in Session().get_available_regions("kms", partition_name="aws-us-gov"):
kms_backends[region] = KmsBackend()
for region in Session().get_available_regions("kms", partition_name="aws-cn"):
kms_backends[region] = KmsBackend()

View File

@ -1,3 +1,5 @@
from boto3 import Session
from moto.core import BaseBackend from moto.core import BaseBackend
import boto.logs import boto.logs
from moto.core.utils import unix_time_millis from moto.core.utils import unix_time_millis
@ -558,6 +560,10 @@ class LogsBackend(BaseBackend):
log_group.untag(tags) log_group.untag(tags)
logs_backends = { logs_backends = {}
region.name: LogsBackend(region.name) for region in boto.logs.regions() for region in Session().get_available_regions("logs"):
} logs_backends[region] = LogsBackend(region)
for region in Session().get_available_regions("logs", partition_name="aws-us-gov"):
logs_backends[region] = LogsBackend(region)
for region in Session().get_available_regions("logs", partition_name="aws-cn"):
logs_backends[region] = LogsBackend(region)

View File

@ -3,6 +3,8 @@ from xml.etree import ElementTree as ET
import datetime import datetime
import boto3 import boto3
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from .resources import VOICE_DATA from .resources import VOICE_DATA
@ -113,7 +115,10 @@ class PollyBackend(BaseBackend):
self._lexicons[name] = lexicon self._lexicons[name] = lexicon
available_regions = boto3.session.Session().get_available_regions("polly") polly_backends = {}
polly_backends = { for region in Session().get_available_regions("polly"):
region: PollyBackend(region_name=region) for region in available_regions polly_backends[region] = PollyBackend(region)
} for region in Session().get_available_regions("polly", partition_name="aws-us-gov"):
polly_backends[region] = PollyBackend(region)
for region in Session().get_available_regions("polly", partition_name="aws-cn"):
polly_backends[region] = PollyBackend(region)

View File

@ -6,6 +6,7 @@ import os
from collections import defaultdict from collections import defaultdict
import boto.rds2 import boto.rds2
from boto3 import Session
from jinja2 import Template from jinja2 import Template
from re import compile as re_compile from re import compile as re_compile
from moto.cloudformation.exceptions import UnformattedGetAttTemplateException from moto.cloudformation.exceptions import UnformattedGetAttTemplateException
@ -1501,6 +1502,10 @@ class DBParameterGroup(object):
return db_parameter_group return db_parameter_group
rds2_backends = dict( rds2_backends = {}
(region.name, RDS2Backend(region.name)) for region in boto.rds2.regions() for region in Session().get_available_regions("rds"):
) rds2_backends[region] = RDS2Backend(region)
for region in Session().get_available_regions("rds", partition_name="aws-us-gov"):
rds2_backends[region] = RDS2Backend(region)
for region in Session().get_available_regions("rds", partition_name="aws-cn"):
rds2_backends[region] = RDS2Backend(region)

View File

@ -4,6 +4,7 @@ import copy
import datetime import datetime
import boto.redshift import boto.redshift
from boto3 import Session
from botocore.exceptions import ClientError from botocore.exceptions import ClientError
from moto.compat import OrderedDict from moto.compat import OrderedDict
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
@ -897,7 +898,9 @@ class RedshiftBackend(BaseBackend):
redshift_backends = {} redshift_backends = {}
for region in boto.redshift.regions(): for region in Session().get_available_regions("redshift"):
redshift_backends[region.name] = RedshiftBackend( redshift_backends[region] = RedshiftBackend(ec2_backends[region], region)
ec2_backends[region.name], region.name for region in Session().get_available_regions("redshift", partition_name="aws-us-gov"):
) redshift_backends[region] = RedshiftBackend(ec2_backends[region], region)
for region in Session().get_available_regions("redshift", partition_name="aws-cn"):
redshift_backends[region] = RedshiftBackend(ec2_backends[region], region)

View File

@ -1,10 +1,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from builtins import str from builtins import str
import boto3
import json import json
import re import re
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from moto.core import ACCOUNT_ID from moto.core import ACCOUNT_ID
from .exceptions import BadRequestException from .exceptions import BadRequestException
@ -350,7 +351,14 @@ class ResourceGroupsBackend(BaseBackend):
return self.groups.by_name[group_name] return self.groups.by_name[group_name]
available_regions = boto3.session.Session().get_available_regions("resource-groups") resourcegroups_backends = {}
resourcegroups_backends = { for region in Session().get_available_regions("resource-groups"):
region: ResourceGroupsBackend(region_name=region) for region in available_regions resourcegroups_backends[region] = ResourceGroupsBackend(region)
} for region in Session().get_available_regions(
"resource-groups", partition_name="aws-us-gov"
):
resourcegroups_backends[region] = ResourceGroupsBackend(region)
for region in Session().get_available_regions(
"resource-groups", partition_name="aws-cn"
):
resourcegroups_backends[region] = ResourceGroupsBackend(region)

View File

@ -1,7 +1,8 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import uuid import uuid
import boto3
import six import six
from boto3 import Session
from moto.core import BaseBackend from moto.core import BaseBackend
from moto.core.exceptions import RESTError from moto.core.exceptions import RESTError
@ -636,9 +637,14 @@ class ResourceGroupsTaggingAPIBackend(BaseBackend):
# return failed_resources_map # return failed_resources_map
available_regions = boto3.session.Session().get_available_regions( resourcegroupstaggingapi_backends = {}
"resourcegroupstaggingapi" for region in Session().get_available_regions("resourcegroupstaggingapi"):
) resourcegroupstaggingapi_backends[region] = ResourceGroupsTaggingAPIBackend(region)
resourcegroupstaggingapi_backends = { for region in Session().get_available_regions(
region: ResourceGroupsTaggingAPIBackend(region) for region in available_regions "resourcegroupstaggingapi", partition_name="aws-us-gov"
} ):
resourcegroupstaggingapi_backends[region] = ResourceGroupsTaggingAPIBackend(region)
for region in Session().get_available_regions(
"resourcegroupstaggingapi", partition_name="aws-cn"
):
resourcegroupstaggingapi_backends[region] = ResourceGroupsTaggingAPIBackend(region)

View File

@ -7,6 +7,7 @@ import uuid
import datetime import datetime
import boto3 import boto3
from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
from .exceptions import ( from .exceptions import (
@ -491,7 +492,14 @@ class SecretsManagerBackend(BaseBackend):
) )
available_regions = boto3.session.Session().get_available_regions("secretsmanager") secretsmanager_backends = {}
secretsmanager_backends = { for region in Session().get_available_regions("secretsmanager"):
region: SecretsManagerBackend(region_name=region) for region in available_regions secretsmanager_backends[region] = SecretsManagerBackend(region_name=region)
} for region in Session().get_available_regions(
"secretsmanager", partition_name="aws-us-gov"
):
secretsmanager_backends[region] = SecretsManagerBackend(region_name=region)
for region in Session().get_available_regions(
"secretsmanager", partition_name="aws-cn"
):
secretsmanager_backends[region] = SecretsManagerBackend(region_name=region)

View File

@ -707,6 +707,10 @@ class SNSBackend(BaseBackend):
sns_backends = {} sns_backends = {}
for region in Session().get_available_regions("sns"): for region in Session().get_available_regions("sns"):
sns_backends[region] = SNSBackend(region) sns_backends[region] = SNSBackend(region)
for region in Session().get_available_regions("sns", partition_name="aws-us-gov"):
sns_backends[region] = SNSBackend(region)
for region in Session().get_available_regions("sns", partition_name="aws-cn"):
sns_backends[region] = SNSBackend(region)
DEFAULT_EFFECTIVE_DELIVERY_POLICY = { DEFAULT_EFFECTIVE_DELIVERY_POLICY = {

View File

@ -9,6 +9,7 @@ import struct
from xml.sax.saxutils import escape from xml.sax.saxutils import escape
import boto.sqs import boto.sqs
from boto3 import Session
from moto.core.exceptions import RESTError from moto.core.exceptions import RESTError
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
@ -857,5 +858,9 @@ class SQSBackend(BaseBackend):
sqs_backends = {} sqs_backends = {}
for region in boto.sqs.regions(): for region in Session().get_available_regions("sqs"):
sqs_backends[region.name] = SQSBackend(region.name) sqs_backends[region] = SQSBackend(region)
for region in Session().get_available_regions("sqs", partition_name="aws-us-gov"):
sqs_backends[region] = SQSBackend(region)
for region in Session().get_available_regions("sqs", partition_name="aws-cn"):
sqs_backends[region] = SQSBackend(region)

View File

@ -1,6 +1,9 @@
import boto import boto
import re import re
from datetime import datetime from datetime import datetime
from boto3 import Session
from moto.core import BaseBackend from moto.core import BaseBackend
from moto.core.utils import iso_8601_datetime_without_milliseconds from moto.core.utils import iso_8601_datetime_without_milliseconds
from moto.sts.models import ACCOUNT_ID from moto.sts.models import ACCOUNT_ID
@ -280,7 +283,12 @@ class StepFunctionBackend(BaseBackend):
return ACCOUNT_ID return ACCOUNT_ID
stepfunction_backends = { stepfunction_backends = {}
_region.name: StepFunctionBackend(_region.name) for region in Session().get_available_regions("stepfunctions"):
for _region in boto.awslambda.regions() stepfunction_backends[region] = StepFunctionBackend(region)
} for region in Session().get_available_regions(
"stepfunctions", partition_name="aws-us-gov"
):
stepfunction_backends[region] = StepFunctionBackend(region)
for region in Session().get_available_regions("stepfunctions", partition_name="aws-cn"):
stepfunction_backends[region] = StepFunctionBackend(region)

View File

@ -1,6 +1,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import boto.swf import boto.swf
from boto3 import Session
from moto.core import BaseBackend from moto.core import BaseBackend
@ -418,5 +419,9 @@ class SWFBackend(BaseBackend):
swf_backends = {} swf_backends = {}
for region in boto.swf.regions(): for region in Session().get_available_regions("swf"):
swf_backends[region.name] = SWFBackend(region.name) swf_backends[region] = SWFBackend(region)
for region in Session().get_available_regions("swf", partition_name="aws-us-gov"):
swf_backends[region] = SWFBackend(region)
for region in Session().get_available_regions("swf", partition_name="aws-cn"):
swf_backends[region] = SWFBackend(region)

View File

@ -1,5 +1,5 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import boto3 from boto3 import Session
from moto.core import BaseBackend, BaseModel from moto.core import BaseBackend, BaseModel
@ -16,5 +16,10 @@ class {{ service_class }}Backend(BaseBackend):
# add methods from here # add methods from here
available_regions = boto3.session.Session().get_available_regions("{{ service }}") {{ escaped_service }}_backends = {}
{{ escaped_service }}_backends = {region: {{ service_class }}Backend(region) for region in available_regions} for region in Session().get_available_regions("{{ service }}"):
{{ escaped_service }}_backends[region] = {{ service_class }}Backend()
for region in Session().get_available_regions("{{ service }}", partition_name="aws-us-gov"):
{{ escaped_service }}_backends[region] = {{ service_class }}Backend()
for region in Session().get_available_regions("{{ service }}", partition_name="aws-cn"):
{{ escaped_service }}_backends[region] = {{ service_class }}Backend()

View File

@ -11,7 +11,7 @@ from moto import mock_ec2, mock_ec2_deprecated
def test_describe_regions(): def test_describe_regions():
conn = boto.connect_ec2("the_key", "the_secret") conn = boto.connect_ec2("the_key", "the_secret")
regions = conn.get_all_regions() regions = conn.get_all_regions()
regions.should.have.length_of(16) regions.should.have.length_of(22)
for region in regions: for region in regions:
region.endpoint.should.contain(region.name) region.endpoint.should.contain(region.name)
@ -32,7 +32,7 @@ def test_availability_zones():
def test_boto3_describe_regions(): def test_boto3_describe_regions():
ec2 = boto3.client("ec2", "us-east-1") ec2 = boto3.client("ec2", "us-east-1")
resp = ec2.describe_regions() resp = ec2.describe_regions()
resp["Regions"].should.have.length_of(16) resp["Regions"].should.have.length_of(22)
for rec in resp["Regions"]: for rec in resp["Regions"]:
rec["Endpoint"].should.contain(rec["RegionName"]) rec["Endpoint"].should.contain(rec["RegionName"])

View File

@ -3,13 +3,21 @@ import boto.ec2
import boto.ec2.autoscale import boto.ec2.autoscale
import boto.ec2.elb import boto.ec2.elb
import sure import sure
from boto3 import Session
from moto import mock_ec2_deprecated, mock_autoscaling_deprecated, mock_elb_deprecated from moto import mock_ec2_deprecated, mock_autoscaling_deprecated, mock_elb_deprecated
from moto.ec2 import ec2_backends from moto.ec2 import ec2_backends
def test_use_boto_regions(): def test_use_boto_regions():
boto_regions = {r.name for r in boto.ec2.regions()} boto_regions = set()
for region in Session().get_available_regions("ec2"):
boto_regions.add(region)
for region in Session().get_available_regions("ec2", partition_name="aws-us-gov"):
boto_regions.add(region)
for region in Session().get_available_regions("ec2", partition_name="aws-cn"):
boto_regions.add(region)
moto_regions = set(ec2_backends) moto_regions = set(ec2_backends)
moto_regions.should.equal(boto_regions) moto_regions.should.equal(boto_regions)

View File

@ -44,7 +44,7 @@ def test_describe_job():
joboutput.should.have.key("Tier").which.should.equal("Standard") joboutput.should.have.key("Tier").which.should.equal("Standard")
joboutput.should.have.key("StatusCode").which.should.equal("InProgress") joboutput.should.have.key("StatusCode").which.should.equal("InProgress")
joboutput.should.have.key("VaultARN").which.should.equal( joboutput.should.have.key("VaultARN").which.should.equal(
"arn:aws:glacier:RegionInfo:us-west-2:012345678901:vaults/my_vault" "arn:aws:glacier:us-west-2:012345678901:vaults/my_vault"
) )