python-openstackclient 7.3.0__py3-none-any.whl → 7.4.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -88,10 +88,10 @@ class CreateCredential(command.ShowOne):
88
88
  else:
89
89
  project = None
90
90
  credential = identity_client.create_credential(
91
- user=user_id,
91
+ user_id=user_id,
92
92
  type=parsed_args.type,
93
93
  blob=parsed_args.data,
94
- project=project,
94
+ project_id=project,
95
95
  )
96
96
 
97
97
  return _format_credential(credential)
@@ -65,8 +65,9 @@ _formatters = {
65
65
  'fixed_ips': format_columns.ListDictColumn,
66
66
  'security_group_ids': format_columns.ListColumn,
67
67
  'tags': format_columns.ListColumn,
68
- 'trunk_details': SubPortColumn,
69
68
  }
69
+ _list_formatters = copy.deepcopy(_formatters)
70
+ _list_formatters.update({'trunk_details': SubPortColumn})
70
71
 
71
72
 
72
73
  def _get_columns(item):
@@ -537,12 +538,12 @@ class CreatePort(command.ShowOne, common.NeutronCommandWithExtraArgs):
537
538
  uplink_status_group.add_argument(
538
539
  '--enable-uplink-status-propagation',
539
540
  action='store_true',
540
- help=_("Enable uplink status propagate"),
541
+ help=_("Enable uplink status propagation (default)"),
541
542
  )
542
543
  uplink_status_group.add_argument(
543
544
  '--disable-uplink-status-propagation',
544
545
  action='store_true',
545
- help=_("Disable uplink status propagate (default)"),
546
+ help=_("Disable uplink status propagation"),
546
547
  )
547
548
  parser.add_argument(
548
549
  '--project',
@@ -952,7 +953,7 @@ class ListPort(command.Lister):
952
953
  utils.get_item_properties(
953
954
  s,
954
955
  attrs,
955
- formatters=_formatters,
956
+ formatters=_list_formatters,
956
957
  )
957
958
  for s in data
958
959
  ),
@@ -1102,6 +1103,18 @@ class SetPort(common.NeutronCommandWithExtraArgs):
1102
1103
  "(requires data plane status extension)"
1103
1104
  ),
1104
1105
  )
1106
+ uplink_status_group = parser.add_mutually_exclusive_group()
1107
+ uplink_status_group.add_argument(
1108
+ '--enable-uplink-status-propagation',
1109
+ action='store_true',
1110
+ help=_('Enable uplink status propagation'),
1111
+ )
1112
+ uplink_status_group.add_argument(
1113
+ '--disable-uplink-status-propagation',
1114
+ action='store_true',
1115
+ help=_('Disable uplink status propagation'),
1116
+ )
1117
+
1105
1118
  _tag.add_tag_option_to_parser_for_set(parser, _('port'))
1106
1119
 
1107
1120
  return parser
@@ -237,6 +237,9 @@ def _get_attrs(client_manager, parsed_args):
237
237
  if 'flavor_id' in parsed_args and parsed_args.flavor_id is not None:
238
238
  flavor = n_client.find_flavor(parsed_args.flavor_id)
239
239
  attrs['flavor_id'] = flavor.id
240
+ elif 'flavor' in parsed_args and parsed_args.flavor is not None:
241
+ flavor = n_client.find_flavor(parsed_args.flavor, ignore_missing=False)
242
+ attrs['flavor_id'] = flavor.id
240
243
 
241
244
  for attr in ('enable_default_route_bfd', 'enable_default_route_ecmp'):
242
245
  value = getattr(parsed_args, attr, None)
@@ -289,3 +289,82 @@ class PortTests(common.NetworkTagTests):
289
289
  f'{self.base_command} create --network {self.NETWORK_NAME} {args} {name}',
290
290
  parse_output=True,
291
291
  )
292
+
293
+ def _trunk_creation(self):
294
+ pport = uuid.uuid4().hex
295
+ sport1 = uuid.uuid4().hex
296
+ sport2 = uuid.uuid4().hex
297
+ trunk = uuid.uuid4().hex
298
+ json_output = self.openstack(
299
+ 'port create ' f'--network {self.NETWORK_NAME} {pport}',
300
+ parse_output=True,
301
+ )
302
+ pport_id = json_output.get('id')
303
+ json_output = self.openstack(
304
+ 'port create ' f'--network {self.NETWORK_NAME} {sport1}',
305
+ parse_output=True,
306
+ )
307
+ sport1_id = json_output.get('id')
308
+ json_output = self.openstack(
309
+ 'port create ' f'--network {self.NETWORK_NAME} {sport2}',
310
+ parse_output=True,
311
+ )
312
+ sport2_id = json_output.get('id')
313
+
314
+ self.openstack(
315
+ f'network trunk create --parent-port {pport} {trunk}',
316
+ )
317
+ self.openstack(
318
+ f'network trunk set --subport port={sport1},'
319
+ f'segmentation-type=vlan,segmentation-id=100 {trunk}',
320
+ )
321
+ self.openstack(
322
+ f'network trunk set --subport port={sport2},'
323
+ f'segmentation-type=vlan,segmentation-id=101 {trunk}',
324
+ )
325
+
326
+ # NOTE(ralonsoh): keep this order to first delete the trunk and then
327
+ # the ports.
328
+ self.addCleanup(self.openstack, f'port delete {pport_id}')
329
+ self.addCleanup(self.openstack, f'port delete {sport1_id}')
330
+ self.addCleanup(self.openstack, f'port delete {sport2_id}')
331
+ self.addCleanup(self.openstack, f'network trunk delete {trunk}')
332
+
333
+ return pport_id, sport1_id, sport2_id
334
+
335
+ def check_subports(self, subports, pport_id, sport1_id, sport2_id):
336
+ self.assertEqual(2, len(subports))
337
+ for subport in subports:
338
+ if subport['port_id'] == sport1_id:
339
+ self.assertEqual(100, subport['segmentation_id'])
340
+ elif subport['port_id'] == sport2_id:
341
+ self.assertEqual(101, subport['segmentation_id'])
342
+ else:
343
+ self.fail(
344
+ f'Port {pport_id} does not have subport '
345
+ f'{subport["port_id"]}'
346
+ )
347
+ self.assertEqual('vlan', subport['segmentation_type'])
348
+
349
+ def test_port_list_with_trunk(self):
350
+ pport_id, sport1_id, sport2_id = self._trunk_creation()
351
+
352
+ # List all ports with "--long" flag to retrieve the trunk details
353
+ json_output = self.openstack(
354
+ 'port list --long',
355
+ parse_output=True,
356
+ )
357
+ port = next(port for port in json_output if port['ID'] == pport_id)
358
+ subports = port['Trunk subports']
359
+ self.check_subports(subports, pport_id, sport1_id, sport2_id)
360
+
361
+ def test_port_show_with_trunk(self):
362
+ pport_id, sport1_id, sport2_id = self._trunk_creation()
363
+
364
+ # List all ports with "--long" flag to retrieve the trunk details
365
+ port = self.openstack(
366
+ f'port show {pport_id}',
367
+ parse_output=True,
368
+ )
369
+ subports = port['trunk_details']['sub_ports']
370
+ self.check_subports(subports, pport_id, sport1_id, sport2_id)
@@ -73,10 +73,10 @@ class TestCredentialCreate(identity_fakes.TestIdentityv3):
73
73
  columns, data = self.cmd.take_action(parsed_args)
74
74
 
75
75
  kwargs = {
76
- 'user': self.credential.user_id,
76
+ 'user_id': self.credential.user_id,
77
77
  'type': self.credential.type,
78
78
  'blob': self.credential.blob,
79
- 'project': None,
79
+ 'project_id': None,
80
80
  }
81
81
  self.identity_sdk_client.create_credential.assert_called_once_with(
82
82
  **kwargs
@@ -105,10 +105,10 @@ class TestCredentialCreate(identity_fakes.TestIdentityv3):
105
105
  columns, data = self.cmd.take_action(parsed_args)
106
106
 
107
107
  kwargs = {
108
- 'user': self.credential.user_id,
108
+ 'user_id': self.credential.user_id,
109
109
  'type': self.credential.type,
110
110
  'blob': self.credential.blob,
111
- 'project': self.credential.project_id,
111
+ 'project_id': self.credential.project_id,
112
112
  }
113
113
  self.identity_sdk_client.create_credential.assert_called_once_with(
114
114
  **kwargs
@@ -122,7 +122,7 @@ class TestPort(network_fakes.TestNetworkV2):
122
122
  fake_port.status,
123
123
  format_columns.ListColumn(fake_port.tags),
124
124
  fake_port.trusted,
125
- port.SubPortColumn(fake_port.trunk_details),
125
+ fake_port.trunk_details,
126
126
  fake_port.updated_at,
127
127
  )
128
128
 
@@ -2633,6 +2633,35 @@ class TestSetPort(TestPort):
2633
2633
  def test_set_trusted_false(self):
2634
2634
  self._test_set_trusted_field(False)
2635
2635
 
2636
+ def _test_set_uplink_status_propagation(self, uspropagation):
2637
+ arglist = [self._port.id]
2638
+ if uspropagation:
2639
+ arglist += ['--enable-uplink-status-propagation']
2640
+ else:
2641
+ arglist += ['--disable-uplink-status-propagation']
2642
+
2643
+ verifylist = [
2644
+ ('port', self._port.id),
2645
+ ]
2646
+ if uspropagation:
2647
+ verifylist.append(('enable_uplink_status_propagation', True))
2648
+ else:
2649
+ verifylist.append(('enable_uplink_status_propagation', False))
2650
+
2651
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
2652
+
2653
+ result = self.cmd.take_action(parsed_args)
2654
+ self.network_client.update_port.assert_called_once_with(
2655
+ self._port, **{'propagate_uplink_status': uspropagation}
2656
+ )
2657
+ self.assertIsNone(result)
2658
+
2659
+ def test_set_uplink_status_propagation_true(self):
2660
+ self._test_set_uplink_status_propagation(True)
2661
+
2662
+ def test_set_uplink_status_propagation_false(self):
2663
+ self._test_set_uplink_status_propagation(False)
2664
+
2636
2665
 
2637
2666
  class TestShowPort(TestPort):
2638
2667
  # The port to show.
@@ -384,7 +384,7 @@ class TestCreateRouter(TestRouter):
384
384
  def test_create_with_no_tag(self):
385
385
  self._test_create_with_tag(add_tags=False)
386
386
 
387
- def test_create_with_flavor_id_or_name(self):
387
+ def test_create_with_flavor_id_id(self):
388
388
  _flavor = network_fakes.create_one_network_flavor()
389
389
  self.network_client.find_flavor = mock.Mock(return_value=_flavor)
390
390
  arglist = [
@@ -392,7 +392,6 @@ class TestCreateRouter(TestRouter):
392
392
  '--flavor-id',
393
393
  _flavor.id,
394
394
  ]
395
- arglist_with_name = [self.new_router.name, '--flavor-id', _flavor.name]
396
395
  verifylist = [
397
396
  ('name', self.new_router.name),
398
397
  ('enable', True),
@@ -412,18 +411,69 @@ class TestCreateRouter(TestRouter):
412
411
  self.assertEqual(self.columns, columns)
413
412
  self.assertCountEqual(self.data, data)
414
413
 
415
- self.network_client.create_router.reset_mock()
416
- verifylist_w_name = [
414
+ def test_create_with_flavor_id_name(self):
415
+ _flavor = network_fakes.create_one_network_flavor()
416
+ self.network_client.find_flavor = mock.Mock(return_value=_flavor)
417
+ arglist = [self.new_router.name, '--flavor-id', _flavor.name]
418
+ verifylist = [
417
419
  ('name', self.new_router.name),
418
420
  ('enable', True),
419
421
  ('distributed', False),
420
422
  ('ha', False),
421
423
  ('flavor_id', _flavor.name),
422
424
  ]
423
- parsed_args_w_name = self.check_parser(
424
- self.cmd, arglist_with_name, verifylist_w_name
425
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
426
+ columns, data = self.cmd.take_action(parsed_args)
427
+ self.network_client.create_router.assert_called_once_with(
428
+ **{
429
+ 'admin_state_up': True,
430
+ 'name': self.new_router.name,
431
+ 'flavor_id': _flavor.id,
432
+ }
433
+ )
434
+ self.assertEqual(self.columns, columns)
435
+ self.assertCountEqual(self.data, data)
436
+
437
+ def test_create_with_flavor_id(self):
438
+ _flavor = network_fakes.create_one_network_flavor()
439
+ self.network_client.find_flavor = mock.Mock(return_value=_flavor)
440
+ arglist = [
441
+ self.new_router.name,
442
+ '--flavor',
443
+ _flavor.id,
444
+ ]
445
+ verifylist = [
446
+ ('name', self.new_router.name),
447
+ ('enable', True),
448
+ ('distributed', False),
449
+ ('ha', False),
450
+ ('flavor', _flavor.id),
451
+ ]
452
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
453
+ columns, data = self.cmd.take_action(parsed_args)
454
+ self.network_client.create_router.assert_called_once_with(
455
+ **{
456
+ 'admin_state_up': True,
457
+ 'name': self.new_router.name,
458
+ 'flavor_id': _flavor.id,
459
+ }
425
460
  )
426
- columns, data = self.cmd.take_action(parsed_args_w_name)
461
+ self.assertEqual(self.columns, columns)
462
+ self.assertCountEqual(self.data, data)
463
+
464
+ def test_create_with_flavor_name(self):
465
+ _flavor = network_fakes.create_one_network_flavor()
466
+ self.network_client.find_flavor = mock.Mock(return_value=_flavor)
467
+ arglist = [self.new_router.name, '--flavor', _flavor.name]
468
+ verifylist = [
469
+ ('name', self.new_router.name),
470
+ ('enable', True),
471
+ ('distributed', False),
472
+ ('ha', False),
473
+ ('flavor', _flavor.name),
474
+ ]
475
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
476
+ columns, data = self.cmd.take_action(parsed_args)
427
477
  self.network_client.create_router.assert_called_once_with(
428
478
  **{
429
479
  'admin_state_up': True,
@@ -112,6 +112,7 @@ Dmitriy Rabotyagov <noonedeadpunk@ya.ru>
112
112
  Dmitry Tantsur <dtantsur@protonmail.com>
113
113
  Dolph Mathews <dolph.mathews@gmail.com>
114
114
  Dongcan Ye <hellochosen@gmail.com>
115
+ Doug Goldstein <cardoe@cardoe.com>
115
116
  Doug Hellmann <doug.hellmann@dreamhost.com>
116
117
  Doug Hellmann <doug@doughellmann.com>
117
118
  Doug Wiegley <dwiegley@salesforce.com>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-openstackclient
3
- Version: 7.3.0
3
+ Version: 7.4.0
4
4
  Summary: OpenStack Command-line Client
5
5
  Home-page: https://docs.openstack.org/python-openstackclient/latest/
6
6
  Author: OpenStack
@@ -57,7 +57,7 @@ openstackclient/identity/v3/access_rule.py,sha256=s1bQ-dQwnUYKPbovwqObhHLmjATsjK
57
57
  openstackclient/identity/v3/application_credential.py,sha256=vCa4hAt7AhVtyZV1Ed_F3BuMtRK5JIxEzyRwXk-hJXA,11232
58
58
  openstackclient/identity/v3/catalog.py,sha256=49jDO5w8AqGgQxRppYmfi8R6P0Es7tnIraQzzFmYFAc,3300
59
59
  openstackclient/identity/v3/consumer.py,sha256=Fk1-wyUoTA638zHKf5KwTP4Os-RYctmBYkyen7fasIk,4845
60
- openstackclient/identity/v3/credential.py,sha256=cioV98t7HTUpjtMRLW7mY4EK-7jELtyFnNV30z6IvhY,7935
60
+ openstackclient/identity/v3/credential.py,sha256=3VMohFrTEqK3hcmBEaXWXwO16n9WCwUYBeav8IEbqsQ,7941
61
61
  openstackclient/identity/v3/domain.py,sha256=Hy_xsQd2tMNjlKsd-OY99XZTbys8XwSf3TOCqhX3YI8,7616
62
62
  openstackclient/identity/v3/ec2creds.py,sha256=BrLcjP_3i6PuMvgIarnhGjx7BxZ4VUVLz6MkE4gZ50I,7278
63
63
  openstackclient/identity/v3/endpoint.py,sha256=RPeAAiNBr6bMhhiCoNpPxanZVxjyiW2fhPxImi37Dks,13013
@@ -127,8 +127,8 @@ openstackclient/network/v2/network_segment.py,sha256=3bJFnFz4QOwgb_diuLZ-QJ9WOj3
127
127
  openstackclient/network/v2/network_segment_range.py,sha256=phZ4h-tRPpHbFNA8s_IegdXKm8Y84kffV62RxVITAn0,17514
128
128
  openstackclient/network/v2/network_service_provider.py,sha256=b0pKHxB5Qq1U2lfOCWHKJ8CMX661gBbKtv0jXvuE3Xg,1384
129
129
  openstackclient/network/v2/network_trunk.py,sha256=2QUGXB4lUGv9BvKPErzFUlgU9Tm_6Agp2pljRx3vTVw,13846
130
- openstackclient/network/v2/port.py,sha256=1q4iQ1TMfSxGaGXKQ5dGFfGdlvHaaHd5-j3MRWoq5pw,50295
131
- openstackclient/network/v2/router.py,sha256=_-C3D4EnXFCzMYW2AML_t7zpaZROTFdudxmulw3f4rY,50102
130
+ openstackclient/network/v2/port.py,sha256=P9UvpFAV0JQsxk9m6pV7PdAXOoTF-lDRVEq5KUPYzb8,50825
131
+ openstackclient/network/v2/router.py,sha256=x6jC0qeeOwRAJbC9ZagWVkgcKtz_KX4MzQCYTU5Z_4w,50290
132
132
  openstackclient/network/v2/security_group.py,sha256=XYOze-FQFJWtGxBc-6hiGViKVSi6fDPRWtjC9Keb1Pw,15488
133
133
  openstackclient/network/v2/security_group_rule.py,sha256=UQwuJ2uOmdGpaxcmeKNf8c3ay8I5vVjzb4fSFT3liPg,22371
134
134
  openstackclient/network/v2/subnet.py,sha256=CzW5uV3AQUaOW9gf5IMwJJXJQtk-22cLfNkmazF_LZw,31325
@@ -224,7 +224,7 @@ openstackclient/tests/functional/network/v2/test_network_segment.py,sha256=FB7PI
224
224
  openstackclient/tests/functional/network/v2/test_network_segment_range.py,sha256=bf1XRaNza6qzVrb5LNuIEtmWCFb8q-OQbktINgXwoKg,4727
225
225
  openstackclient/tests/functional/network/v2/test_network_service_provider.py,sha256=HOKvmIkUSR_e01sQOn8XS83mvflbkcC1iVKkjqi1GFk,1499
226
226
  openstackclient/tests/functional/network/v2/test_network_trunk.py,sha256=uliAsz_xGyy8oim2RaN1D9G5944svgsRWreYtQKAliM,5289
227
- openstackclient/tests/functional/network/v2/test_port.py,sha256=hsWTf9pFNCV1ilwcmBAPYWeYiMvAJqIYM6eyACIsNbM,10231
227
+ openstackclient/tests/functional/network/v2/test_port.py,sha256=f3D5LS954L6ytS8doMaQONIO7Wt2gNLeHFnLaM3fNH4,13319
228
228
  openstackclient/tests/functional/network/v2/test_router.py,sha256=LHODy_BoGdBc9_rL7rZTPhXiqcuTNpLShvXw_Qkw0pA,10116
229
229
  openstackclient/tests/functional/network/v2/test_security_group.py,sha256=HXqULP4WQoxCgbzyvwqd4dMo624airNDQ5fSm2XPdwg,2160
230
230
  openstackclient/tests/functional/network/v2/test_security_group_rule.py,sha256=iVoR1MUhxApNRHg0klv90yYkN6KSyNoJc4rxhMr3bII,2285
@@ -321,7 +321,7 @@ openstackclient/tests/unit/identity/v3/test_access_rule.py,sha256=g8sWxkRiUZiJr0
321
321
  openstackclient/tests/unit/identity/v3/test_application_credential.py,sha256=o-1WAPU5PQ7xtNGj01zEpt2icB8sGXqCqXR0bG8IXaM,14851
322
322
  openstackclient/tests/unit/identity/v3/test_catalog.py,sha256=u8PIs1shX4IYE3_nd8B8H4f3dV_nqmR59IEX_DgqkYo,4766
323
323
  openstackclient/tests/unit/identity/v3/test_consumer.py,sha256=QcoK9U_Ce1XQMBRqhY2OJouPQXji0huykhehwM6kHlI,6693
324
- openstackclient/tests/unit/identity/v3/test_credential.py,sha256=8tvGjakbh-tPDAWPlk4FxQaMRoJcNoNlbgSfVfvbGUI,11953
324
+ openstackclient/tests/unit/identity/v3/test_credential.py,sha256=yTOl_7NnczmVNplhA8mrWiPnHOWX4AW_UwF5OvIqsro,11965
325
325
  openstackclient/tests/unit/identity/v3/test_domain.py,sha256=Dvy-WTkWxwVfHCeIebdmsFuXETNTdccCKqWkAWRXrt4,16203
326
326
  openstackclient/tests/unit/identity/v3/test_endpoint.py,sha256=kx9y_6XMvm6CQIejTX0zVvwisjoJ4hrpgE-tqtQOBKY,28478
327
327
  openstackclient/tests/unit/identity/v3/test_endpoint_group.py,sha256=g3JGihRqj0jLzmEJXdyOh1PVXyI_48NdeBsGbl9f7e4,16211
@@ -397,8 +397,8 @@ openstackclient/tests/unit/network/v2/test_network_segment.py,sha256=D6MVB6eETA2
397
397
  openstackclient/tests/unit/network/v2/test_network_segment_range.py,sha256=zLgAZdHqbWKn5tYYCUuDn9UA7BFOMYOowC3DQztrZyQ,23388
398
398
  openstackclient/tests/unit/network/v2/test_network_service_provider.py,sha256=iHsMqAGuK3onjUI46uGKX1_DwGq-y6b_SOR2IU9PdfU,2047
399
399
  openstackclient/tests/unit/network/v2/test_network_trunk.py,sha256=1VPt6Nzv92nRxLoDgwffmpTJ0sgYl4b5PmLO3qJ9INk,30556
400
- openstackclient/tests/unit/network/v2/test_port.py,sha256=6uWKnZELyH9resbra7e_7L7RBEjxMlF1ogqVPh1acgE,94757
401
- openstackclient/tests/unit/network/v2/test_router.py,sha256=ELxY_k5ibnxLYYbcr41X7GzAPpxGPuM23VyDseLnJ1A,84356
400
+ openstackclient/tests/unit/network/v2/test_port.py,sha256=SxoL8Oft3NwlQOp7SV98FZ3dM6Ha9BdQwUqmTWBHzvk,95789
401
+ openstackclient/tests/unit/network/v2/test_router.py,sha256=TaYFuKeCcM_WzR5V_-FJo5w2Z8sNUsPiKLm1S4245pM,86272
402
402
  openstackclient/tests/unit/network/v2/test_security_group_compute.py,sha256=725tUWOhxjWJwUXVdKfxD7eXMe7zrz7bKNdK_HvK624,12576
403
403
  openstackclient/tests/unit/network/v2/test_security_group_network.py,sha256=PIE6TgW-bUGSAZLk0B60lPELIJsw_MTKxxcHw-E1fak,20916
404
404
  openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py,sha256=8z6OfGcA69LumFpxglE9MzJS267Co08DAwUf4NNC9RA,19155
@@ -494,11 +494,11 @@ openstackclient/volume/v3/volume_message.py,sha256=HBBxPEcYoNqGjEbzGIEnIJ1XTcQ2K
494
494
  openstackclient/volume/v3/volume_snapshot.py,sha256=pZ4q_qCwqh4jaGhX28G59wsWDmEc3uXdbpeD176osZg,3186
495
495
  openstackclient/volume/v3/volume_transfer_request.py,sha256=PthOJV2m-pTV1njFzwTpaekXZkET1c6alIJrpuN7R6Q,7530
496
496
  openstackclient/volume/v3/volume_type.py,sha256=_nbmu6e87UAHRjh30fQIwScMubox_FpHcQKDUOxO4NA,33955
497
- python_openstackclient-7.3.0.dist-info/AUTHORS,sha256=z7JOCAe9kF-Kh6UmborfoPLRMILaSdEv8zUoNhaVdJM,21563
498
- python_openstackclient-7.3.0.dist-info/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
499
- python_openstackclient-7.3.0.dist-info/METADATA,sha256=yZ_aebnMobWk5uo4PmvxS-s9_8Tt3tOn99cuud1MLe0,6516
500
- python_openstackclient-7.3.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
501
- python_openstackclient-7.3.0.dist-info/entry_points.txt,sha256=VsZCw-6So3hkHuIiX-dGaMVL1PEqmfDynF37m1EwjCs,53260
502
- python_openstackclient-7.3.0.dist-info/pbr.json,sha256=8bOPQYB_S2BPjvljnJqAaGxQj4EPpjEP6HNU-X6MseI,47
503
- python_openstackclient-7.3.0.dist-info/top_level.txt,sha256=htg7z9oZgysRuVUHn-m1Bk6XLGOeV65nMbZX9H8qhs0,16
504
- python_openstackclient-7.3.0.dist-info/RECORD,,
497
+ python_openstackclient-7.4.0.dist-info/AUTHORS,sha256=JEcKU3f-60jlNEfCB_U9elxEpvg-o-HNB_AFGF6zg7k,21598
498
+ python_openstackclient-7.4.0.dist-info/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
499
+ python_openstackclient-7.4.0.dist-info/METADATA,sha256=gc5mG6EMYbYGvHktTTd50EtNE9Frb_sgguIwo-Rjdso,6516
500
+ python_openstackclient-7.4.0.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
501
+ python_openstackclient-7.4.0.dist-info/entry_points.txt,sha256=VsZCw-6So3hkHuIiX-dGaMVL1PEqmfDynF37m1EwjCs,53260
502
+ python_openstackclient-7.4.0.dist-info/pbr.json,sha256=PIaHogvl-6SsHqyhVcnmyVjkEiRsEfltQ8jjvnwS8tA,47
503
+ python_openstackclient-7.4.0.dist-info/top_level.txt,sha256=htg7z9oZgysRuVUHn-m1Bk6XLGOeV65nMbZX9H8qhs0,16
504
+ python_openstackclient-7.4.0.dist-info/RECORD,,
@@ -0,0 +1 @@
1
+ {"git_version": "4b7e32ca", "is_release": true}
@@ -1 +0,0 @@
1
- {"git_version": "34121473", "is_release": true}