From 60cd259a7a3f73a5be47e4f97d13f73ca4a03a80 Mon Sep 17 00:00:00 2001 From: liusheng Date: Mon, 6 Mar 2017 16:36:19 +0800 Subject: [PATCH] Add "event trait list" command This command allow users to list the trait values of an specified event type and trait name. Change-Id: Ia8b27af7ee6c8533855fbd4937511e64e38b6494 --- pankoclient/osc/v2/events.py | 27 ++++++++++++++++++++ pankoclient/tests/unit/fakes.py | 1 + pankoclient/tests/unit/osc/v2/test_events.py | 22 ++++++++++++++++ pankoclient/v2/client.py | 1 + pankoclient/v2/events.py | 12 +++++++++ setup.cfg | 1 + 6 files changed, 64 insertions(+) diff --git a/pankoclient/osc/v2/events.py b/pankoclient/osc/v2/events.py index c9e2483..46c4a79 100644 --- a/pankoclient/osc/v2/events.py +++ b/pankoclient/osc/v2/events.py @@ -19,6 +19,7 @@ import copy import json from osc_lib.command import command +from osc_lib import utils class EventList(command.Lister): @@ -104,3 +105,29 @@ class EventTypeList(command.Lister): ac = self.app.client_manager.event event_types = ac.event_type.list() return ('Event Type',), ((t,)for t in event_types) + + +class EventTraitList(command.Lister): + """List event traits of a specified event type and trait name""" + + def get_parser(self, prog_name): + parser = super(EventTraitList, self).get_parser(prog_name) + parser.add_argument( + 'type_name', + metavar='', + help='Type of the event for which traits will listed.' + ) + parser.add_argument( + 'trait_name', + metavar='', + help='The name of the trait to list.' + ) + return parser + + def take_action(self, parsed_args): + ac = self.app.client_manager.event + event_traits = ac.event_trait.list( + parsed_args.type_name, parsed_args.trait_name) + columns = ('name', 'value', 'type') + return (columns, + (utils.get_item_properties(t, columns) for t in event_traits)) diff --git a/pankoclient/tests/unit/fakes.py b/pankoclient/tests/unit/fakes.py index cad61a1..5811eb5 100644 --- a/pankoclient/tests/unit/fakes.py +++ b/pankoclient/tests/unit/fakes.py @@ -58,6 +58,7 @@ class FakeTestEventV2Client(object): self.capabilities = capabilities.CapabilitiesManager( self.fake_http_client) self.event_type = events.EventTypeManager(self.fake_http_client) + self.event_trait = events.EventTraitsManager(self.fake_http_client) class FakeHTTPClient(object): diff --git a/pankoclient/tests/unit/osc/v2/test_events.py b/pankoclient/tests/unit/osc/v2/test_events.py index 7c72762..515332c 100644 --- a/pankoclient/tests/unit/osc/v2/test_events.py +++ b/pankoclient/tests/unit/osc/v2/test_events.py @@ -32,3 +32,25 @@ class TestEventTypeList(test_base.TestEventV2): parsed_args = self.check_parser(self.cmd, arglist, verifylist) self.cmd.take_action(parsed_args) mock_list.assert_called_once_with('/v2/event_types/') + + +@mock.patch.object(events_mgr.EventTraitsManager, '_list') +class TestEventTraitsList(test_base.TestEventV2): + def setUp(self): + super(TestEventTraitsList, self).setUp() + self.cmd = events.EventTraitList(self.app, None) + + def test_event_traits_list(self, mock_list): + arglist = [ + 'event_type1', + 'trait_name1' + ] + verifylist = [ + ('type_name', 'event_type1'), + ('trait_name', 'trait_name1'), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + self.cmd.take_action(parsed_args) + expected_url = '/v2/event_types/%s/traits/%s' % ( + parsed_args.type_name, parsed_args.trait_name) + mock_list.assert_called_once_with(expected_url) diff --git a/pankoclient/v2/client.py b/pankoclient/v2/client.py index 6056901..aaa870b 100644 --- a/pankoclient/v2/client.py +++ b/pankoclient/v2/client.py @@ -27,3 +27,4 @@ class Client(object): self.capabilities = capabilities.CapabilitiesManager(self.http_client) self.event = events.EventManager(self.http_client) self.event_type = events.EventTypeManager(self.http_client) + self.event_trait = events.EventTraitsManager(self.http_client) diff --git a/pankoclient/v2/events.py b/pankoclient/v2/events.py index 5fa801b..25d0024 100644 --- a/pankoclient/v2/events.py +++ b/pankoclient/v2/events.py @@ -23,6 +23,10 @@ class EventType(base.Resource): pass +class EventTrait(base.Resource): + pass + + class EventManager(base.ManagerWithFind): resource_class = Event @@ -63,3 +67,11 @@ class EventTypeManager(base.ManagerWithFind): def list(self): url = '/v2/event_types/' return self._list(url) + + +class EventTraitsManager(base.ManagerWithFind): + resource_class = EventTrait + + def list(self, event_type, trait_name): + url = '/v2/event_types/%s/traits/%s' % (event_type, trait_name) + return self._list(url) diff --git a/setup.cfg b/setup.cfg index 6f0c1eb..6b6f584 100644 --- a/setup.cfg +++ b/setup.cfg @@ -34,6 +34,7 @@ openstack.event.v2 = event list = pankoclient.osc.v2.events:EventList event show = pankoclient.osc.v2.events:EventShow event type list = pankoclient.osc.v2.events:EventTypeList + event trait list = pankoclient.osc.v2.events:EventTraitList [build_sphinx] source-dir = doc/source