Skip to content

Commit a83c1f0

Browse files
author
Tang Chen
committed
Network: Abstract get_body() out to be a private helper.
get_body() is needed in each network files to construct a dict to pass to sdk proxy. And it is also used by several functions in each file. So define it as a file level private helper function. The unified prototype should be: def _get_attrs(client_manager, parsed_args): 1. The name, in sdk, the parameter passed to proxy is named "attrs". And it is a private method. So let's call it _get_attrs(). 2. The parameters, besides parsed_args, when we deal with project and project_domain, we have to make use of identity_client. So let's pass in the client manager. Change-Id: Ib044ebd4ddedbcd805f46334a7fe99e4ebb5b249
1 parent ceb17e1 commit a83c1f0

3 files changed

Lines changed: 46 additions & 39 deletions

File tree

openstackclient/network/v2/network.py

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,33 @@ def _get_columns(item):
4747
return tuple(sorted(columns))
4848

4949

50+
def _get_attrs(client_manager, parsed_args):
51+
attrs = {}
52+
if parsed_args.name is not None:
53+
attrs['name'] = str(parsed_args.name)
54+
if parsed_args.admin_state is not None:
55+
attrs['admin_state_up'] = parsed_args.admin_state
56+
if parsed_args.shared is not None:
57+
attrs['shared'] = parsed_args.shared
58+
59+
# "network set" command doesn't support setting project.
60+
if 'project' in parsed_args and parsed_args.project is not None:
61+
identity_client = client_manager.identity
62+
project_id = identity_common.find_project(
63+
identity_client,
64+
parsed_args.project,
65+
parsed_args.project_domain,
66+
).id
67+
attrs['tenant_id'] = project_id
68+
69+
# "network set" command doesn't support setting availability zone hints.
70+
if 'availability_zone_hints' in parsed_args and \
71+
parsed_args.availability_zone_hints is not None:
72+
attrs['availability_zone_hints'] = parsed_args.availability_zone_hints
73+
74+
return attrs
75+
76+
5077
class CreateNetwork(command.ShowOne):
5178
"""Create new network"""
5279

@@ -105,31 +132,14 @@ def get_parser(self, prog_name):
105132

106133
def take_action(self, parsed_args):
107134
client = self.app.client_manager.network
108-
body = self.get_body(parsed_args)
109-
obj = client.create_network(**body)
135+
136+
attrs = _get_attrs(self.app.client_manager, parsed_args)
137+
obj = client.create_network(**attrs)
110138
columns = _get_columns(obj)
139+
111140
data = utils.get_item_properties(obj, columns, formatters=_formatters)
112141
return (columns, data)
113142

114-
def get_body(self, parsed_args):
115-
body = {'name': str(parsed_args.name),
116-
'admin_state_up': parsed_args.admin_state}
117-
if parsed_args.shared is not None:
118-
body['shared'] = parsed_args.shared
119-
if parsed_args.project is not None:
120-
identity_client = self.app.client_manager.identity
121-
project_id = identity_common.find_project(
122-
identity_client,
123-
parsed_args.project,
124-
parsed_args.project_domain,
125-
).id
126-
body['tenant_id'] = project_id
127-
if parsed_args.availability_zone_hints is not None:
128-
body['availability_zone_hints'] = \
129-
parsed_args.availability_zone_hints
130-
131-
return body
132-
133143

134144
class DeleteNetwork(command.Command):
135145
"""Delete network(s)"""
@@ -271,18 +281,13 @@ def take_action(self, parsed_args):
271281
client = self.app.client_manager.network
272282
obj = client.find_network(parsed_args.identifier, ignore_missing=False)
273283

274-
if parsed_args.name is not None:
275-
obj.name = str(parsed_args.name)
276-
if parsed_args.admin_state is not None:
277-
obj.admin_state_up = parsed_args.admin_state
278-
if parsed_args.shared is not None:
279-
obj.shared = parsed_args.shared
280-
281-
if not obj.is_dirty:
284+
attrs = _get_attrs(self.app.client_manager, parsed_args)
285+
if attrs == {}:
282286
msg = "Nothing specified to be set"
283287
raise exceptions.CommandError(msg)
284288

285-
client.update_network(obj)
289+
client.update_network(obj, **attrs)
290+
return
286291

287292

288293
class ShowNetwork(command.ShowOne):

openstackclient/tests/network/v2/fakes.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ def create_one_network(attrs={}, methods={}):
9696
'subnets': ['a', 'b'],
9797
'provider_network_type': 'vlan',
9898
'router_external': True,
99-
'is_dirty': True,
10099
'availability_zones': [],
101100
'availability_zone_hints': [],
102101
}

openstackclient/tests/network/v2/test_network.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,6 @@ def setUp(self):
440440
self.cmd = network.SetNetwork(self.app, self.namespace)
441441

442442
def test_set_this(self):
443-
self._network.is_dirty = True
444-
445443
arglist = [
446444
self._network.name,
447445
'--enable',
@@ -458,12 +456,15 @@ def test_set_this(self):
458456
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
459457
result = self.cmd.take_action(parsed_args)
460458

461-
self.network.update_network.assert_called_with(self._network)
459+
attrs = {
460+
'name': 'noob',
461+
'admin_state_up': True,
462+
'shared': True,
463+
}
464+
self.network.update_network.assert_called_with(self._network, **attrs)
462465
self.assertIsNone(result)
463466

464467
def test_set_that(self):
465-
self._network.is_dirty = True
466-
467468
arglist = [
468469
self._network.name,
469470
'--disable',
@@ -478,12 +479,14 @@ def test_set_that(self):
478479
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
479480
result = self.cmd.take_action(parsed_args)
480481

481-
self.network.update_network.assert_called_with(self._network)
482+
attrs = {
483+
'admin_state_up': False,
484+
'shared': False,
485+
}
486+
self.network.update_network.assert_called_with(self._network, **attrs)
482487
self.assertIsNone(result)
483488

484489
def test_set_nothing(self):
485-
self._network.is_dirty = False
486-
487490
arglist = [self._network.name, ]
488491
verifylist = [('identifier', self._network.name), ]
489492

0 commit comments

Comments
 (0)