add most of sqs features
This commit is contained in:
parent
67261d3125
commit
41890225e6
5 changed files with 305 additions and 3 deletions
|
|
@ -1,13 +1,35 @@
|
|||
from moto.core import BaseBackend
|
||||
from moto.core.utils import camelcase_to_underscores
|
||||
import base64
|
||||
import md5
|
||||
|
||||
from moto.core import BaseBackend
|
||||
from moto.core.utils import camelcase_to_underscores, get_random_message_id
|
||||
from .utils import generate_receipt_handle
|
||||
|
||||
|
||||
class Message(object):
|
||||
def __init__(self, message_id, body):
|
||||
self.id = message_id
|
||||
self._body = body
|
||||
self.receipt_handle = generate_receipt_handle()
|
||||
|
||||
@property
|
||||
def md5(self):
|
||||
body_md5 = md5.new()
|
||||
body_md5.update(self.body)
|
||||
return body_md5.hexdigest()
|
||||
|
||||
@property
|
||||
def body(self):
|
||||
# SQS Message bodies are base64 encoded by default
|
||||
return base64.b64encode(self._body)
|
||||
|
||||
class Queue(object):
|
||||
camelcase_attributes = ['VisibilityTimeout']
|
||||
camelcase_attributes = ['VisibilityTimeout', 'ApproximateNumberOfMessages']
|
||||
|
||||
def __init__(self, name, visibility_timeout):
|
||||
self.name = name
|
||||
self.visibility_timeout = visibility_timeout
|
||||
self.visibility_timeout = visibility_timeout or 30
|
||||
self.messages = []
|
||||
|
||||
@property
|
||||
def attributes(self):
|
||||
|
|
@ -16,6 +38,11 @@ class Queue(object):
|
|||
result[attribute] = getattr(self, camelcase_to_underscores(attribute))
|
||||
return result
|
||||
|
||||
@property
|
||||
def approximate_number_of_messages(self):
|
||||
return len(self.messages)
|
||||
|
||||
|
||||
class SQSBackend(BaseBackend):
|
||||
|
||||
def __init__(self):
|
||||
|
|
@ -43,4 +70,27 @@ class SQSBackend(BaseBackend):
|
|||
setattr(queue, key, value)
|
||||
return queue
|
||||
|
||||
def send_message(self, queue_name, message_body, delay_seconds=None):
|
||||
# TODO impemented delay_seconds
|
||||
queue = self.get_queue(queue_name)
|
||||
message_id = get_random_message_id()
|
||||
message = Message(message_id, message_body)
|
||||
queue.messages.append(message)
|
||||
return message
|
||||
|
||||
def receive_messages(self, queue_name, count):
|
||||
queue = self.get_queue(queue_name)
|
||||
result = []
|
||||
for index in range(count):
|
||||
if queue.messages:
|
||||
result.append(queue.messages.pop(0))
|
||||
return result
|
||||
|
||||
def delete_message(self, queue_name, receipt_handle):
|
||||
queue = self.get_queue(queue_name)
|
||||
new_messages = [message for message in queue.messages
|
||||
if message.receipt_handle != receipt_handle]
|
||||
queue.message = new_messages
|
||||
|
||||
|
||||
sqs_backend = SQSBackend()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue