python-openstackclient 7.1.3__py3-none-any.whl → 7.1.4__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.
@@ -129,10 +129,15 @@ class ClientManager(clientmanager.ClientManager):
129
129
  # TODO(stephenfin): Drop volume_client argument in OSC 8.0 or later.
130
130
  def is_volume_endpoint_enabled(self, volume_client=None):
131
131
  """Check if volume endpoint is enabled"""
132
+ # We check against the service type and all aliases defined by the
133
+ # Service Types Authority
134
+ # https://service-types.openstack.org/service-types.json
132
135
  return (
133
- self.is_service_available('volume') is not False
136
+ self.is_service_available('block-storage') is not False
137
+ or self.is_service_available('volume') is not False
134
138
  or self.is_service_available('volumev3') is not False
135
139
  or self.is_service_available('volumev2') is not False
140
+ or self.is_service_available('block-store') is not False
136
141
  )
137
142
 
138
143
 
@@ -130,7 +130,7 @@ class ShowLimits(command.Lister):
130
130
  if self.app.client_manager.is_volume_endpoint_enabled():
131
131
  volume_client = self.app.client_manager.sdk_connection.volume
132
132
  volume_limits = volume_client.get_limits(
133
- project_id=project_id,
133
+ project=project_id,
134
134
  )
135
135
 
136
136
  if parsed_args.is_absolute:
@@ -249,9 +249,14 @@ class ListQuota(command.Lister):
249
249
  for project_id in project_ids:
250
250
  try:
251
251
  project_data = compute_client.get_quota_set(project_id)
252
+ # NOTE(stephenfin): Unfortunately, Nova raises a HTTP 400 (Bad
253
+ # Request) if the project ID is invalid, even though the project
254
+ # ID is actually the resource's identifier which would normally
255
+ # lead us to expect a HTTP 404 (Not Found).
252
256
  except (
253
- sdk_exceptions.NotFoundException,
257
+ sdk_exceptions.BadRequestException,
254
258
  sdk_exceptions.ForbiddenException,
259
+ sdk_exceptions.NotFoundException,
255
260
  ) as exc:
256
261
  # Project not found, move on to next one
257
262
  LOG.warning(f"Project {project_id} not found: {exc}")
@@ -312,8 +317,8 @@ class ListQuota(command.Lister):
312
317
  try:
313
318
  project_data = volume_client.get_quota_set(project_id)
314
319
  except (
315
- sdk_exceptions.NotFoundException,
316
320
  sdk_exceptions.ForbiddenException,
321
+ sdk_exceptions.NotFoundException,
317
322
  ) as exc:
318
323
  # Project not found, move on to next one
319
324
  LOG.warning(f"Project {project_id} not found: {exc}")
@@ -184,13 +184,6 @@ def _get_token_resource(client, resource, parsed_name, parsed_domain=None):
184
184
  return parsed_name
185
185
 
186
186
 
187
- def _get_domain_id_if_requested(identity_client, domain_name_or_id):
188
- if not domain_name_or_id:
189
- return None
190
- domain = find_domain(identity_client, domain_name_or_id)
191
- return domain.id
192
-
193
-
194
187
  def find_domain(identity_client, name_or_id):
195
188
  return _find_identity_resource(
196
189
  identity_client.domains, name_or_id, domains.Domain
@@ -198,48 +191,43 @@ def find_domain(identity_client, name_or_id):
198
191
 
199
192
 
200
193
  def find_group(identity_client, name_or_id, domain_name_or_id=None):
201
- domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
202
- if not domain_id:
194
+ if domain_name_or_id is None:
203
195
  return _find_identity_resource(
204
196
  identity_client.groups, name_or_id, groups.Group
205
197
  )
206
- else:
207
- domain_id = find_domain(identity_client, domain_id).id
208
- return _find_identity_resource(
209
- identity_client.groups,
210
- name_or_id,
211
- groups.Group,
212
- domain_id=domain_id,
213
- )
198
+
199
+ domain_id = find_domain(identity_client, domain_name_or_id).id
200
+ return _find_identity_resource(
201
+ identity_client.groups,
202
+ name_or_id,
203
+ groups.Group,
204
+ domain_id=domain_id,
205
+ )
214
206
 
215
207
 
216
208
  def find_project(identity_client, name_or_id, domain_name_or_id=None):
217
- domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
218
- if not domain_id:
209
+ if domain_name_or_id is None:
219
210
  return _find_identity_resource(
220
211
  identity_client.projects, name_or_id, projects.Project
221
212
  )
222
- else:
223
- domain_id = find_domain(identity_client, domain_id).id
224
- return _find_identity_resource(
225
- identity_client.projects,
226
- name_or_id,
227
- projects.Project,
228
- domain_id=domain_id,
229
- )
213
+ domain_id = find_domain(identity_client, domain_name_or_id).id
214
+ return _find_identity_resource(
215
+ identity_client.projects,
216
+ name_or_id,
217
+ projects.Project,
218
+ domain_id=domain_id,
219
+ )
230
220
 
231
221
 
232
222
  def find_user(identity_client, name_or_id, domain_name_or_id=None):
233
- domain_id = _get_domain_id_if_requested(identity_client, domain_name_or_id)
234
- if not domain_id:
223
+ if domain_name_or_id is None:
235
224
  return _find_identity_resource(
236
225
  identity_client.users, name_or_id, users.User
237
226
  )
238
- else:
239
- domain_id = find_domain(identity_client, domain_id).id
240
- return _find_identity_resource(
241
- identity_client.users, name_or_id, users.User, domain_id=domain_id
242
- )
227
+ domain_id = find_domain(identity_client, domain_name_or_id).id
228
+ return _find_identity_resource(
229
+ identity_client.users, name_or_id, users.User, domain_id=domain_id
230
+ )
243
231
 
244
232
 
245
233
  def _find_identity_resource(
@@ -148,7 +148,7 @@ class ListRoleAssignment(command.Lister):
148
148
 
149
149
  user_domain_id = None
150
150
  if parsed_args.user_domain:
151
- project_domain_id = _find_sdk_id(
151
+ user_domain_id = _find_sdk_id(
152
152
  identity_client.find_domain,
153
153
  name_or_id=parsed_args.user_domain,
154
154
  )
@@ -165,10 +165,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
165
165
  arglist = ['--user', self.user.name]
166
166
  verifylist = [
167
167
  ('user', self.user.name),
168
+ ('user_domain', None),
168
169
  ('group', None),
170
+ ('group_domain', None),
169
171
  ('system', None),
170
172
  ('domain', None),
171
173
  ('project', None),
174
+ ('project_domain', None),
172
175
  ('role', None),
173
176
  ('effective', None),
174
177
  ('inherited', False),
@@ -181,6 +184,79 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
181
184
  # containing the data to be listed.
182
185
  columns, data = self.cmd.take_action(parsed_args)
183
186
 
187
+ self.identity_sdk_client.find_user.assert_called_with(
188
+ name_or_id=self.user.name, ignore_missing=False, domain_id=None
189
+ )
190
+ self.identity_sdk_client.role_assignments.assert_called_with(
191
+ role_id=None,
192
+ user_id=self.user.id,
193
+ group_id=None,
194
+ scope_project_id=None,
195
+ scope_domain_id=None,
196
+ scope_system=None,
197
+ effective=None,
198
+ include_names=None,
199
+ inherited_to=None,
200
+ )
201
+
202
+ self.assertEqual(self.columns, columns)
203
+ datalist = (
204
+ (
205
+ self.role.id,
206
+ self.user.id,
207
+ '',
208
+ '',
209
+ self.domain.id,
210
+ '',
211
+ False,
212
+ ),
213
+ (
214
+ self.role.id,
215
+ self.user.id,
216
+ '',
217
+ self.project.id,
218
+ '',
219
+ '',
220
+ False,
221
+ ),
222
+ )
223
+ self.assertEqual(datalist, tuple(data))
224
+
225
+ def test_role_assignment_list_user_with_domain(self):
226
+ self.identity_sdk_client.role_assignments.return_value = [
227
+ self.assignment_with_domain_id_and_user_id,
228
+ self.assignment_with_project_id_and_user_id,
229
+ ]
230
+
231
+ arglist = ['--user', self.user.name, '--user-domain', self.domain.name]
232
+ verifylist = [
233
+ ('user', self.user.name),
234
+ ('user_domain', self.domain.name),
235
+ ('group', None),
236
+ ('group_domain', None),
237
+ ('system', None),
238
+ ('domain', None),
239
+ ('project', None),
240
+ ('role', None),
241
+ ('effective', None),
242
+ ('inherited', False),
243
+ ('names', False),
244
+ ]
245
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
246
+
247
+ # In base command class Lister in cliff, abstract method take_action()
248
+ # returns a tuple containing the column names and an iterable
249
+ # containing the data to be listed.
250
+ columns, data = self.cmd.take_action(parsed_args)
251
+
252
+ self.identity_sdk_client.find_domain.assert_called_with(
253
+ name_or_id=self.domain.name, ignore_missing=False
254
+ )
255
+ self.identity_sdk_client.find_user.assert_called_with(
256
+ name_or_id=self.user.name,
257
+ ignore_missing=False,
258
+ domain_id=self.domain.id,
259
+ )
184
260
  self.identity_sdk_client.role_assignments.assert_called_with(
185
261
  role_id=None,
186
262
  user_id=self.user.id,
@@ -230,10 +306,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
230
306
  arglist = ['--user', self.user.id]
231
307
  verifylist = [
232
308
  ('user', self.user.id),
309
+ ('user_domain', None),
233
310
  ('group', None),
311
+ ('group_domain', None),
234
312
  ('system', None),
235
313
  ('domain', None),
236
314
  ('project', None),
315
+ ('project_domain', None),
237
316
  ('role', None),
238
317
  ('effective', None),
239
318
  ('inherited', False),
@@ -290,10 +369,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
290
369
  arglist = ['--group', self.group.name]
291
370
  verifylist = [
292
371
  ('user', None),
372
+ ('user_domain', None),
293
373
  ('group', self.group.name),
374
+ ('group_domain', None),
294
375
  ('system', None),
295
376
  ('domain', None),
296
377
  ('project', None),
378
+ ('project_domain', None),
297
379
  ('role', None),
298
380
  ('effective', None),
299
381
  ('inherited', False),
@@ -306,6 +388,85 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
306
388
  # containing the data to be listed.
307
389
  columns, data = self.cmd.take_action(parsed_args)
308
390
 
391
+ self.identity_sdk_client.find_group.assert_called_with(
392
+ name_or_id=self.group.name, ignore_missing=False, domain_id=None
393
+ )
394
+ self.identity_sdk_client.role_assignments.assert_called_with(
395
+ role_id=None,
396
+ user_id=None,
397
+ group_id=self.group.id,
398
+ scope_project_id=None,
399
+ scope_domain_id=None,
400
+ scope_system=None,
401
+ effective=None,
402
+ include_names=None,
403
+ inherited_to=None,
404
+ )
405
+
406
+ self.assertEqual(self.columns, columns)
407
+ datalist = (
408
+ (
409
+ self.role.id,
410
+ '',
411
+ self.group.id,
412
+ '',
413
+ self.domain.id,
414
+ '',
415
+ False,
416
+ ),
417
+ (
418
+ self.role.id,
419
+ '',
420
+ self.group.id,
421
+ self.project.id,
422
+ '',
423
+ '',
424
+ False,
425
+ ),
426
+ )
427
+ self.assertEqual(datalist, tuple(data))
428
+
429
+ def test_role_assignment_list_group_with_domain(self):
430
+ self.identity_sdk_client.role_assignments.return_value = [
431
+ self.assignment_with_domain_id_and_group_id,
432
+ self.assignment_with_project_id_and_group_id,
433
+ ]
434
+
435
+ arglist = [
436
+ '--group',
437
+ self.group.name,
438
+ '--group-domain',
439
+ self.domain.name,
440
+ ]
441
+ verifylist = [
442
+ ('user', None),
443
+ ('user_domain', None),
444
+ ('group', self.group.name),
445
+ ('group_domain', self.domain.name),
446
+ ('system', None),
447
+ ('domain', None),
448
+ ('project', None),
449
+ ('project_domain', None),
450
+ ('role', None),
451
+ ('effective', None),
452
+ ('inherited', False),
453
+ ('names', False),
454
+ ]
455
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
456
+
457
+ # In base command class Lister in cliff, abstract method take_action()
458
+ # returns a tuple containing the column names and an iterable
459
+ # containing the data to be listed.
460
+ columns, data = self.cmd.take_action(parsed_args)
461
+
462
+ self.identity_sdk_client.find_domain.assert_called_with(
463
+ name_or_id=self.domain.name, ignore_missing=False
464
+ )
465
+ self.identity_sdk_client.find_group.assert_called_with(
466
+ name_or_id=self.group.name,
467
+ ignore_missing=False,
468
+ domain_id=self.domain.id,
469
+ )
309
470
  self.identity_sdk_client.role_assignments.assert_called_with(
310
471
  role_id=None,
311
472
  user_id=None,
@@ -350,10 +511,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
350
511
  arglist = ['--domain', self.domain.name]
351
512
  verifylist = [
352
513
  ('user', None),
514
+ ('user_domain', None),
353
515
  ('group', None),
516
+ ('group_domain', None),
354
517
  ('system', None),
355
518
  ('domain', self.domain.name),
356
519
  ('project', None),
520
+ ('project_domain', None),
357
521
  ('role', None),
358
522
  ('effective', None),
359
523
  ('inherited', False),
@@ -410,10 +574,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
410
574
  arglist = ['--project', self.project.name]
411
575
  verifylist = [
412
576
  ('user', None),
577
+ ('user_domain', None),
413
578
  ('group', None),
579
+ ('group_domain', None),
414
580
  ('system', None),
415
581
  ('domain', None),
416
582
  ('project', self.project.name),
583
+ ('project_domain', None),
417
584
  ('role', None),
418
585
  ('effective', None),
419
586
  ('inherited', False),
@@ -426,6 +593,85 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
426
593
  # containing the data to be listed.
427
594
  columns, data = self.cmd.take_action(parsed_args)
428
595
 
596
+ self.identity_sdk_client.find_project.assert_called_with(
597
+ name_or_id=self.project.name, ignore_missing=False, domain_id=None
598
+ )
599
+ self.identity_sdk_client.role_assignments.assert_called_with(
600
+ role_id=None,
601
+ user_id=None,
602
+ group_id=None,
603
+ scope_project_id=self.project.id,
604
+ scope_domain_id=None,
605
+ scope_system=None,
606
+ effective=None,
607
+ include_names=None,
608
+ inherited_to=None,
609
+ )
610
+
611
+ self.assertEqual(self.columns, columns)
612
+ datalist = (
613
+ (
614
+ self.role.id,
615
+ self.user.id,
616
+ '',
617
+ self.project.id,
618
+ '',
619
+ '',
620
+ False,
621
+ ),
622
+ (
623
+ self.role.id,
624
+ '',
625
+ self.group.id,
626
+ self.project.id,
627
+ '',
628
+ '',
629
+ False,
630
+ ),
631
+ )
632
+ self.assertEqual(datalist, tuple(data))
633
+
634
+ def test_role_assignment_list_project_with_domain(self):
635
+ self.identity_sdk_client.role_assignments.return_value = [
636
+ self.assignment_with_project_id_and_user_id,
637
+ self.assignment_with_project_id_and_group_id,
638
+ ]
639
+
640
+ arglist = [
641
+ '--project',
642
+ self.project.name,
643
+ '--project-domain',
644
+ self.domain.name,
645
+ ]
646
+ verifylist = [
647
+ ('user', None),
648
+ ('user_domain', None),
649
+ ('group', None),
650
+ ('group_domain', None),
651
+ ('system', None),
652
+ ('domain', None),
653
+ ('project', self.project.name),
654
+ ('project_domain', self.domain.name),
655
+ ('role', None),
656
+ ('effective', None),
657
+ ('inherited', False),
658
+ ('names', False),
659
+ ]
660
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
661
+
662
+ # In base command class Lister in cliff, abstract method take_action()
663
+ # returns a tuple containing the column names and an iterable
664
+ # containing the data to be listed.
665
+ columns, data = self.cmd.take_action(parsed_args)
666
+
667
+ self.identity_sdk_client.find_domain.assert_called_with(
668
+ name_or_id=self.domain.name, ignore_missing=False
669
+ )
670
+ self.identity_sdk_client.find_project.assert_called_with(
671
+ name_or_id=self.project.name,
672
+ ignore_missing=False,
673
+ domain_id=self.domain.id,
674
+ )
429
675
  self.identity_sdk_client.role_assignments.assert_called_with(
430
676
  role_id=None,
431
677
  user_id=None,
@@ -476,10 +722,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
476
722
  ]
477
723
  verifylist = [
478
724
  ('user', None),
725
+ ('user_domain', None),
479
726
  ('group', None),
727
+ ('group_domain', None),
480
728
  ('system', None),
481
729
  ('domain', None),
482
730
  ('project', None),
731
+ ('project_domain', None),
483
732
  ('role', None),
484
733
  ('effective', None),
485
734
  ('inherited', False),
@@ -529,10 +778,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
529
778
  arglist = ['--effective']
530
779
  verifylist = [
531
780
  ('user', None),
781
+ ('user_domain', None),
532
782
  ('group', None),
783
+ ('group_domain', None),
533
784
  ('system', None),
534
785
  ('domain', None),
535
786
  ('project', None),
787
+ ('project_domain', None),
536
788
  ('role', None),
537
789
  ('effective', True),
538
790
  ('inherited', False),
@@ -611,10 +863,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
611
863
  arglist = ['--inherited']
612
864
  verifylist = [
613
865
  ('user', None),
866
+ ('user_domain', None),
614
867
  ('group', None),
868
+ ('group_domain', None),
615
869
  ('system', None),
616
870
  ('domain', None),
617
871
  ('project', None),
872
+ ('project_domain', None),
618
873
  ('role', None),
619
874
  ('effective', None),
620
875
  ('inherited', True),
@@ -707,10 +962,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
707
962
  arglist = ['--names']
708
963
  verifylist = [
709
964
  ('user', None),
965
+ ('user_domain', None),
710
966
  ('group', None),
967
+ ('group_domain', None),
711
968
  ('system', None),
712
969
  ('domain', None),
713
970
  ('project', None),
971
+ ('project_domain', None),
714
972
  ('role', None),
715
973
  ('effective', None),
716
974
  ('inherited', False),
@@ -799,10 +1057,13 @@ class TestRoleAssignmentList(identity_fakes.TestIdentityv3):
799
1057
  ]
800
1058
  verifylist = [
801
1059
  ('user', None),
1060
+ ('user_domain', None),
802
1061
  ('group', None),
1062
+ ('group_domain', None),
803
1063
  ('system', None),
804
1064
  ('domain', None),
805
1065
  ('project', None),
1066
+ ('project_domain', None),
806
1067
  ('role', role_2.name),
807
1068
  ('effective', None),
808
1069
  ('inherited', False),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-openstackclient
3
- Version: 7.1.3
3
+ Version: 7.1.4
4
4
  Summary: OpenStack Command-line Client
5
5
  Home-page: https://docs.openstack.org/python-openstackclient/latest/
6
6
  Author: OpenStack
@@ -9,15 +9,15 @@ openstackclient/api/image_v2.py,sha256=GSM09toS6rcLzbtyhKl_FvQ7UeWJ3EcvSNBdVIk9r
9
9
  openstackclient/api/object_store_v1.py,sha256=366WuIuu7iXH4r-vdZTWSiopGj8P4MmMa8NePcvh5qk,18183
10
10
  openstackclient/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  openstackclient/common/availability_zone.py,sha256=2TvrpkRQmMHffRZu1x71NFu0tQQNTuo0Voi0er_OvZc,6497
12
- openstackclient/common/clientmanager.py,sha256=dGkJZwEuDmEFIuLyCesCRfEEUHPX5KqxOYvdwtyq1xk,7124
12
+ openstackclient/common/clientmanager.py,sha256=X_hXK580SLUG3n_HY-2owE32eAzB0jTyLq2DMCufLAs,7438
13
13
  openstackclient/common/configuration.py,sha256=kfi4Ph1hEO0z8uJD8d9OuQz2C70Yi7U8pzbc3Tq88lU,2339
14
14
  openstackclient/common/extension.py,sha256=4YK8HjwNtd7fIOzcQ-7PDjIwuF331T924vUcSkzK5pI,5332
15
- openstackclient/common/limits.py,sha256=pCNLq4A1vKxsN27f1G0Qot4gNi-L0z4p7UdGkfx712w,5662
15
+ openstackclient/common/limits.py,sha256=6LSFb7OlaMjN6nfXvnZBSaTwZS09UhpxpBNq7eOs898,5659
16
16
  openstackclient/common/module.py,sha256=biNzeW2KWcaagpvidvNvQuj4JNk1wjXxBnW99tu_nNk,4277
17
17
  openstackclient/common/pagination.py,sha256=ZmEFXprCbSKDtURJTyp5pfe97JuZYKth0MAkEXxrFFU,2728
18
18
  openstackclient/common/progressbar.py,sha256=-Xlth1FbiqZg1j3-zX6DIEp29mD76z2ozxiOybx8K-g,2427
19
19
  openstackclient/common/project_cleanup.py,sha256=f77yjCfhMh_XY2C-riwvbvh3jrMPx_4EzgHflkG8efk,5206
20
- openstackclient/common/quota.py,sha256=w17mvV7YE9V2kBZ-oX47cbh3iKP77g1cu7STD5NpswM,28361
20
+ openstackclient/common/quota.py,sha256=ARlbPzaPR7KIxzvVOSY2RFs5SFHalZ0KpjkzHCmhar4,28697
21
21
  openstackclient/common/versions.py,sha256=yiH0xhCFKpFcZrA0tWz99-eXJ44PEAyH4qZy9Fu9uwk,3838
22
22
  openstackclient/compute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  openstackclient/compute/client.py,sha256=xntJEyxt_h5s2cI132cDFCOIxrJCu07WbtFLwp3R5dI,1533
@@ -41,7 +41,7 @@ openstackclient/compute/v2/service.py,sha256=3Y-R9wGnk5kSaMvXzuETd8EFLQwTfMUbdmk
41
41
  openstackclient/compute/v2/usage.py,sha256=ztIv1ucTWWuVe3pfv1jk7Gkf2c6boTrqGdeFKbbfQ5g,9026
42
42
  openstackclient/identity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  openstackclient/identity/client.py,sha256=Miz2eCWbhS-IXaj87J-5qatZPOwZeOn5_MyZ6YMNZ9w,2433
44
- openstackclient/identity/common.py,sha256=LYtudKq9BgJhssDPSL1pywkkgBzamD6S0hUplnfc3sg,12495
44
+ openstackclient/identity/common.py,sha256=oWSLTECKJeqyvJH7mY1OZWUSSZZtTVyp4jBQGWFclto,12011
45
45
  openstackclient/identity/v2_0/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  openstackclient/identity/v2_0/catalog.py,sha256=B0nCW-KrPqBJ6CX4_zn7_p6h3Y4VFfmVhs14MhnJ-oY,3484
47
47
  openstackclient/identity/v2_0/ec2creds.py,sha256=QRj4gP54dA-wX27xy55NJwes9PEFRsCSa0bXjB3aZrY,6468
@@ -73,7 +73,7 @@ openstackclient/identity/v3/project.py,sha256=jHpviZg3MYPKCacYs1_jbdafz9EflGHGqu
73
73
  openstackclient/identity/v3/region.py,sha256=jcImUh-kZromTAtXd8aF7kfKBqBwfknP2I5ylYYyb0w,6010
74
74
  openstackclient/identity/v3/registered_limit.py,sha256=mbV4Ci7kNPMbveHg6QQztYISiXcm3VwBv3xR2D-aKvw,11389
75
75
  openstackclient/identity/v3/role.py,sha256=dmuW5j4T9zmNBHuGkIIcolx5aoDmyFGshGSfOZ2swEY,14205
76
- openstackclient/identity/v3/role_assignment.py,sha256=KSgxEa3aV3BRA5Mejfo_FJYmMJzfQ35-Y5TljhVnGQ0,8021
76
+ openstackclient/identity/v3/role_assignment.py,sha256=pg-43fgY2HK4ymfaYypVOuPMsJoYGBRn4XZxicpX6YY,8018
77
77
  openstackclient/identity/v3/service.py,sha256=2VuxiOEuEnqjWEPNryKRe4LLe70-MIndkDXYB_jdW1g,7457
78
78
  openstackclient/identity/v3/service_provider.py,sha256=g-gs09bFJertKjbfFp2ZKPjXtPfNcecBlHWkArGLkvw,7410
79
79
  openstackclient/identity/v3/tag.py,sha256=dcVDheoWxdkwsZYvyJSpzIF2EGpqZtaE0h7x2halscc,3972
@@ -335,7 +335,7 @@ openstackclient/tests/unit/identity/v3/test_protocol.py,sha256=SmV_N8v_dU-mcwa7k
335
335
  openstackclient/tests/unit/identity/v3/test_region.py,sha256=SN7wLeta1wgFjul3_NGzU-TsQQQaZiFbC7sOEFiRl30,10614
336
336
  openstackclient/tests/unit/identity/v3/test_registered_limit.py,sha256=8-Og3hgz2q8i7W1TSFmnRp9MqYzVY1H4SjnOrLVPWKo,17554
337
337
  openstackclient/tests/unit/identity/v3/test_role.py,sha256=pYwuSFEg99MHk1mTKQ0l9XzdER0m2T9YjZHMDxfTvFk,51986
338
- openstackclient/tests/unit/identity/v3/test_role_assignment.py,sha256=mHki0zb-hAB3mbVTa0nr3cmVsHEcoop282IwwbIEtgQ,27161
338
+ openstackclient/tests/unit/identity/v3/test_role_assignment.py,sha256=LGwD5EApF6BSiXIHBPwgetcjQsRfCjQ62DmVxGFFcOE,35747
339
339
  openstackclient/tests/unit/identity/v3/test_service.py,sha256=eFRjaeuJKd4_G1_gSTzAKmLTN035rQjY4E5RnLzMutY,15028
340
340
  openstackclient/tests/unit/identity/v3/test_service_provider.py,sha256=JkO4dBQLGGdJS9etWJzj0wswGmdAAtrCOmfC1hEYzSs,13189
341
341
  openstackclient/tests/unit/identity/v3/test_token.py,sha256=k9Ij_BbGTx9KG6Wf7NiO_th-N7cxGWnIWQMWIlDsGXg,4556
@@ -493,11 +493,11 @@ openstackclient/volume/v3/volume_message.py,sha256=HBBxPEcYoNqGjEbzGIEnIJ1XTcQ2K
493
493
  openstackclient/volume/v3/volume_snapshot.py,sha256=pZ4q_qCwqh4jaGhX28G59wsWDmEc3uXdbpeD176osZg,3186
494
494
  openstackclient/volume/v3/volume_transfer_request.py,sha256=PthOJV2m-pTV1njFzwTpaekXZkET1c6alIJrpuN7R6Q,7530
495
495
  openstackclient/volume/v3/volume_type.py,sha256=DF2MVoW2mIk0ABDLZD8D2sb8JlR7-rRjA4qCnBHRe6o,34039
496
- python_openstackclient-7.1.3.dist-info/AUTHORS,sha256=TRFKS0fs1j9d3_KWaIQfYnNH3gfTnDyBHng0RJAUFeM,21384
497
- python_openstackclient-7.1.3.dist-info/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
498
- python_openstackclient-7.1.3.dist-info/METADATA,sha256=iIADZeHvI7QGd_e-yM2TeUXu-TIImVCrCKKaN2LUYt0,6581
499
- python_openstackclient-7.1.3.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
500
- python_openstackclient-7.1.3.dist-info/entry_points.txt,sha256=9kVhKTeyLPfkXDMI_ALqXvz0zSJEqibJLHHsOdmtT3c,53261
501
- python_openstackclient-7.1.3.dist-info/pbr.json,sha256=rL_Aoe59Tt--2HvZvKWBDtaV-1lzvc08eBhnivp4mQU,47
502
- python_openstackclient-7.1.3.dist-info/top_level.txt,sha256=htg7z9oZgysRuVUHn-m1Bk6XLGOeV65nMbZX9H8qhs0,16
503
- python_openstackclient-7.1.3.dist-info/RECORD,,
496
+ python_openstackclient-7.1.4.dist-info/AUTHORS,sha256=TRFKS0fs1j9d3_KWaIQfYnNH3gfTnDyBHng0RJAUFeM,21384
497
+ python_openstackclient-7.1.4.dist-info/LICENSE,sha256=XfKg2H1sVi8OoRxoisUlMqoo10TKvHmU_wU39ks7MyA,10143
498
+ python_openstackclient-7.1.4.dist-info/METADATA,sha256=kgsnQMio_eekeFp0wbbLQ1k9JiLJmyUnkzCFkhqaLs4,6581
499
+ python_openstackclient-7.1.4.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
500
+ python_openstackclient-7.1.4.dist-info/entry_points.txt,sha256=9kVhKTeyLPfkXDMI_ALqXvz0zSJEqibJLHHsOdmtT3c,53261
501
+ python_openstackclient-7.1.4.dist-info/pbr.json,sha256=Ath0K2qvjbVogYTdeuTmNoMRajUIwhHfhz_eJUkQVOM,47
502
+ python_openstackclient-7.1.4.dist-info/top_level.txt,sha256=htg7z9oZgysRuVUHn-m1Bk6XLGOeV65nMbZX9H8qhs0,16
503
+ python_openstackclient-7.1.4.dist-info/RECORD,,
@@ -0,0 +1 @@
1
+ {"git_version": "f42ade43", "is_release": true}
@@ -1 +0,0 @@
1
- {"git_version": "a1ddfa4a", "is_release": true}