This commit is contained in:
gruebel 2019-10-18 09:04:29 +02:00
parent 05dc97b468
commit ed1c799bdc
3 changed files with 24 additions and 49 deletions

View File

@ -19,9 +19,12 @@ class MessageAttributesInvalid(Exception):
self.description = description self.description = description
class QueueDoesNotExist(Exception): class QueueDoesNotExist(RESTError):
status_code = 404 code = 404
description = "The specified queue does not exist for this wsdl version."
def __init__(self):
super(QueueDoesNotExist, self).__init__(
"QueueDoesNotExist", "The specified queue does not exist for this wsdl version.")
class QueueAlreadyExists(RESTError): class QueueAlreadyExists(RESTError):

View File

@ -654,12 +654,21 @@ class SQSBackend(BaseBackend):
def tag_queue(self, queue_name, tags): def tag_queue(self, queue_name, tags):
queue = self.get_queue(queue_name) queue = self.get_queue(queue_name)
if not len(tags):
raise RESTError('MissingParameter',
'The request must contain the parameter Tags.')
if len(tags) > 50:
raise RESTError('InvalidParameterValue',
'Too many tags added for queue {}.'.format(queue_name))
queue.tags.update(tags) queue.tags.update(tags)
def untag_queue(self, queue_name, tag_keys): def untag_queue(self, queue_name, tag_keys):
queue = self.get_queue(queue_name) queue = self.get_queue(queue_name)
if len(tag_keys) == 0: if not len(tag_keys):
raise RESTError('InvalidParameterValue', 'Tag keys must be between 1 and 128 characters in length.') raise RESTError('InvalidParameterValue', 'Tag keys must be between 1 and 128 characters in length.')
for key in tag_keys: for key in tag_keys:

View File

@ -10,7 +10,6 @@ from .models import sqs_backends
from .exceptions import ( from .exceptions import (
MessageAttributesInvalid, MessageAttributesInvalid,
MessageNotInflight, MessageNotInflight,
QueueDoesNotExist,
ReceiptHandleIsInvalid, ReceiptHandleIsInvalid,
) )
@ -90,11 +89,7 @@ class SQSResponse(BaseResponse):
request_url = urlparse(self.uri) request_url = urlparse(self.uri)
queue_name = self._get_param("QueueName") queue_name = self._get_param("QueueName")
try: queue = self.sqs_backend.get_queue(queue_name)
queue = self.sqs_backend.get_queue(queue_name)
except QueueDoesNotExist as e:
return self._error('AWS.SimpleQueueService.NonExistentQueue',
e.description)
if queue: if queue:
template = self.response_template(GET_QUEUE_URL_RESPONSE) template = self.response_template(GET_QUEUE_URL_RESPONSE)
@ -175,11 +170,8 @@ class SQSResponse(BaseResponse):
def get_queue_attributes(self): def get_queue_attributes(self):
queue_name = self._get_queue_name() queue_name = self._get_queue_name()
try:
queue = self.sqs_backend.get_queue(queue_name) queue = self.sqs_backend.get_queue(queue_name)
except QueueDoesNotExist as e:
return self._error('AWS.SimpleQueueService.NonExistentQueue',
e.description)
template = self.response_template(GET_QUEUE_ATTRIBUTES_RESPONSE) template = self.response_template(GET_QUEUE_ATTRIBUTES_RESPONSE)
return template.render(queue=queue) return template.render(queue=queue)
@ -242,11 +234,7 @@ class SQSResponse(BaseResponse):
queue_name = self._get_queue_name() queue_name = self._get_queue_name()
try: self.sqs_backend.get_queue(queue_name)
self.sqs_backend.get_queue(queue_name)
except QueueDoesNotExist as e:
return self._error('AWS.SimpleQueueService.NonExistentQueue',
e.description)
if self.querystring.get('Entries'): if self.querystring.get('Entries'):
return self._error('AWS.SimpleQueueService.EmptyBatchRequest', return self._error('AWS.SimpleQueueService.EmptyBatchRequest',
@ -268,7 +256,7 @@ class SQSResponse(BaseResponse):
'hyphens and underscores. It can be at most 80 letters long.') 'hyphens and underscores. It can be at most 80 letters long.')
body_length = next( body_length = next(
(len(entry['MessageBody']) for entry in entries.values() if len(entry['MessageBody']) > 262144), (len(entry['MessageBody']) for entry in entries.values() if len(entry['MessageBody']) > MAXIMUM_MESSAGE_LENGTH),
False False
) )
if body_length: if body_length:
@ -363,10 +351,7 @@ class SQSResponse(BaseResponse):
def receive_message(self): def receive_message(self):
queue_name = self._get_queue_name() queue_name = self._get_queue_name()
try: queue = self.sqs_backend.get_queue(queue_name)
queue = self.sqs_backend.get_queue(queue_name)
except QueueDoesNotExist as e:
return self._error('QueueDoesNotExist', e.description)
try: try:
message_count = int(self.querystring.get("MaxNumberOfMessages")[0]) message_count = int(self.querystring.get("MaxNumberOfMessages")[0])
@ -439,20 +424,6 @@ class SQSResponse(BaseResponse):
queue_name = self._get_queue_name() queue_name = self._get_queue_name()
tags = self._get_map_prefix('Tag', key_end='.Key', value_end='.Value') tags = self._get_map_prefix('Tag', key_end='.Key', value_end='.Value')
try:
self.sqs_backend.get_queue(queue_name)
except QueueDoesNotExist as e:
return self._error('AWS.SimpleQueueService.NonExistentQueue',
e.description)
if len(tags) == 0:
return self._error('MissingParameter',
'The request must contain the parameter Tags.')
if len(tags) > 50:
return self._error('InvalidParameterValue',
'Too many tags added for queue {}.'.format(queue_name))
self.sqs_backend.tag_queue(queue_name, tags) self.sqs_backend.tag_queue(queue_name, tags)
template = self.response_template(TAG_QUEUE_RESPONSE) template = self.response_template(TAG_QUEUE_RESPONSE)
@ -462,11 +433,7 @@ class SQSResponse(BaseResponse):
queue_name = self._get_queue_name() queue_name = self._get_queue_name()
tag_keys = self._get_multi_param('TagKey') tag_keys = self._get_multi_param('TagKey')
try: self.sqs_backend.untag_queue(queue_name, tag_keys)
self.sqs_backend.untag_queue(queue_name, tag_keys)
except QueueDoesNotExist as e:
return self._error('AWS.SimpleQueueService.NonExistentQueue',
e.description)
template = self.response_template(UNTAG_QUEUE_RESPONSE) template = self.response_template(UNTAG_QUEUE_RESPONSE)
return template.render() return template.render()
@ -474,11 +441,7 @@ class SQSResponse(BaseResponse):
def list_queue_tags(self): def list_queue_tags(self):
queue_name = self._get_queue_name() queue_name = self._get_queue_name()
try: queue = self.sqs_backend.get_queue(queue_name)
queue = self.sqs_backend.get_queue(queue_name)
except QueueDoesNotExist as e:
return self._error('AWS.SimpleQueueService.NonExistentQueue',
e.description)
template = self.response_template(LIST_QUEUE_TAGS_RESPONSE) template = self.response_template(LIST_QUEUE_TAGS_RESPONSE)
return template.render(tags=queue.tags) return template.render(tags=queue.tags)