Fix queue urls for other regions. Closes #411.

This commit is contained in:
Steve Pulec 2015-09-19 09:18:16 -04:00
parent bee2b5a891
commit f72613cc47
3 changed files with 20 additions and 7 deletions

View File

@ -106,9 +106,10 @@ class Queue(object):
'VisibilityTimeout', 'VisibilityTimeout',
'WaitTimeSeconds'] 'WaitTimeSeconds']
def __init__(self, name, visibility_timeout, wait_time_seconds): def __init__(self, name, visibility_timeout, wait_time_seconds, region):
self.name = name self.name = name
self.visibility_timeout = visibility_timeout or 30 self.visibility_timeout = visibility_timeout or 30
self.region = region
# wait_time_seconds will be set to immediate return messages # wait_time_seconds will be set to immediate return messages
self.wait_time_seconds = wait_time_seconds or 0 self.wait_time_seconds = wait_time_seconds or 0
@ -179,6 +180,10 @@ class Queue(object):
result[attribute] = getattr(self, camelcase_to_underscores(attribute)) result[attribute] = getattr(self, camelcase_to_underscores(attribute))
return result return result
@property
def url(self):
return "http://sqs.{0}.amazonaws.com/123456789012/{1}".format(self.region, self.name)
@property @property
def messages(self): def messages(self):
return [message for message in self._messages if message.visible and not message.delayed] return [message for message in self._messages if message.visible and not message.delayed]
@ -196,14 +201,20 @@ class Queue(object):
class SQSBackend(BaseBackend): class SQSBackend(BaseBackend):
def __init__(self): def __init__(self, region_name):
self.region_name = region_name
self.queues = {} self.queues = {}
super(SQSBackend, self).__init__() super(SQSBackend, self).__init__()
def reset(self):
region_name = self.region_name
self.__dict__ = {}
self.__init__(region_name)
def create_queue(self, name, visibility_timeout, wait_time_seconds): def create_queue(self, name, visibility_timeout, wait_time_seconds):
queue = self.queues.get(name) queue = self.queues.get(name)
if queue is None: if queue is None:
queue = Queue(name, visibility_timeout, wait_time_seconds) queue = Queue(name, visibility_timeout, wait_time_seconds, self.region_name)
self.queues[name] = queue self.queues[name] = queue
return queue return queue
@ -314,4 +325,4 @@ class SQSBackend(BaseBackend):
sqs_backends = {} sqs_backends = {}
for region in boto.sqs.regions(): for region in boto.sqs.regions():
sqs_backends[region.name] = SQSBackend() sqs_backends[region.name] = SQSBackend(region.name)

View File

@ -232,7 +232,7 @@ class SQSResponse(BaseResponse):
CREATE_QUEUE_RESPONSE = """<CreateQueueResponse> CREATE_QUEUE_RESPONSE = """<CreateQueueResponse>
<CreateQueueResult> <CreateQueueResult>
<QueueUrl>http://sqs.us-east-1.amazonaws.com/123456789012/{{ queue.name }}</QueueUrl> <QueueUrl>{{ queue.url }}</QueueUrl>
<VisibilityTimeout>{{ queue.visibility_timeout }}</VisibilityTimeout> <VisibilityTimeout>{{ queue.visibility_timeout }}</VisibilityTimeout>
</CreateQueueResult> </CreateQueueResult>
<ResponseMetadata> <ResponseMetadata>
@ -244,7 +244,7 @@ CREATE_QUEUE_RESPONSE = """<CreateQueueResponse>
GET_QUEUE_URL_RESPONSE = """<GetQueueUrlResponse> GET_QUEUE_URL_RESPONSE = """<GetQueueUrlResponse>
<GetQueueUrlResult> <GetQueueUrlResult>
<QueueUrl>http://sqs.us-east-1.amazonaws.com/123456789012/{{ queue.name }}</QueueUrl> <QueueUrl>{{ queue.url }}</QueueUrl>
</GetQueueUrlResult> </GetQueueUrlResult>
<ResponseMetadata> <ResponseMetadata>
<RequestId>470a6f13-2ed9-4181-ad8a-2fdea142988e</RequestId> <RequestId>470a6f13-2ed9-4181-ad8a-2fdea142988e</RequestId>
@ -254,7 +254,7 @@ GET_QUEUE_URL_RESPONSE = """<GetQueueUrlResponse>
LIST_QUEUES_RESPONSE = """<ListQueuesResponse> LIST_QUEUES_RESPONSE = """<ListQueuesResponse>
<ListQueuesResult> <ListQueuesResult>
{% for queue in queues %} {% for queue in queues %}
<QueueUrl>http://sqs.us-east-1.amazonaws.com/123456789012/{{ queue.name }}</QueueUrl> <QueueUrl>{{ queue.url }}</QueueUrl>
{% endfor %} {% endfor %}
</ListQueuesResult> </ListQueuesResult>
<ResponseMetadata> <ResponseMetadata>

View File

@ -34,6 +34,8 @@ def test_create_queues_in_multiple_region():
list(west1_conn.get_all_queues()).should.have.length_of(1) list(west1_conn.get_all_queues()).should.have.length_of(1)
list(west2_conn.get_all_queues()).should.have.length_of(1) list(west2_conn.get_all_queues()).should.have.length_of(1)
west1_conn.get_all_queues()[0].url.should.equal('http://sqs.us-west-1.amazonaws.com/123456789012/test-queue')
@mock_sqs @mock_sqs
def test_get_queue(): def test_get_queue():