"""The SQS helpers.""" import boto3 from feed_sender.conf import config def get_messages(queue_name, max_messages=None, msg_timeout=None): """Retrieve messages up to max number of messages from SQS queue. Args: queue_name (str): Name of SQS queue. max_messages (int): Maximum number of messages to be received by queue. Returns: list: list of messages received from queue """ sqs = boto3.resource('sqs', config.AWS_REGION) queue = sqs.get_queue_by_name(QueueName=queue_name) if msg_timeout: queue.set_attributes( Attributes={'VisibilityTimeout': msg_timeout}) messages = [] request_count = 10 queue_count = (int)(queue.attributes.get('ApproximateNumberOfMessages')) if not max_messages or max_messages > queue_count: max_messages = queue_count fetch_messages = max_messages > 0 while fetch_messages: if max_messages - len(messages) < request_count: request_count = max_messages - len(messages) new_messages = queue.receive_messages( MaxNumberOfMessages=request_count, WaitTimeSeconds=20) if len(new_messages) == 0: queue.reload() queue_count = (int)( queue.attributes.get('ApproximateNumberOfMessages')) if queue_count == 0: fetch_messages = False else: messages.extend(new_messages) # hit maximum message count if len(messages) >= max_messages: fetch_messages = False return messages def delete_messages(messages): """Delete provided messages from queue. Args: messages (list): List of messages to be deleted Returns: None """ for message in messages: message.delete() return