Cleanup multi-region support for ELB, SQS, Cloudformation, EC2, Autoscaling.
This commit is contained in:
parent
b39861052b
commit
bd847bd941
16 changed files with 184 additions and 90 deletions
|
|
@ -1,3 +1,10 @@
|
|||
from __future__ import unicode_literals
|
||||
from .models import sqs_backend
|
||||
mock_sqs = sqs_backend.decorator
|
||||
from .models import sqs_backends, sqs_backend # flake8: noqa
|
||||
from ..core.models import MockAWS
|
||||
|
||||
|
||||
def mock_sqs(func=None):
|
||||
if func:
|
||||
return MockAWS(sqs_backends)(func)
|
||||
else:
|
||||
return MockAWS(sqs_backends)
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import time
|
|||
import re
|
||||
from xml.sax.saxutils import escape
|
||||
|
||||
import boto.sqs
|
||||
|
||||
from moto.core import BaseBackend
|
||||
from moto.core.utils import camelcase_to_underscores, get_random_message_id
|
||||
|
|
@ -120,9 +121,10 @@ class Queue(object):
|
|||
self.receive_message_wait_time_seconds = 0
|
||||
|
||||
@classmethod
|
||||
def create_from_cloudformation_json(cls, resource_name, cloudformation_json):
|
||||
def create_from_cloudformation_json(cls, resource_name, cloudformation_json, region_name):
|
||||
properties = cloudformation_json['Properties']
|
||||
|
||||
sqs_backend = sqs_backends[region_name]
|
||||
return sqs_backend.create_queue(
|
||||
name=properties['QueueName'],
|
||||
visibility_timeout=properties.get('VisibilityTimeout'),
|
||||
|
|
@ -272,4 +274,8 @@ class SQSBackend(BaseBackend):
|
|||
return
|
||||
raise ReceiptHandleIsInvalid
|
||||
|
||||
sqs_backend = SQSBackend()
|
||||
sqs_backends = {}
|
||||
for region in boto.sqs.regions():
|
||||
sqs_backends[region.name] = SQSBackend()
|
||||
|
||||
sqs_backend = sqs_backends['us-east-1']
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from jinja2 import Template
|
|||
from moto.core.responses import BaseResponse
|
||||
from moto.core.utils import camelcase_to_underscores
|
||||
from .utils import parse_message_attributes
|
||||
from .models import sqs_backend
|
||||
from .models import sqs_backends
|
||||
from .exceptions import (
|
||||
MessageAttributesInvalid,
|
||||
MessageNotInflight,
|
||||
|
|
@ -16,19 +16,23 @@ MAXIMUM_VISIBILTY_TIMEOUT = 43200
|
|||
|
||||
class QueuesResponse(BaseResponse):
|
||||
|
||||
@property
|
||||
def sqs_backend(self):
|
||||
return sqs_backends[self.region]
|
||||
|
||||
def create_queue(self):
|
||||
visibility_timeout = None
|
||||
if 'Attribute.1.Name' in self.querystring and self.querystring.get('Attribute.1.Name')[0] == 'VisibilityTimeout':
|
||||
visibility_timeout = self.querystring.get("Attribute.1.Value")[0]
|
||||
|
||||
queue_name = self.querystring.get("QueueName")[0]
|
||||
queue = sqs_backend.create_queue(queue_name, visibility_timeout=visibility_timeout)
|
||||
queue = self.sqs_backend.create_queue(queue_name, visibility_timeout=visibility_timeout)
|
||||
template = Template(CREATE_QUEUE_RESPONSE)
|
||||
return template.render(queue=queue)
|
||||
|
||||
def get_queue_url(self):
|
||||
queue_name = self.querystring.get("QueueName")[0]
|
||||
queue = sqs_backend.get_queue(queue_name)
|
||||
queue = self.sqs_backend.get_queue(queue_name)
|
||||
if queue:
|
||||
template = Template(GET_QUEUE_URL_RESPONSE)
|
||||
return template.render(queue=queue)
|
||||
|
|
@ -37,12 +41,17 @@ class QueuesResponse(BaseResponse):
|
|||
|
||||
def list_queues(self):
|
||||
queue_name_prefix = self.querystring.get("QueueNamePrefix", [None])[0]
|
||||
queues = sqs_backend.list_queues(queue_name_prefix)
|
||||
queues = self.sqs_backend.list_queues(queue_name_prefix)
|
||||
template = Template(LIST_QUEUES_RESPONSE)
|
||||
return template.render(queues=queues)
|
||||
|
||||
|
||||
class QueueResponse(BaseResponse):
|
||||
|
||||
@property
|
||||
def sqs_backend(self):
|
||||
return sqs_backends[self.region]
|
||||
|
||||
def change_message_visibility(self):
|
||||
queue_name = self.path.split("/")[-1]
|
||||
receipt_handle = self.querystring.get("ReceiptHandle")[0]
|
||||
|
|
@ -54,7 +63,7 @@ class QueueResponse(BaseResponse):
|
|||
), dict(status=400)
|
||||
|
||||
try:
|
||||
sqs_backend.change_message_visibility(
|
||||
self.sqs_backend.change_message_visibility(
|
||||
queue_name=queue_name,
|
||||
receipt_handle=receipt_handle,
|
||||
visibility_timeout=visibility_timeout
|
||||
|
|
@ -67,7 +76,7 @@ class QueueResponse(BaseResponse):
|
|||
|
||||
def get_queue_attributes(self):
|
||||
queue_name = self.path.split("/")[-1]
|
||||
queue = sqs_backend.get_queue(queue_name)
|
||||
queue = self.sqs_backend.get_queue(queue_name)
|
||||
template = Template(GET_QUEUE_ATTRIBUTES_RESPONSE)
|
||||
return template.render(queue=queue)
|
||||
|
||||
|
|
@ -75,12 +84,12 @@ class QueueResponse(BaseResponse):
|
|||
queue_name = self.path.split("/")[-1]
|
||||
key = camelcase_to_underscores(self.querystring.get('Attribute.Name')[0])
|
||||
value = self.querystring.get('Attribute.Value')[0]
|
||||
sqs_backend.set_queue_attribute(queue_name, key, value)
|
||||
self.sqs_backend.set_queue_attribute(queue_name, key, value)
|
||||
return SET_QUEUE_ATTRIBUTE_RESPONSE
|
||||
|
||||
def delete_queue(self):
|
||||
queue_name = self.path.split("/")[-1]
|
||||
queue = sqs_backend.delete_queue(queue_name)
|
||||
queue = self.sqs_backend.delete_queue(queue_name)
|
||||
if not queue:
|
||||
return "A queue with name {0} does not exist".format(queue_name), dict(status=404)
|
||||
template = Template(DELETE_QUEUE_RESPONSE)
|
||||
|
|
@ -101,7 +110,7 @@ class QueueResponse(BaseResponse):
|
|||
return e.description, dict(status=e.status_code)
|
||||
|
||||
queue_name = self.path.split("/")[-1]
|
||||
message = sqs_backend.send_message(
|
||||
message = self.sqs_backend.send_message(
|
||||
queue_name,
|
||||
message,
|
||||
message_attributes=message_attributes,
|
||||
|
|
@ -137,7 +146,7 @@ class QueueResponse(BaseResponse):
|
|||
message_user_id = self.querystring.get(message_user_id_key)[0]
|
||||
delay_key = 'SendMessageBatchRequestEntry.{0}.DelaySeconds'.format(index)
|
||||
delay_seconds = self.querystring.get(delay_key, [None])[0]
|
||||
message = sqs_backend.send_message(queue_name, message_body[0], delay_seconds=delay_seconds)
|
||||
message = self.sqs_backend.send_message(queue_name, message_body[0], delay_seconds=delay_seconds)
|
||||
message.user_id = message_user_id
|
||||
|
||||
message_attributes = parse_message_attributes(self.querystring, base='SendMessageBatchRequestEntry.{0}.'.format(index), value_namespace='')
|
||||
|
|
@ -153,7 +162,7 @@ class QueueResponse(BaseResponse):
|
|||
def delete_message(self):
|
||||
queue_name = self.path.split("/")[-1]
|
||||
receipt_handle = self.querystring.get("ReceiptHandle")[0]
|
||||
sqs_backend.delete_message(queue_name, receipt_handle)
|
||||
self.sqs_backend.delete_message(queue_name, receipt_handle)
|
||||
template = Template(DELETE_MESSAGE_RESPONSE)
|
||||
return template.render()
|
||||
|
||||
|
|
@ -178,7 +187,7 @@ class QueueResponse(BaseResponse):
|
|||
# Found all messages
|
||||
break
|
||||
|
||||
sqs_backend.delete_message(queue_name, receipt_handle[0])
|
||||
self.sqs_backend.delete_message(queue_name, receipt_handle[0])
|
||||
|
||||
message_user_id_key = 'DeleteMessageBatchRequestEntry.{0}.Id'.format(index)
|
||||
message_user_id = self.querystring.get(message_user_id_key)[0]
|
||||
|
|
@ -190,7 +199,7 @@ class QueueResponse(BaseResponse):
|
|||
def receive_message(self):
|
||||
queue_name = self.path.split("/")[-1]
|
||||
message_count = int(self.querystring.get("MaxNumberOfMessages")[0])
|
||||
messages = sqs_backend.receive_messages(queue_name, message_count)
|
||||
messages = self.sqs_backend.receive_messages(queue_name, message_count)
|
||||
template = Template(RECEIVE_MESSAGE_RESPONSE)
|
||||
output = template.render(messages=messages)
|
||||
return output
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue