From 9d190c26e378fc3b38f0db5697c6d78fcbc57dee Mon Sep 17 00:00:00 2001 From: daniel-a-nguyen Date: Tue, 12 Mar 2013 16:15:04 -0700 Subject: [PATCH] Refactored client code and test to consume XML Removed unused constants Change-Id: I7a965a498ab4607de145359697b7d5d976aaa4ff Fixes: bug #1154300 --- reddwarfclient/cli.py | 2 +- reddwarfclient/limits.py | 40 ++++++++++----------- reddwarfclient/xml.py | 3 +- tests/test_limits.py | 78 ++++++++++++++++++---------------------- 4 files changed, 56 insertions(+), 67 deletions(-) diff --git a/reddwarfclient/cli.py b/reddwarfclient/cli.py index 2daa5aa5..ef906a30 100644 --- a/reddwarfclient/cli.py +++ b/reddwarfclient/cli.py @@ -233,7 +233,7 @@ class LimitsCommands(common.AuthedCommandsBase): def list(self): """List the rate limits and absolute limits""" - self._pretty_list(self.dbaas.limits.index) + self._pretty_list(self.dbaas.limits.list) COMMANDS = {'auth': common.Auth, diff --git a/reddwarfclient/limits.py b/reddwarfclient/limits.py index ea4b446a..f2b8703a 100644 --- a/reddwarfclient/limits.py +++ b/reddwarfclient/limits.py @@ -16,39 +16,35 @@ from reddwarfclient import base import exceptions -RESPONSE_KEY = "limits" -ABSOLUTE = "absolute" -RATE = "rate" -LIMIT = 'limit' + +class Limit(base.Resource): + + def __repr__(self): + return "" % self.verb class Limits(base.ManagerWithFind): """ Manages :class `Limit` resources """ - resource_class = base.Resource + resource_class = Limit - def index(self): - """ - Retrieve the limits - """ - URL = "/limits" - resp, body = self.api.client.get(URL) + def __repr__(self): + return "" % id(self) + + def _list(self, url, response_key): + resp, body = self.api.client.get(url) if resp is None or resp.status != 200: raise exceptions.from_response(resp, body) if not body: - raise Exception("Call to " + URL + " did not return a body.") + raise Exception("Call to " + url + " did not return a body.") - absolute_rates = self._get_absolute_rates(body) - rates = self._get_rates(body) - return absolute_rates + rates + return [self.resource_class(self, res) for res in body[response_key]] - def _get_rates(self, body): - rates = body[RESPONSE_KEY][RATE][0].get(LIMIT, {}) - return [self.resource_class(self, res) for res in rates] - - def _get_absolute_rates(self, body): - absolute_rates = body[RESPONSE_KEY].get(ABSOLUTE, {}) - return [self.resource_class(self, absolute_rates)] + def list(self): + """ + Retrieve the limits + """ + return self._list("/limits", "limits") diff --git a/reddwarfclient/xml.py b/reddwarfclient/xml.py index 82a83457..6bfc9a75 100644 --- a/reddwarfclient/xml.py +++ b/reddwarfclient/xml.py @@ -18,7 +18,8 @@ LISTIFY = { "devices": [[]], "users": [[]], "versions": [[]], - "attachments": [[]] + "attachments": [[]], + "limits": [[]] } TYPE_MAP = { diff --git a/tests/test_limits.py b/tests/test_limits.py index ee26f74a..fda182cb 100644 --- a/tests/test_limits.py +++ b/tests/test_limits.py @@ -16,56 +16,48 @@ class LimitsTest(TestCase): def tearDown(self): super(LimitsTest, self).tearDown() - def test_index(self): - RESPONSE_KEY = "limits" - + def test_list(self): resp = Mock() resp.status = 200 - body = {RESPONSE_KEY: { - "absolute": { - "maxTotalInstances": 55, - "maxTotalVolumes": 100 - }, - 'rate': [ - {'limit': [ - { - "next-available": "2013-02-26T00:00:13Z", - "remaining": 100, - "unit": "MINUTE", - "value": 100, - "verb": "POST" - }, - { - "next-available": "2013-02-26T00:00:13Z", - "remaining": 100, - "unit": "MINUTE", - "value": 100, - "verb": "PUT" - }, - { - "next-available": "2013-02-26T00:00:13Z", - "remaining": 100, - "unit": "MINUTE", - "value": 100, - "verb": "DELETE" - }, - { - "next-available": "2013-02-26T00:00:13Z", - "remaining": 99, - "unit": "MINUTE", - "value": 100, - "verb": "GET" - } - ] - }]}} + body = {"limits": + [ + {'maxTotalInstances': 55, + 'verb': 'ABSOLUTE', + 'maxTotalVolumes': 100}, + {'regex': '.*', + 'nextAvailable': '2011-07-21T18:17:06Z', + 'uri': '*', + 'value': 10, + 'verb': 'POST', + 'remaining': 2, 'unit': 'MINUTE'}, + {'regex': '.*', + 'nextAvailable': '2011-07-21T18:17:06Z', + 'uri': '*', + 'value': 10, + 'verb': 'PUT', + 'remaining': 2, + 'unit': 'MINUTE'}, + {'regex': '.*', + 'nextAvailable': '2011-07-21T18:17:06Z', + 'uri': '*', + 'value': 10, + 'verb': 'DELETE', + 'remaining': 2, + 'unit': 'MINUTE'}, + {'regex': '.*', + 'nextAvailable': '2011-07-21T18:17:06Z', + 'uri': '*', + 'value': 10, + 'verb': 'GET', + 'remaining': 2, 'unit': 'MINUTE'}]} response = (resp, body) mock_get = Mock(return_value=response) self.limits.api.client.get = mock_get - self.assertIsNotNone(self.limits.index()) + self.assertIsNotNone(self.limits.list()) mock_get.assert_called_once_with("/limits") - def test_index_errors(self): + def test_list_errors(self): status_list = [400, 401, 403, 404, 408, 409, 413, 500, 501] for status_code in status_list: self._check_error_response(status_code) @@ -84,4 +76,4 @@ class LimitsTest(TestCase): mock_get = Mock(return_value=response) self.limits.api.client.get = mock_get - self.assertRaises(Exception, self.limits.index) + self.assertRaises(Exception, self.limits.list)