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', self.client_uuid = self.conf.get('client_uuid',
uuid.uuid4().hex) 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) @decorators.version(min_version=2)
def subscription(self, queue_name, **kwargs): def subscription(self, queue_name, **kwargs):
"""Returns a subscription instance """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, return core.signed_url_create(trans, req, self._name, paths=paths,
ttl_seconds=ttl_seconds, methods=methods) 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): def create_object(parent):
return lambda args: Queue(parent, args["name"], auto_create=False) return lambda args: Queue(parent, args["name"], auto_create=False)

View File

@ -62,4 +62,9 @@ class QueuesV1MessageUnitTest(base.QueuesTestBase):
class QueuesV2MessageUnitTest(QueuesV1MessageUnitTest): 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 import client
from zaqarclient.queues.v1 import iterator from zaqarclient.queues.v1 import iterator
from zaqarclient.queues.v1 import message from zaqarclient.queues.v1 import message
from zaqarclient.queues.v2 import subscription
from zaqarclient.tests.queues import base from zaqarclient.tests.queues import base
from zaqarclient.transport import response from zaqarclient.transport import response
@ -465,7 +466,36 @@ class QueuesV1_1QueueFunctionalTest(QueuesV1QueueFunctionalTest):
class QueuesV2QueueUnitTest(QueuesV1_1QueueUnitTest): 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): class QueuesV2QueueFunctionalTest(QueuesV1_1QueueFunctionalTest):
@ -490,3 +520,18 @@ class QueuesV2QueueFunctionalTest(QueuesV1_1QueueFunctionalTest):
queue = signed_client.queue('test_queue') queue = signed_client.queue('test_queue')
[message] = list(queue.messages()) [message] = list(queue.messages())
self.assertEqual('Post It!', message.body) 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)))