Add multi-region support to EC2 Instances

This commit is contained in:
Hugo Lopes Tavares 2014-08-26 16:42:08 -04:00
commit 82eef28937
8 changed files with 92 additions and 24 deletions

View file

@ -9,8 +9,8 @@ from .utils import convert_regex_to_flask_path
class MockAWS(object):
nested_count = 0
def __init__(self, backend):
self.backend = backend
def __init__(self, backends):
self.backends = backends
if self.__class__.nested_count == 0:
HTTPretty.reset()
@ -26,13 +26,15 @@ class MockAWS(object):
def start(self):
self.__class__.nested_count += 1
self.backend.reset()
for backend in self.backends.values():
backend.reset()
if not HTTPretty.is_enabled():
HTTPretty.enable()
for method in HTTPretty.METHODS:
for key, value in self.backend.urls.iteritems():
backend = self.backends.values()[0]
for key, value in backend.urls.iteritems():
HTTPretty.register_uri(
method=method,
uri=re.compile(key),
@ -151,6 +153,6 @@ class BaseBackend(object):
def decorator(self, func=None):
if func:
return MockAWS(self)(func)
return MockAWS({'global': self})(func)
else:
return MockAWS(self)
return MockAWS({'global': self})

View file

@ -1,5 +1,6 @@
import datetime
import json
import re
from urlparse import parse_qs, urlparse
@ -9,6 +10,8 @@ from moto.core.utils import camelcase_to_underscores, method_names_from_class
class BaseResponse(object):
region = 'us-east-1'
def dispatch(self, request, full_url, headers):
querystring = {}
@ -38,6 +41,9 @@ class BaseResponse(object):
self.path = urlparse(full_url).path
self.querystring = querystring
self.method = request.method
region = re.search(r'\.(.+?)\.amazonaws\.com', full_url)
if region:
self.region = region.group(1)
self.headers = dict(request.headers)
self.response_headers = headers