Use queue_creation to send queue's metadata

Since v1.1, the queue metadata is part of the queue endpoint. It has to
be set/updated by using the queue endpoint. The old set_metadata and
get_metadata endpoitns have been removed.

Partially-Implements blueprint: api-v1.1

Change-Id: I7b5b50529c4591701c62a1fa92dddbae9add6265
This commit is contained in:
Flavio Percoco 2014-09-15 16:03:17 +02:00
parent 75b8ca3b71
commit 9336a4d59e
5 changed files with 59 additions and 6 deletions

View File

@ -242,6 +242,7 @@ class V1(api.Api):
class V1_1(V1):
label = 'v1.1'
schema = V1.schema.copy()
V1_1.schema.update({
@ -255,3 +256,6 @@ V1_1.schema.update({
}
},
})
del V1_1.schema['queue_get_metadata']
del V1_1.schema['queue_set_metadata']

View File

@ -56,10 +56,30 @@ def _common_queue_ops(operation, transport, request, name, callback=None):
return resp.deserialized_content
def queue_create(transport, request, name, callback=None):
"""Creates a queue."""
return _common_queue_ops('queue_create', transport,
request, name, callback=callback)
def queue_create(transport, request, name,
metadata=None, callback=None):
"""Creates a queue
:param transport: Transport instance to use
:type transport: `transport.base.Transport`
:param request: Request instance ready to be sent.
:type request: `transport.request.Request`
:param name: Queue reference name.
:type name: `six.text_type`
:param metadata: Queue's metadata object. (>=v1.1)
:type metadata: `dict`
:param callback: Optional callable to use as callback.
If specified, this request will be sent asynchronously.
(IGNORED UNTIL ASYNC SUPPORT IS COMPLETE)
:type callback: Callable object.
"""
request.operation = 'queue_create'
request.params['queue_name'] = name
request.content = metadata and json.dumps(metadata)
resp = transport.send(request)
return resp.deserialized_content
def queue_exists(transport, request, name, callback=None):

View File

@ -67,7 +67,10 @@ class Queue(object):
# NOTE(jeffrey4l): Ensure that metadata is cleared when the new_meta
# is a empty dict.
if new_meta is not None:
core.queue_set_metadata(trans, req, self._name, new_meta)
if req.api.is_supported('queue_set_metadata'):
core.queue_set_metadata(trans, req, self._name, new_meta)
else:
core.queue_create(trans, req, self._name, metadata=new_meta)
self._metadata = new_meta
# TODO(flaper87): Cache with timeout

View File

@ -33,9 +33,25 @@ class QueuesV1QueueUnitTest(base.QueuesTestBase):
resp = response.Response(None, json.dumps(test_metadata))
send_method.return_value = resp
metadata = self.queue.metadata()
metadata = self.queue.metadata(test_metadata)
self.assertEqual(metadata, test_metadata)
def test_queue_metadata_update(self):
test_metadata = {'type': 'Bank Accounts'}
new_meta = {'flavor': 'test'}
with mock.patch.object(self.transport, 'send',
autospec=True) as send_method:
resp = response.Response(None, json.dumps(test_metadata))
send_method.return_value = resp
metadata = self.queue.metadata(test_metadata)
self.assertEqual(metadata, test_metadata)
metadata = self.queue.metadata(new_meta)
self.assertEqual(metadata, new_meta)
def test_queue_create(self):
with mock.patch.object(self.transport, 'send',
autospec=True) as send_method:

View File

@ -25,6 +25,16 @@ class Api(object):
label = None
validators = {}
def is_supported(self, operation):
"""Returns `True` if `operation` is supported
:param operation: The operation to check on.
:type operation: `six.text_type`
:rtype: bool
"""
return operation in self.schema
def get_schema(self, operation):
"""Returns the schema for an operation