diff options
-rw-r--r-- | README.rst | 8 | ||||
-rw-r--r-- | ceilometerclient/tests/unit/v2/test_shell.py | 22 | ||||
-rw-r--r-- | ceilometerclient/v2/client.py | 4 | ||||
-rw-r--r-- | ceilometerclient/v2/meters.py | 11 | ||||
-rw-r--r-- | ceilometerclient/v2/shell.py | 6 | ||||
-rw-r--r-- | requirements.txt | 4 | ||||
-rw-r--r-- | test-requirements.txt | 2 |
7 files changed, 48 insertions, 9 deletions
@@ -1,6 +1,14 @@ Python bindings to the Ceilometer API ===================================== +.. image:: https://img.shields.io/pypi/v/python-ceilometerclient.svg + :target: https://pypi.python.org/pypi/python-ceilometerclient/ + :alt: Latest Version + +.. image:: https://img.shields.io/pypi/dm/python-ceilometerclient.svg + :target: https://pypi.python.org/pypi/python-ceilometerclient/ + :alt: Downloads + This is a client library for Ceilometer built on the Ceilometer API. It provides a Python API (the ``ceilometerclient`` module) and a command-line tool (``ceilometer``). diff --git a/ceilometerclient/tests/unit/v2/test_shell.py b/ceilometerclient/tests/unit/v2/test_shell.py index 053936b..8f518b2 100644 --- a/ceilometerclient/tests/unit/v2/test_shell.py +++ b/ceilometerclient/tests/unit/v2/test_shell.py @@ -1846,6 +1846,7 @@ class ShellMeterListCommandTest(utils.BaseTestCase): self.cc.meters.list = mock.Mock() self.args = mock.MagicMock() self.args.limit = None + self.args.unique = False @mock.patch('sys.stdout', new=six.StringIO()) def test_meter_list(self): @@ -1853,7 +1854,26 @@ class ShellMeterListCommandTest(utils.BaseTestCase): self.cc.meters.list.return_value = [meter] ceilometer_shell.do_meter_list(self.cc, self.args) - self.cc.meters.list.assert_called_once_with(q=[], limit=None) + self.cc.meters.list.assert_called_once_with(q=[], limit=None, + unique=False) + + self.assertEqual('''\ ++-------+-------+-------+-------------+---------+------------+ +| Name | Type | Unit | Resource ID | User ID | Project ID | ++-------+-------+-------+-------------+---------+------------+ +| image | gauge | image | resource-id | | project | ++-------+-------+-------+-------------+---------+------------+ +''', sys.stdout.getvalue()) + + @mock.patch('sys.stdout', new=six.StringIO()) + def test_unique_meter_list(self): + self.args.unique = True + meter = meters.Meter(mock.Mock(), self.METER) + self.cc.meters.list.return_value = [meter] + + ceilometer_shell.do_meter_list(self.cc, self.args) + self.cc.meters.list.assert_called_once_with(q=[], limit=None, + unique=True) self.assertEqual('''\ +-------+-------+-------+-------------+---------+------------+ diff --git a/ceilometerclient/v2/client.py b/ceilometerclient/v2/client.py index f613cec..3aaf9b1 100644 --- a/ceilometerclient/v2/client.py +++ b/ceilometerclient/v2/client.py @@ -110,8 +110,8 @@ class Client(object): kwargs['auth_plugin'] = ceiloclient.get_auth_plugin( aodh_endpoint, **kwargs) else: - # Users may just provided ceilometer endpoint and token, and no - # auth_url, in this case, we need 'aodh_endpoint' also + # Users may just provide ceilometer endpoint and token, and no + # auth_url, in this case, we need 'aodh_endpoint' also to be # provided, otherwise we cannot get aodh endpoint from # keystone, and assume aodh is unavailable. return None diff --git a/ceilometerclient/v2/meters.py b/ceilometerclient/v2/meters.py index ddb2134..015c04c 100644 --- a/ceilometerclient/v2/meters.py +++ b/ceilometerclient/v2/meters.py @@ -25,7 +25,14 @@ class Meter(base.Resource): class MeterManager(base.Manager): resource_class = Meter - def list(self, q=None, limit=None): + def list(self, q=None, limit=None, unique=False): path = '/v2/meters' - params = ['limit=%s' % limit] if limit else None + params = [] + + if limit: + params.append('limit=%s' % limit) + + if unique: + params.append('unique=%s' % str(unique)) + return self._list(options.build_url(path, q, params)) diff --git a/ceilometerclient/v2/shell.py b/ceilometerclient/v2/shell.py index 4395ecd..09c2e95 100644 --- a/ceilometerclient/v2/shell.py +++ b/ceilometerclient/v2/shell.py @@ -266,10 +266,14 @@ def do_sample_create(cc, args={}): 'but if supplied must be string, integer, float, or boolean.') @utils.arg('-l', '--limit', metavar='<NUMBER>', help='Maximum number of meters to return. %s' % DEFAULT_API_LIMIT) +@utils.arg('--unique', dest='unique', + metavar='{True|False}', + type=lambda v: strutils.bool_from_string(v, True), + help='Retrieves unique list of meters.') def do_meter_list(cc, args={}): """List the user's meters.""" meters = cc.meters.list(q=options.cli_to_array(args.query), - limit=args.limit) + limit=args.limit, unique=args.unique) field_labels = ['Name', 'Type', 'Unit', 'Resource ID', 'User ID', 'Project ID'] fields = ['name', 'type', 'unit', 'resource_id', 'user_id', diff --git a/requirements.txt b/requirements.txt index cc0c4e8..0e2259d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,11 +4,11 @@ pbr>=1.6 # Apache-2.0 iso8601>=0.1.9 # MIT keystoneauth1>=2.1.0 # Apache-2.0 -oslo.i18n>=1.5.0 # Apache-2.0 +oslo.i18n>=2.1.0 # Apache-2.0 oslo.serialization>=1.10.0 # Apache-2.0 oslo.utils>=3.4.0 # Apache-2.0 PrettyTable<0.8,>=0.7 # BSD -python-keystoneclient!=1.8.0,>=1.6.0 # Apache-2.0 +python-keystoneclient!=1.8.0,!=2.1.0,>=1.6.0 # Apache-2.0 requests!=2.9.0,>=2.8.1 # Apache-2.0 six>=1.9.0 # MIT stevedore>=1.5.0 # Apache-2.0 diff --git a/test-requirements.txt b/test-requirements.txt index 8641064..95db34b 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -10,6 +10,6 @@ mock>=1.2 # BSD oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0 python-subunit>=0.0.18 # Apache-2.0/BSD sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 # BSD -tempest-lib>=0.13.0 # Apache-2.0 +tempest-lib>=0.14.0 # Apache-2.0 testrepository>=0.0.18 # Apache-2.0/BSD testtools>=1.4.0 # MIT |