Use request URL to generate SQS queue URLs; fixes #626 (#827)

This commit is contained in:
Chris LaRose 2017-03-04 19:53:14 -08:00 committed by Steve Pulec
parent f46a24180f
commit 56f9409ca9
3 changed files with 14 additions and 11 deletions

View File

@ -180,9 +180,8 @@ 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, request_url):
def url(self): return "{0}://{1}/123456789012/{2}".format(request_url.scheme, request_url.netloc, self.name)
return "http://sqs.{0}.amazonaws.com/123456789012/{1}".format(self.region, self.name)
@property @property
def messages(self): def messages(self):

View File

@ -1,4 +1,5 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from six.moves.urllib.parse import urlparse
from moto.core.responses import BaseResponse from moto.core.responses import BaseResponse
from moto.core.utils import camelcase_to_underscores from moto.core.utils import camelcase_to_underscores
@ -57,26 +58,29 @@ class SQSResponse(BaseResponse):
return status_code, headers, body return status_code, headers, body
def create_queue(self): def create_queue(self):
request_url = urlparse(self.uri)
queue_name = self.querystring.get("QueueName")[0] queue_name = self.querystring.get("QueueName")[0]
queue = self.sqs_backend.create_queue(queue_name, visibility_timeout=self.attribute.get('VisibilityTimeout'), queue = self.sqs_backend.create_queue(queue_name, visibility_timeout=self.attribute.get('VisibilityTimeout'),
wait_time_seconds=self.attribute.get('WaitTimeSeconds')) wait_time_seconds=self.attribute.get('WaitTimeSeconds'))
template = self.response_template(CREATE_QUEUE_RESPONSE) template = self.response_template(CREATE_QUEUE_RESPONSE)
return template.render(queue=queue) return template.render(queue=queue, request_url=request_url)
def get_queue_url(self): def get_queue_url(self):
request_url = urlparse(self.uri)
queue_name = self.querystring.get("QueueName")[0] queue_name = self.querystring.get("QueueName")[0]
queue = self.sqs_backend.get_queue(queue_name) queue = self.sqs_backend.get_queue(queue_name)
if queue: if queue:
template = self.response_template(GET_QUEUE_URL_RESPONSE) template = self.response_template(GET_QUEUE_URL_RESPONSE)
return template.render(queue=queue) return template.render(queue=queue, request_url=request_url)
else: else:
return "", dict(status=404) return "", dict(status=404)
def list_queues(self): def list_queues(self):
request_url = urlparse(self.uri)
queue_name_prefix = self.querystring.get("QueueNamePrefix", [None])[0] queue_name_prefix = self.querystring.get("QueueNamePrefix", [None])[0]
queues = self.sqs_backend.list_queues(queue_name_prefix) queues = self.sqs_backend.list_queues(queue_name_prefix)
template = self.response_template(LIST_QUEUES_RESPONSE) template = self.response_template(LIST_QUEUES_RESPONSE)
return template.render(queues=queues) return template.render(queues=queues, request_url=request_url)
def change_message_visibility(self): def change_message_visibility(self):
queue_name = self._get_queue_name() queue_name = self._get_queue_name()
@ -265,7 +269,7 @@ class SQSResponse(BaseResponse):
CREATE_QUEUE_RESPONSE = """<CreateQueueResponse> CREATE_QUEUE_RESPONSE = """<CreateQueueResponse>
<CreateQueueResult> <CreateQueueResult>
<QueueUrl>{{ queue.url }}</QueueUrl> <QueueUrl>{{ queue.url(request_url) }}</QueueUrl>
<VisibilityTimeout>{{ queue.visibility_timeout }}</VisibilityTimeout> <VisibilityTimeout>{{ queue.visibility_timeout }}</VisibilityTimeout>
</CreateQueueResult> </CreateQueueResult>
<ResponseMetadata> <ResponseMetadata>
@ -275,7 +279,7 @@ CREATE_QUEUE_RESPONSE = """<CreateQueueResponse>
GET_QUEUE_URL_RESPONSE = """<GetQueueUrlResponse> GET_QUEUE_URL_RESPONSE = """<GetQueueUrlResponse>
<GetQueueUrlResult> <GetQueueUrlResult>
<QueueUrl>{{ queue.url }}</QueueUrl> <QueueUrl>{{ queue.url(request_url) }}</QueueUrl>
</GetQueueUrlResult> </GetQueueUrlResult>
<ResponseMetadata> <ResponseMetadata>
<RequestId>470a6f13-2ed9-4181-ad8a-2fdea142988e</RequestId> <RequestId>470a6f13-2ed9-4181-ad8a-2fdea142988e</RequestId>
@ -285,7 +289,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>{{ queue.url }}</QueueUrl> <QueueUrl>{{ queue.url(request_url) }}</QueueUrl>
{% endfor %} {% endfor %}
</ListQueuesResult> </ListQueuesResult>
<ResponseMetadata> <ResponseMetadata>

View File

@ -71,7 +71,7 @@ def test_create_queues_in_multiple_region():
list(west1_conn.list_queues()['QueueUrls']).should.have.length_of(1) list(west1_conn.list_queues()['QueueUrls']).should.have.length_of(1)
list(west2_conn.list_queues()['QueueUrls']).should.have.length_of(1) list(west2_conn.list_queues()['QueueUrls']).should.have.length_of(1)
west1_conn.list_queues()['QueueUrls'][0].should.equal('http://sqs.us-west-1.amazonaws.com/123456789012/blah') west1_conn.list_queues()['QueueUrls'][0].should.equal('https://us-west-1.queue.amazonaws.com/123456789012/blah')
@mock_sqs @mock_sqs
@ -85,7 +85,7 @@ def test_get_queue_with_prefix():
queue = conn.list_queues(QueueNamePrefix="test-")['QueueUrls'] queue = conn.list_queues(QueueNamePrefix="test-")['QueueUrls']
queue.should.have.length_of(1) queue.should.have.length_of(1)
queue[0].should.equal("http://sqs.us-west-1.amazonaws.com/123456789012/test-queue") queue[0].should.equal("https://us-west-1.queue.amazonaws.com/123456789012/test-queue")
@mock_sqs @mock_sqs