Add subscriptions for queue object

A new method 'subscriptions' is added for queue object in this
patch, so that the API user can list subscriptions of a queue
easily.

Change-Id: Ia4a3da6a1b2165ba623c7101ecb4614245520f1b
This commit is contained in:
Fei Long Wang 2016-01-19 15:31:32 +13:00
parent 71e43e98f1
commit 47f1bfcb61
4 changed files with 69 additions and 2 deletions

View File

@ -50,6 +50,17 @@ class Client(client.Client):
self.client_uuid = self.conf.get('client_uuid',
uuid.uuid4().hex)
def queue(self, ref, **kwargs):
"""Returns a queue instance
:param ref: Queue's reference id.
:type ref: `six.text_type`
:returns: A queue instance
:rtype: `queues.Queue`
"""
return queues.Queue(self, ref, **kwargs)
@decorators.version(min_version=2)
def subscription(self, queue_name, **kwargs):
"""Returns a subscription instance

View File

@ -27,6 +27,12 @@ class Queue(queues.Queue):
return core.signed_url_create(trans, req, self._name, paths=paths,
ttl_seconds=ttl_seconds, methods=methods)
def subscriptions(self, detailed=False, marker=None, limit=20):
return self.client.subscriptions(queue_name=self._name,
detailed=detailed,
marker=marker,
limit=limit)
def create_object(parent):
return lambda args: Queue(parent, args["name"], auto_create=False)

View File

@ -62,4 +62,9 @@ class QueuesV1MessageUnitTest(base.QueuesTestBase):
class QueuesV2MessageUnitTest(QueuesV1MessageUnitTest):
pass
def test_message_delete_with_claim(self):
pass
def test_message_delete(self):
pass

View File

@ -20,6 +20,7 @@ from zaqarclient import errors
from zaqarclient.queues import client
from zaqarclient.queues.v1 import iterator
from zaqarclient.queues.v1 import message
from zaqarclient.queues.v2 import subscription
from zaqarclient.tests.queues import base
from zaqarclient.transport import response
@ -465,7 +466,36 @@ class QueuesV1_1QueueFunctionalTest(QueuesV1QueueFunctionalTest):
class QueuesV2QueueUnitTest(QueuesV1_1QueueUnitTest):
pass
def test_message_get(self):
pass
def test_queue_subscriptions(self):
result = {
"subscriptions": [{
"source": 'test',
"id": "1",
"subscriber": 'http://trigger.me',
"ttl": 3600,
"options": {}},
{
"source": 'test',
"id": "2",
"subscriber": 'http://trigger.you',
"ttl": 7200,
"options": {}}]
}
with mock.patch.object(self.transport, 'send',
autospec=True) as send_method:
resp = response.Response(None, json.dumps(result))
send_method.return_value = resp
subscriptions = self.queue.subscriptions()
subscriber_list = [s.subscriber for s in list(subscriptions)]
self.assertIn('http://trigger.me', subscriber_list)
self.assertIn('http://trigger.you', subscriber_list)
class QueuesV2QueueFunctionalTest(QueuesV1_1QueueFunctionalTest):
@ -490,3 +520,18 @@ class QueuesV2QueueFunctionalTest(QueuesV1_1QueueFunctionalTest):
queue = signed_client.queue('test_queue')
[message] = list(queue.messages())
self.assertEqual('Post It!', message.body)
def test_queue_subscriptions(self):
queue_name = 'test_queue'
queue = self.client.queue(queue_name, force_create=True)
self.addCleanup(queue.delete)
queue._get_transport = mock.Mock(return_value=self.transport)
subscription.Subscription(self.client, queue_name,
subscriber='http://trigger.me')
subscription.Subscription(self.client, queue_name,
subscriber='http://trigger.you')
get_subscriptions = queue.subscriptions()
self.assertTrue(isinstance(get_subscriptions, iterator._Iterator))
self.assertEqual(2, len(list(get_subscriptions)))