diff --git a/marconiclient/queues/v1/core.py b/marconiclient/queues/v1/core.py index cd657824..11b1e9bf 100644 --- a/marconiclient/queues/v1/core.py +++ b/marconiclient/queues/v1/core.py @@ -51,7 +51,8 @@ def _common_queue_ops(operation, transport, request, name, callback=None): """ request.operation = operation request.params['queue_name'] = name - return transport.send(request) + resp = transport.send(request) + return resp.deserialized_content def queue_create(transport, request, name, callback=None): @@ -72,9 +73,8 @@ def queue_exists(transport, request, name, callback=None): def queue_get_metadata(transport, request, name, callback=None): """Gets queue metadata.""" - resp = _common_queue_ops('queue_get_metadata', transport, + return _common_queue_ops('queue_get_metadata', transport, request, name, callback=callback) - return json.loads(resp.content) def queue_set_metadata(transport, request, name, metadata, callback=None): @@ -132,7 +132,7 @@ def message_list(transport, request, queue_name, callback=None, **kwargs): # `links` and `messages` return {'links': [], 'messages': []} - return json.loads(resp.content) + return resp.deserialized_content def message_post(transport, request, queue_name, messages, callback=None): @@ -157,7 +157,7 @@ def message_post(transport, request, queue_name, messages, callback=None): request.content = json.dumps(messages) resp = transport.send(request) - return json.loads(resp.content) + return resp.deserialized_content def message_get(transport, request, queue_name, message_id, callback=None): @@ -182,7 +182,7 @@ def message_get(transport, request, queue_name, message_id, callback=None): request.params['message_id'] = message_id resp = transport.send(request) - return json.loads(resp.content) + return resp.deserialized_content def message_get_many(transport, request, queue_name, messages, callback=None): @@ -207,7 +207,7 @@ def message_get_many(transport, request, queue_name, messages, callback=None): request.params['ids'] = messages resp = transport.send(request) - return json.loads(resp.content) + return resp.deserialized_content def message_delete(transport, request, queue_name, message_id, callback=None): @@ -231,4 +231,4 @@ def message_delete(transport, request, queue_name, message_id, callback=None): request.params['queue_name'] = queue_name request.params['message_id'] = message_id - return transport.send(request) + transport.send(request) diff --git a/marconiclient/transport/response.py b/marconiclient/transport/response.py index e74b6bf4..0aefbfa7 100644 --- a/marconiclient/transport/response.py +++ b/marconiclient/transport/response.py @@ -13,6 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +import json + class Response(object): """Common response class for Marconiclient. @@ -29,9 +31,17 @@ class Response(object): :type: dict """ - __slots__ = ('request', 'content', 'headers') + __slots__ = ('request', 'content', 'headers', '_deserialized') def __init__(self, request, content, headers=None): self.request = request self.content = content self.headers = headers or {} + + self._deserialized = None + + @property + def deserialized_content(self): + if not self._deserialized and self.content: + self._deserialized = json.loads(self.content) + return self._deserialized diff --git a/tests/unit/queues/v1/test_core.py b/tests/unit/queues/v1/test_core.py index 0923c779..ab38de22 100644 --- a/tests/unit/queues/v1/test_core.py +++ b/tests/unit/queues/v1/test_core.py @@ -33,7 +33,7 @@ class TestV1Core(base.TestBase): def test_queue_create(self): with mock.patch.object(self.transport, 'send', autospec=True) as send_method: - send_method.return_value = None + send_method.return_value = response.Response(None, None) req = request.Request() core.queue_create(self.transport, req, 'test') @@ -42,7 +42,7 @@ class TestV1Core(base.TestBase): def test_queue_delete(self): with mock.patch.object(self.transport, 'send', autospec=True) as send_method: - send_method.return_value = None + send_method.return_value = response.Response(None, None) req = request.Request() core.queue_delete(self.transport, req, 'test') @@ -51,7 +51,7 @@ class TestV1Core(base.TestBase): def test_queue_exists(self): with mock.patch.object(self.transport, 'send', autospec=True) as send_method: - send_method.return_value = None + send_method.return_value = response.Response(None, None) req = request.Request() ret = core.queue_exists(self.transport, req, 'test') @@ -82,7 +82,7 @@ class TestV1Core(base.TestBase): update_data = {'some': 'data'} with mock.patch.object(self.transport, 'send', autospec=True) as send_method: - send_method.return_value = None + send_method.return_value = response.Response(None, None) req = request.Request() core.queue_exists(self.transport, req, update_data, 'test')