Skip to content

Commit 6a61cb2

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add NetworkAndCompute Lister and ShowOne classes"
2 parents 43065be + 04e45bb commit 6a61cb2

2 files changed

Lines changed: 193 additions & 27 deletions

File tree

openstackclient/network/common.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,105 @@ def take_action_network(self, client, parsed_args):
6060
def take_action_compute(self, client, parsed_args):
6161
"""Override to do something useful."""
6262
pass
63+
64+
65+
@six.add_metaclass(abc.ABCMeta)
66+
class NetworkAndComputeLister(command.Lister):
67+
"""Network and Compute Lister
68+
69+
Lister class for commands that support implementation via
70+
the network or compute endpoint. Such commands have different
71+
implementations for take_action() and may even have different
72+
arguments.
73+
"""
74+
75+
def take_action(self, parsed_args):
76+
if self.app.client_manager.is_network_endpoint_enabled():
77+
return self.take_action_network(self.app.client_manager.network,
78+
parsed_args)
79+
else:
80+
return self.take_action_compute(self.app.client_manager.compute,
81+
parsed_args)
82+
83+
def get_parser(self, prog_name):
84+
self.log.debug('get_parser(%s)', prog_name)
85+
parser = super(NetworkAndComputeLister, self).get_parser(prog_name)
86+
parser = self.update_parser_common(parser)
87+
self.log.debug('common parser: %s', parser)
88+
if self.app.client_manager.is_network_endpoint_enabled():
89+
return self.update_parser_network(parser)
90+
else:
91+
return self.update_parser_compute(parser)
92+
93+
def update_parser_common(self, parser):
94+
"""Default is no updates to parser."""
95+
return parser
96+
97+
def update_parser_network(self, parser):
98+
"""Default is no updates to parser."""
99+
return parser
100+
101+
def update_parser_compute(self, parser):
102+
"""Default is no updates to parser."""
103+
return parser
104+
105+
@abc.abstractmethod
106+
def take_action_network(self, client, parsed_args):
107+
"""Override to do something useful."""
108+
pass
109+
110+
@abc.abstractmethod
111+
def take_action_compute(self, client, parsed_args):
112+
"""Override to do something useful."""
113+
pass
114+
115+
116+
@six.add_metaclass(abc.ABCMeta)
117+
class NetworkAndComputeShowOne(command.ShowOne):
118+
"""Network and Compute ShowOne
119+
120+
ShowOne class for commands that support implementation via
121+
the network or compute endpoint. Such commands have different
122+
implementations for take_action() and may even have different
123+
arguments.
124+
"""
125+
126+
def take_action(self, parsed_args):
127+
if self.app.client_manager.is_network_endpoint_enabled():
128+
return self.take_action_network(self.app.client_manager.network,
129+
parsed_args)
130+
else:
131+
return self.take_action_compute(self.app.client_manager.compute,
132+
parsed_args)
133+
134+
def get_parser(self, prog_name):
135+
self.log.debug('get_parser(%s)', prog_name)
136+
parser = super(NetworkAndComputeShowOne, self).get_parser(prog_name)
137+
parser = self.update_parser_common(parser)
138+
self.log.debug('common parser: %s', parser)
139+
if self.app.client_manager.is_network_endpoint_enabled():
140+
return self.update_parser_network(parser)
141+
else:
142+
return self.update_parser_compute(parser)
143+
144+
def update_parser_common(self, parser):
145+
"""Default is no updates to parser."""
146+
return parser
147+
148+
def update_parser_network(self, parser):
149+
"""Default is no updates to parser."""
150+
return parser
151+
152+
def update_parser_compute(self, parser):
153+
"""Default is no updates to parser."""
154+
return parser
155+
156+
@abc.abstractmethod
157+
def take_action_network(self, client, parsed_args):
158+
"""Override to do something useful."""
159+
pass
160+
161+
@abc.abstractmethod
162+
def take_action_compute(self, client, parsed_args):
163+
"""Override to do something useful."""
164+
pass

openstackclient/tests/network/test_common.py

Lines changed: 91 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,57 +18,103 @@
1818
from openstackclient.tests import utils
1919

2020

21+
def _add_common_argument(parser):
22+
parser.add_argument(
23+
'common',
24+
metavar='<common>',
25+
help='Common argument',
26+
)
27+
return parser
28+
29+
30+
def _add_network_argument(parser):
31+
parser.add_argument(
32+
'network',
33+
metavar='<network>',
34+
help='Network argument',
35+
)
36+
return parser
37+
38+
39+
def _add_compute_argument(parser):
40+
parser.add_argument(
41+
'compute',
42+
metavar='<compute>',
43+
help='Compute argument',
44+
)
45+
return parser
46+
47+
2148
class FakeNetworkAndComputeCommand(common.NetworkAndComputeCommand):
2249
def update_parser_common(self, parser):
23-
parser.add_argument(
24-
'common',
25-
metavar='<common>',
26-
help='Common argument',
27-
)
28-
return parser
50+
return _add_common_argument(parser)
2951

3052
def update_parser_network(self, parser):
31-
parser.add_argument(
32-
'network',
33-
metavar='<network>',
34-
help='Network argument',
35-
)
36-
return parser
53+
return _add_network_argument(parser)
3754

3855
def update_parser_compute(self, parser):
39-
parser.add_argument(
40-
'compute',
41-
metavar='<compute>',
42-
help='Compute argument',
43-
)
44-
return parser
56+
return _add_compute_argument(parser)
4557

4658
def take_action_network(self, client, parsed_args):
47-
client.network_action(parsed_args)
48-
return 'take_action_network'
59+
return client.network_action(parsed_args)
4960

5061
def take_action_compute(self, client, parsed_args):
51-
client.compute_action(parsed_args)
52-
return 'take_action_compute'
62+
return client.compute_action(parsed_args)
63+
5364

65+
class FakeNetworkAndComputeLister(common.NetworkAndComputeLister):
66+
def update_parser_common(self, parser):
67+
return _add_common_argument(parser)
68+
69+
def update_parser_network(self, parser):
70+
return _add_network_argument(parser)
5471

55-
class TestNetworkAndComputeCommand(utils.TestCommand):
72+
def update_parser_compute(self, parser):
73+
return _add_compute_argument(parser)
74+
75+
def take_action_network(self, client, parsed_args):
76+
return client.network_action(parsed_args)
77+
78+
def take_action_compute(self, client, parsed_args):
79+
return client.compute_action(parsed_args)
80+
81+
82+
class FakeNetworkAndComputeShowOne(common.NetworkAndComputeShowOne):
83+
def update_parser_common(self, parser):
84+
return _add_common_argument(parser)
85+
86+
def update_parser_network(self, parser):
87+
return _add_network_argument(parser)
88+
89+
def update_parser_compute(self, parser):
90+
return _add_compute_argument(parser)
91+
92+
def take_action_network(self, client, parsed_args):
93+
return client.network_action(parsed_args)
94+
95+
def take_action_compute(self, client, parsed_args):
96+
return client.compute_action(parsed_args)
97+
98+
99+
class TestNetworkAndCompute(utils.TestCommand):
56100
def setUp(self):
57-
super(TestNetworkAndComputeCommand, self).setUp()
101+
super(TestNetworkAndCompute, self).setUp()
58102

59103
self.namespace = argparse.Namespace()
60104

61105
# Create network client mocks.
62106
self.app.client_manager.network = mock.Mock()
63107
self.network = self.app.client_manager.network
64-
self.network.network_action = mock.Mock(return_value=None)
108+
self.network.network_action = mock.Mock(
109+
return_value='take_action_network')
65110

66111
# Create compute client mocks.
67112
self.app.client_manager.compute = mock.Mock()
68113
self.compute = self.app.client_manager.compute
69-
self.compute.compute_action = mock.Mock(return_value=None)
114+
self.compute.compute_action = mock.Mock(
115+
return_value='take_action_compute')
70116

71-
# Get the command object to test
117+
# Subclasses can override the command object to test.
72118
self.cmd = FakeNetworkAndComputeCommand(self.app, self.namespace)
73119

74120
def test_take_action_network(self):
@@ -101,3 +147,21 @@ def test_take_action_compute(self):
101147
result = self.cmd.take_action(parsed_args)
102148
self.compute.compute_action.assert_called_with(parsed_args)
103149
self.assertEqual('take_action_compute', result)
150+
151+
152+
class TestNetworkAndComputeCommand(TestNetworkAndCompute):
153+
def setUp(self):
154+
super(TestNetworkAndComputeCommand, self).setUp()
155+
self.cmd = FakeNetworkAndComputeCommand(self.app, self.namespace)
156+
157+
158+
class TestNetworkAndComputeLister(TestNetworkAndCompute):
159+
def setUp(self):
160+
super(TestNetworkAndComputeLister, self).setUp()
161+
self.cmd = FakeNetworkAndComputeLister(self.app, self.namespace)
162+
163+
164+
class TestNetworkAndComputeShowOne(TestNetworkAndCompute):
165+
def setUp(self):
166+
super(TestNetworkAndComputeShowOne, self).setUp()
167+
self.cmd = FakeNetworkAndComputeShowOne(self.app, self.namespace)

0 commit comments

Comments
 (0)