python-openstackclient 8.2.0__py3-none-any.whl → 9.0.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.
Files changed (233) hide show
  1. openstackclient/api/object_store_v1.py +4 -1
  2. openstackclient/command.py +27 -0
  3. openstackclient/common/availability_zone.py +1 -1
  4. openstackclient/common/clientmanager.py +59 -21
  5. openstackclient/common/configuration.py +1 -1
  6. openstackclient/common/extension.py +1 -1
  7. openstackclient/common/limits.py +1 -1
  8. openstackclient/common/module.py +5 -3
  9. openstackclient/common/project_cleanup.py +10 -8
  10. openstackclient/common/quota.py +54 -23
  11. openstackclient/common/versions.py +1 -2
  12. openstackclient/compute/v2/agent.py +1 -1
  13. openstackclient/compute/v2/aggregate.py +6 -5
  14. openstackclient/compute/v2/console.py +5 -3
  15. openstackclient/compute/v2/console_connection.py +1 -1
  16. openstackclient/compute/v2/flavor.py +1 -1
  17. openstackclient/compute/v2/host.py +1 -1
  18. openstackclient/compute/v2/hypervisor.py +1 -1
  19. openstackclient/compute/v2/hypervisor_stats.py +1 -1
  20. openstackclient/compute/v2/keypair.py +1 -1
  21. openstackclient/compute/v2/server.py +78 -29
  22. openstackclient/compute/v2/server_backup.py +1 -1
  23. openstackclient/compute/v2/server_event.py +1 -1
  24. openstackclient/compute/v2/server_group.py +4 -2
  25. openstackclient/compute/v2/server_image.py +1 -1
  26. openstackclient/compute/v2/server_migration.py +1 -1
  27. openstackclient/compute/v2/server_volume.py +1 -1
  28. openstackclient/compute/v2/service.py +1 -1
  29. openstackclient/compute/v2/usage.py +6 -4
  30. openstackclient/identity/common.py +33 -1
  31. openstackclient/identity/v2_0/catalog.py +3 -2
  32. openstackclient/identity/v2_0/ec2creds.py +1 -1
  33. openstackclient/identity/v2_0/endpoint.py +1 -1
  34. openstackclient/identity/v2_0/project.py +17 -7
  35. openstackclient/identity/v2_0/role.py +1 -1
  36. openstackclient/identity/v2_0/role_assignment.py +3 -3
  37. openstackclient/identity/v2_0/service.py +4 -2
  38. openstackclient/identity/v2_0/token.py +1 -1
  39. openstackclient/identity/v2_0/user.py +2 -2
  40. openstackclient/identity/v3/access_rule.py +16 -4
  41. openstackclient/identity/v3/application_credential.py +30 -10
  42. openstackclient/identity/v3/catalog.py +3 -3
  43. openstackclient/identity/v3/consumer.py +1 -1
  44. openstackclient/identity/v3/credential.py +1 -1
  45. openstackclient/identity/v3/domain.py +10 -4
  46. openstackclient/identity/v3/ec2creds.py +1 -1
  47. openstackclient/identity/v3/endpoint.py +33 -12
  48. openstackclient/identity/v3/endpoint_group.py +1 -1
  49. openstackclient/identity/v3/federation_protocol.py +40 -41
  50. openstackclient/identity/v3/group.py +11 -5
  51. openstackclient/identity/v3/identity_provider.py +12 -10
  52. openstackclient/identity/v3/implied_role.py +1 -1
  53. openstackclient/identity/v3/limit.py +86 -85
  54. openstackclient/identity/v3/mapping.py +1 -1
  55. openstackclient/identity/v3/policy.py +1 -1
  56. openstackclient/identity/v3/project.py +191 -115
  57. openstackclient/identity/v3/region.py +1 -1
  58. openstackclient/identity/v3/registered_limit.py +97 -109
  59. openstackclient/identity/v3/role.py +20 -39
  60. openstackclient/identity/v3/role_assignment.py +12 -23
  61. openstackclient/identity/v3/service.py +1 -1
  62. openstackclient/identity/v3/service_provider.py +1 -1
  63. openstackclient/identity/v3/tag.py +1 -11
  64. openstackclient/identity/v3/token.py +3 -2
  65. openstackclient/identity/v3/trust.py +4 -2
  66. openstackclient/identity/v3/unscoped_saml.py +1 -1
  67. openstackclient/identity/v3/user.py +22 -13
  68. openstackclient/image/v1/image.py +19 -16
  69. openstackclient/image/v2/cache.py +1 -1
  70. openstackclient/image/v2/image.py +16 -12
  71. openstackclient/image/v2/info.py +1 -1
  72. openstackclient/image/v2/metadef_namespaces.py +1 -1
  73. openstackclient/image/v2/metadef_objects.py +1 -1
  74. openstackclient/image/v2/metadef_properties.py +3 -2
  75. openstackclient/image/v2/metadef_resource_type_association.py +1 -1
  76. openstackclient/image/v2/metadef_resource_types.py +1 -1
  77. openstackclient/image/v2/task.py +1 -1
  78. openstackclient/network/common.py +10 -9
  79. openstackclient/network/v2/address_group.py +4 -3
  80. openstackclient/network/v2/address_scope.py +8 -6
  81. openstackclient/network/v2/default_security_group_rule.py +9 -8
  82. openstackclient/network/v2/floating_ip.py +16 -9
  83. openstackclient/network/v2/floating_ip_port_forwarding.py +9 -6
  84. openstackclient/network/v2/ip_availability.py +7 -4
  85. openstackclient/network/v2/l3_conntrack_helper.py +11 -4
  86. openstackclient/network/v2/local_ip.py +13 -7
  87. openstackclient/network/v2/local_ip_association.py +7 -4
  88. openstackclient/network/v2/ndp_proxy.py +13 -6
  89. openstackclient/network/v2/network.py +33 -16
  90. openstackclient/network/v2/network_agent.py +5 -5
  91. openstackclient/network/v2/network_auto_allocated_topology.py +1 -1
  92. openstackclient/network/v2/network_flavor.py +1 -1
  93. openstackclient/network/v2/network_flavor_profile.py +1 -1
  94. openstackclient/network/v2/network_meter.py +1 -1
  95. openstackclient/network/v2/network_meter_rule.py +1 -1
  96. openstackclient/network/v2/network_qos_policy.py +7 -5
  97. openstackclient/network/v2/network_qos_rule.py +1 -1
  98. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  99. openstackclient/network/v2/network_rbac.py +8 -5
  100. openstackclient/network/v2/network_segment.py +2 -2
  101. openstackclient/network/v2/network_segment_range.py +13 -6
  102. openstackclient/network/v2/network_service_provider.py +1 -1
  103. openstackclient/network/v2/network_trunk.py +65 -42
  104. openstackclient/network/v2/port.py +22 -20
  105. openstackclient/network/v2/router.py +19 -8
  106. openstackclient/network/v2/security_group.py +10 -6
  107. openstackclient/network/v2/security_group_rule.py +11 -5
  108. openstackclient/network/v2/subnet.py +17 -18
  109. openstackclient/network/v2/subnet_pool.py +11 -9
  110. openstackclient/network/v2/taas/__init__.py +0 -0
  111. openstackclient/network/v2/taas/tap_flow.py +245 -0
  112. openstackclient/network/v2/taas/tap_mirror.py +237 -0
  113. openstackclient/network/v2/taas/tap_service.py +211 -0
  114. openstackclient/object/v1/account.py +1 -1
  115. openstackclient/object/v1/container.py +1 -1
  116. openstackclient/object/v1/object.py +1 -1
  117. openstackclient/shell.py +18 -8
  118. openstackclient/tests/functional/identity/v3/test_catalog.py +42 -23
  119. openstackclient/tests/functional/identity/v3/test_limit.py +47 -0
  120. openstackclient/tests/functional/identity/v3/test_role_assignment.py +174 -0
  121. openstackclient/tests/functional/image/v2/test_cache.py +54 -0
  122. openstackclient/tests/functional/image/v2/test_metadef_objects.py +69 -0
  123. openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
  124. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +46 -132
  125. openstackclient/tests/unit/common/test_command.py +1 -1
  126. openstackclient/tests/unit/common/test_extension.py +2 -3
  127. openstackclient/tests/unit/common/test_module.py +14 -7
  128. openstackclient/tests/unit/common/test_quota.py +79 -0
  129. openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
  130. openstackclient/tests/unit/compute/v2/test_console.py +1 -4
  131. openstackclient/tests/unit/compute/v2/test_flavor.py +1 -3
  132. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
  133. openstackclient/tests/unit/compute/v2/test_server.py +370 -38
  134. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
  135. openstackclient/tests/unit/compute/v2/test_service.py +1 -3
  136. openstackclient/tests/unit/fakes.py +35 -134
  137. openstackclient/tests/unit/identity/test_common.py +100 -0
  138. openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
  139. openstackclient/tests/unit/identity/v3/fakes.py +10 -2
  140. openstackclient/tests/unit/identity/v3/test_application_credential.py +3 -3
  141. openstackclient/tests/unit/identity/v3/test_domain.py +1 -1
  142. openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
  143. openstackclient/tests/unit/identity/v3/test_group.py +4 -2
  144. openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
  145. openstackclient/tests/unit/identity/v3/test_limit.py +197 -145
  146. openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
  147. openstackclient/tests/unit/identity/v3/test_project.py +832 -513
  148. openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
  149. openstackclient/tests/unit/identity/v3/test_registered_limit.py +356 -221
  150. openstackclient/tests/unit/identity/v3/test_role.py +1 -82
  151. openstackclient/tests/unit/identity/v3/test_user.py +7 -51
  152. openstackclient/tests/unit/image/v2/test_image.py +116 -5
  153. openstackclient/tests/unit/network/test_common.py +9 -13
  154. openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
  155. openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
  156. openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
  157. openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
  158. openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
  159. openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
  160. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
  161. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
  162. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
  163. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
  164. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
  165. openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
  166. openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
  167. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +11 -21
  168. openstackclient/tests/unit/network/v2/test_network.py +41 -37
  169. openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
  170. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
  171. openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
  172. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
  173. openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
  174. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
  175. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
  176. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
  177. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
  178. openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
  179. openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
  180. openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
  181. openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
  182. openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
  183. openstackclient/tests/unit/network/v2/test_port.py +75 -86
  184. openstackclient/tests/unit/network/v2/test_router.py +104 -126
  185. openstackclient/tests/unit/network/v2/test_security_group_network.py +19 -26
  186. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +17 -18
  187. openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
  188. openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
  189. openstackclient/tests/unit/volume/test_find_resource.py +4 -13
  190. openstackclient/tests/unit/volume/v2/test_consistency_group.py +8 -2
  191. openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
  192. openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
  193. openstackclient/tests/unit/volume/v3/test_volume.py +38 -12
  194. openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
  195. openstackclient/volume/client.py +7 -17
  196. openstackclient/volume/v2/backup_record.py +1 -1
  197. openstackclient/volume/v2/consistency_group.py +9 -9
  198. openstackclient/volume/v2/consistency_group_snapshot.py +3 -3
  199. openstackclient/volume/v2/qos_specs.py +3 -3
  200. openstackclient/volume/v2/service.py +1 -1
  201. openstackclient/volume/v2/volume.py +14 -7
  202. openstackclient/volume/v2/volume_backend.py +1 -1
  203. openstackclient/volume/v2/volume_backup.py +7 -5
  204. openstackclient/volume/v2/volume_host.py +1 -2
  205. openstackclient/volume/v2/volume_snapshot.py +4 -4
  206. openstackclient/volume/v2/volume_transfer_request.py +3 -3
  207. openstackclient/volume/v2/volume_type.py +16 -11
  208. openstackclient/volume/v3/block_storage_cleanup.py +1 -1
  209. openstackclient/volume/v3/block_storage_cluster.py +1 -1
  210. openstackclient/volume/v3/block_storage_log_level.py +1 -1
  211. openstackclient/volume/v3/block_storage_manage.py +1 -1
  212. openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
  213. openstackclient/volume/v3/service.py +1 -1
  214. openstackclient/volume/v3/volume.py +16 -9
  215. openstackclient/volume/v3/volume_attachment.py +6 -5
  216. openstackclient/volume/v3/volume_backup.py +20 -5
  217. openstackclient/volume/v3/volume_group.py +1 -1
  218. openstackclient/volume/v3/volume_group_snapshot.py +1 -1
  219. openstackclient/volume/v3/volume_group_type.py +1 -1
  220. openstackclient/volume/v3/volume_message.py +1 -1
  221. openstackclient/volume/v3/volume_snapshot.py +4 -4
  222. openstackclient/volume/v3/volume_transfer_request.py +3 -3
  223. openstackclient/volume/v3/volume_type.py +20 -14
  224. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/METADATA +15 -13
  225. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/RECORD +231 -219
  226. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/WHEEL +1 -1
  227. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/entry_points.txt +15 -0
  228. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/AUTHORS +15 -0
  229. python_openstackclient-9.0.0.dist-info/pbr.json +1 -0
  230. openstackclient/tests/unit/common/test_logs.py +0 -221
  231. python_openstackclient-8.2.0.dist-info/pbr.json +0 -1
  232. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info/licenses}/LICENSE +0 -0
  233. {python_openstackclient-8.2.0.dist-info → python_openstackclient-9.0.0.dist-info}/top_level.txt +0 -0
@@ -15,8 +15,6 @@
15
15
 
16
16
  from unittest import mock
17
17
 
18
- from osc_lib import exceptions
19
-
20
18
  from openstack import exceptions as sdk_exc
21
19
  from openstack.identity.v3 import domain as _domain
22
20
  from openstack.identity.v3 import group as _group
@@ -25,10 +23,10 @@ from openstack.identity.v3 import role as _role
25
23
  from openstack.identity.v3 import system as _system
26
24
  from openstack.identity.v3 import user as _user
27
25
  from openstack.test import fakes as sdk_fakes
26
+ from osc_lib import exceptions
28
27
 
29
28
  from openstackclient.identity.v3 import role
30
29
  from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
31
- from openstackclient.tests.unit import utils as test_utils
32
30
 
33
31
 
34
32
  class TestRoleInherited(identity_fakes.TestIdentityv3):
@@ -36,85 +34,6 @@ class TestRoleInherited(identity_fakes.TestIdentityv3):
36
34
  return True
37
35
 
38
36
 
39
- class TestFindSDKId(test_utils.TestCase):
40
- def setUp(self):
41
- super().setUp()
42
- self.user = sdk_fakes.generate_fake_resource(_user.User)
43
- self.identity_sdk_client = mock.Mock()
44
- self.identity_sdk_client.find_user = mock.Mock()
45
-
46
- def test_find_sdk_id_validate(self):
47
- self.identity_sdk_client.find_user.side_effect = [self.user]
48
-
49
- result = role._find_sdk_id(
50
- self.identity_sdk_client.find_user,
51
- name_or_id=self.user.id,
52
- validate_actor_existence=True,
53
- )
54
- self.assertEqual(self.user.id, result)
55
-
56
- def test_find_sdk_id_no_validate(self):
57
- self.identity_sdk_client.find_user.side_effect = [self.user]
58
-
59
- result = role._find_sdk_id(
60
- self.identity_sdk_client.find_user,
61
- name_or_id=self.user.id,
62
- validate_actor_existence=False,
63
- )
64
- self.assertEqual(self.user.id, result)
65
-
66
- def test_find_sdk_id_not_found_validate(self):
67
- self.identity_sdk_client.find_user.side_effect = [
68
- sdk_exc.ResourceNotFound,
69
- ]
70
-
71
- self.assertRaises(
72
- exceptions.CommandError,
73
- role._find_sdk_id,
74
- self.identity_sdk_client.find_user,
75
- name_or_id=self.user.id,
76
- validate_actor_existence=True,
77
- )
78
-
79
- def test_find_sdk_id_not_found_no_validate(self):
80
- self.identity_sdk_client.find_user.side_effect = [
81
- sdk_exc.ResourceNotFound,
82
- ]
83
-
84
- result = role._find_sdk_id(
85
- self.identity_sdk_client.find_user,
86
- name_or_id=self.user.id,
87
- validate_actor_existence=False,
88
- )
89
- self.assertEqual(self.user.id, result)
90
-
91
- def test_find_sdk_id_forbidden_validate(self):
92
- self.identity_sdk_client.find_user.side_effect = [
93
- sdk_exc.ForbiddenException,
94
- ]
95
-
96
- result = role._find_sdk_id(
97
- self.identity_sdk_client.find_user,
98
- name_or_id=self.user.id,
99
- validate_actor_existence=True,
100
- )
101
-
102
- self.assertEqual(self.user.id, result)
103
-
104
- def test_find_sdk_id_forbidden_no_validate(self):
105
- self.identity_sdk_client.find_user.side_effect = [
106
- sdk_exc.ForbiddenException,
107
- ]
108
-
109
- result = role._find_sdk_id(
110
- self.identity_sdk_client.find_user,
111
- name_or_id=self.user.id,
112
- validate_actor_existence=False,
113
- )
114
-
115
- self.assertEqual(self.user.id, result)
116
-
117
-
118
37
  class TestRoleAdd(identity_fakes.TestIdentityv3):
119
38
  def _is_inheritance_testcase(self):
120
39
  return False
@@ -94,7 +94,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
94
94
  kwargs = {
95
95
  'name': self.user.name,
96
96
  'is_enabled': True,
97
- 'password': None,
98
97
  }
99
98
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
100
99
 
@@ -138,7 +137,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
138
137
  self.user.name,
139
138
  ]
140
139
  verifylist = [
141
- ('password', None),
142
140
  ('password_prompt', True),
143
141
  ('enable', False),
144
142
  ('disable', False),
@@ -171,7 +169,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
171
169
  self.user.name,
172
170
  ]
173
171
  verifylist = [
174
- ('password', None),
175
172
  ('password_prompt', True),
176
173
  ('enable', False),
177
174
  ('disable', False),
@@ -236,7 +233,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
236
233
  'name': self.user.name,
237
234
  'email': 'barney@example.com',
238
235
  'is_enabled': True,
239
- 'password': None,
240
236
  }
241
237
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
242
238
 
@@ -267,7 +263,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
267
263
  'name': self.user.name,
268
264
  'default_project_id': self.project.id,
269
265
  'is_enabled': True,
270
- 'password': None,
271
266
  }
272
267
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
273
268
 
@@ -312,7 +307,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
312
307
  'name': self.user.name,
313
308
  'default_project_id': self.project.id,
314
309
  'is_enabled': True,
315
- 'password': None,
316
310
  }
317
311
  self.identity_sdk_client.create_user.assert_called_once_with(**kwargs)
318
312
  self.identity_sdk_client.find_domain.assert_called_once_with(
@@ -357,7 +351,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
357
351
  'name': self.user.name,
358
352
  'domain_id': self.domain.id,
359
353
  'is_enabled': True,
360
- 'password': None,
361
354
  }
362
355
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
363
356
 
@@ -385,7 +378,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
385
378
  kwargs = {
386
379
  'name': self.user.name,
387
380
  'is_enabled': True,
388
- 'password': None,
389
381
  }
390
382
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
391
383
 
@@ -413,7 +405,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
413
405
  kwargs = {
414
406
  'name': self.user.name,
415
407
  'is_enabled': False,
416
- 'password': None,
417
408
  }
418
409
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
419
410
 
@@ -443,7 +434,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
443
434
  'name': self.user.name,
444
435
  'is_enabled': True,
445
436
  'options': {'ignore_lockout_failure_attempts': True},
446
- 'password': None,
447
437
  }
448
438
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
449
439
 
@@ -473,7 +463,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
473
463
  'name': self.user.name,
474
464
  'is_enabled': True,
475
465
  'options': {'ignore_lockout_failure_attempts': False},
476
- 'password': None,
477
466
  }
478
467
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
479
468
 
@@ -503,7 +492,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
503
492
  'name': self.user.name,
504
493
  'is_enabled': True,
505
494
  'options': {'ignore_password_expiry': True},
506
- 'password': None,
507
495
  }
508
496
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
509
497
 
@@ -533,7 +521,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
533
521
  'name': self.user.name,
534
522
  'is_enabled': True,
535
523
  'options': {'ignore_password_expiry': False},
536
- 'password': None,
537
524
  }
538
525
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
539
526
 
@@ -563,7 +550,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
563
550
  'name': self.user.name,
564
551
  'is_enabled': True,
565
552
  'options': {'ignore_change_password_upon_first_use': True},
566
- 'password': None,
567
553
  }
568
554
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
569
555
 
@@ -593,7 +579,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
593
579
  'name': self.user.name,
594
580
  'is_enabled': True,
595
581
  'options': {'ignore_change_password_upon_first_use': False},
596
- 'password': None,
597
582
  }
598
583
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
599
584
 
@@ -623,7 +608,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
623
608
  'name': self.user.name,
624
609
  'is_enabled': True,
625
610
  'options': {'lock_password': True},
626
- 'password': None,
627
611
  }
628
612
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
629
613
 
@@ -653,7 +637,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
653
637
  'name': self.user.name,
654
638
  'is_enabled': True,
655
639
  'options': {'lock_password': False},
656
- 'password': None,
657
640
  }
658
641
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
659
642
 
@@ -683,7 +666,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
683
666
  'name': self.user.name,
684
667
  'is_enabled': True,
685
668
  'options': {'multi_factor_auth_enabled': True},
686
- 'password': None,
687
669
  }
688
670
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
689
671
 
@@ -713,7 +695,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
713
695
  'name': self.user.name,
714
696
  'is_enabled': True,
715
697
  'options': {'multi_factor_auth_enabled': False},
716
- 'password': None,
717
698
  }
718
699
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
719
700
 
@@ -730,7 +711,7 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
730
711
  ]
731
712
  verifylist = [
732
713
  (
733
- 'multi_factor_auth_rule',
714
+ 'multi_factor_auth_rules',
734
715
  [identity_fakes.mfa_opt1, identity_fakes.mfa_opt2],
735
716
  ),
736
717
  ('enable', False),
@@ -751,7 +732,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
751
732
  'options': {
752
733
  'multi_factor_auth_rules': [["password", "totp"], ["password"]]
753
734
  },
754
- 'password': None,
755
735
  }
756
736
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
757
737
 
@@ -769,7 +749,7 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
769
749
  verifylist = [
770
750
  ('ignore_password_expiry', True),
771
751
  ('disable_multi_factor_auth', True),
772
- ('multi_factor_auth_rule', [identity_fakes.mfa_opt1]),
752
+ ('multi_factor_auth_rules', [identity_fakes.mfa_opt1]),
773
753
  ('enable', False),
774
754
  ('disable', False),
775
755
  ('name', self.user.name),
@@ -790,7 +770,6 @@ class TestUserCreate(identity_fakes.TestIdentityv3):
790
770
  'multi_factor_auth_enabled': False,
791
771
  'multi_factor_auth_rules': [["password", "totp"]],
792
772
  },
793
- 'password': None,
794
773
  }
795
774
  self.identity_sdk_client.create_user.assert_called_with(**kwargs)
796
775
 
@@ -891,7 +870,7 @@ class TestUserList(identity_fakes.TestIdentityv3):
891
870
  self.identity_sdk_client.find_domain.return_value = self.domain
892
871
  self.identity_sdk_client.find_group.return_value = self.group
893
872
  self.identity_sdk_client.find_project.return_value = self.project
894
- self.identity_sdk_client.role_assignments_filter.return_value = [
873
+ self.identity_sdk_client.role_assignments.return_value = [
895
874
  self.role_assignment
896
875
  ]
897
876
 
@@ -1029,12 +1008,10 @@ class TestUserList(identity_fakes.TestIdentityv3):
1029
1008
  columns, data = self.cmd.take_action(parsed_args)
1030
1009
 
1031
1010
  kwargs = {
1032
- 'project': self.project.id,
1011
+ 'scope_project_id': self.project.id,
1033
1012
  }
1034
1013
 
1035
- self.identity_sdk_client.role_assignments_filter.assert_called_with(
1036
- **kwargs
1037
- )
1014
+ self.identity_sdk_client.role_assignments.assert_called_with(**kwargs)
1038
1015
 
1039
1016
  self.assertEqual(self.columns, columns)
1040
1017
  self.assertEqual(self.datalist, tuple(data))
@@ -1086,7 +1063,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1086
1063
  ]
1087
1064
  verifylist = [
1088
1065
  ('name', None),
1089
- ('password', None),
1090
1066
  ('email', None),
1091
1067
  ('project', None),
1092
1068
  ('enable', False),
@@ -1107,7 +1083,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1107
1083
  ]
1108
1084
  verifylist = [
1109
1085
  ('name', 'qwerty'),
1110
- ('password', None),
1111
1086
  ('email', None),
1112
1087
  ('project', None),
1113
1088
  ('enable', False),
@@ -1138,7 +1113,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1138
1113
  ]
1139
1114
  verifylist = [
1140
1115
  ('name', 'qwerty'),
1141
- ('password', None),
1142
1116
  ('domain', self.domain.id),
1143
1117
  ('email', None),
1144
1118
  ('project', None),
@@ -1194,7 +1168,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1194
1168
  ]
1195
1169
  verifylist = [
1196
1170
  ('name', None),
1197
- ('password', None),
1198
1171
  ('password_prompt', True),
1199
1172
  ('email', None),
1200
1173
  ('project', None),
@@ -1227,7 +1200,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1227
1200
  ]
1228
1201
  verifylist = [
1229
1202
  ('name', None),
1230
- ('password', None),
1231
1203
  ('email', 'barney@example.com'),
1232
1204
  ('project', None),
1233
1205
  ('enable', False),
@@ -1256,7 +1228,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1256
1228
  ]
1257
1229
  verifylist = [
1258
1230
  ('name', None),
1259
- ('password', None),
1260
1231
  ('email', None),
1261
1232
  ('project', self.project.id),
1262
1233
  ('enable', False),
@@ -1298,7 +1269,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1298
1269
  ]
1299
1270
  verifylist = [
1300
1271
  ('name', None),
1301
- ('password', None),
1302
1272
  ('email', None),
1303
1273
  ('project', self.project.id),
1304
1274
  ('project_domain', self.project.domain_id),
@@ -1332,7 +1302,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1332
1302
  ]
1333
1303
  verifylist = [
1334
1304
  ('name', None),
1335
- ('password', None),
1336
1305
  ('email', None),
1337
1306
  ('project', None),
1338
1307
  ('enable', True),
@@ -1359,7 +1328,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1359
1328
  ]
1360
1329
  verifylist = [
1361
1330
  ('name', None),
1362
- ('password', None),
1363
1331
  ('email', None),
1364
1332
  ('project', None),
1365
1333
  ('enable', False),
@@ -1386,7 +1354,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1386
1354
  ]
1387
1355
  verifylist = [
1388
1356
  ('name', None),
1389
- ('password', None),
1390
1357
  ('email', None),
1391
1358
  ('ignore_lockout_failure_attempts', True),
1392
1359
  ('project', None),
@@ -1414,7 +1381,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1414
1381
  ]
1415
1382
  verifylist = [
1416
1383
  ('name', None),
1417
- ('password', None),
1418
1384
  ('email', None),
1419
1385
  ('no_ignore_lockout_failure_attempts', True),
1420
1386
  ('project', None),
@@ -1442,7 +1408,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1442
1408
  ]
1443
1409
  verifylist = [
1444
1410
  ('name', None),
1445
- ('password', None),
1446
1411
  ('email', None),
1447
1412
  ('ignore_password_expiry', True),
1448
1413
  ('project', None),
@@ -1470,7 +1435,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1470
1435
  ]
1471
1436
  verifylist = [
1472
1437
  ('name', None),
1473
- ('password', None),
1474
1438
  ('email', None),
1475
1439
  ('no_ignore_password_expiry', True),
1476
1440
  ('project', None),
@@ -1498,7 +1462,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1498
1462
  ]
1499
1463
  verifylist = [
1500
1464
  ('name', None),
1501
- ('password', None),
1502
1465
  ('email', None),
1503
1466
  ('ignore_change_password_upon_first_use', True),
1504
1467
  ('project', None),
@@ -1526,7 +1489,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1526
1489
  ]
1527
1490
  verifylist = [
1528
1491
  ('name', None),
1529
- ('password', None),
1530
1492
  ('email', None),
1531
1493
  ('no_ignore_change_password_upon_first_use', True),
1532
1494
  ('project', None),
@@ -1554,7 +1516,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1554
1516
  ]
1555
1517
  verifylist = [
1556
1518
  ('name', None),
1557
- ('password', None),
1558
1519
  ('email', None),
1559
1520
  ('enable_lock_password', True),
1560
1521
  ('project', None),
@@ -1582,7 +1543,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1582
1543
  ]
1583
1544
  verifylist = [
1584
1545
  ('name', None),
1585
- ('password', None),
1586
1546
  ('email', None),
1587
1547
  ('disable_lock_password', True),
1588
1548
  ('project', None),
@@ -1610,7 +1570,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1610
1570
  ]
1611
1571
  verifylist = [
1612
1572
  ('name', None),
1613
- ('password', None),
1614
1573
  ('email', None),
1615
1574
  ('enable_multi_factor_auth', True),
1616
1575
  ('project', None),
@@ -1638,7 +1597,6 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1638
1597
  ]
1639
1598
  verifylist = [
1640
1599
  ('name', None),
1641
- ('password', None),
1642
1600
  ('email', None),
1643
1601
  ('disable_multi_factor_auth', True),
1644
1602
  ('project', None),
@@ -1667,9 +1625,8 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1667
1625
  ]
1668
1626
  verifylist = [
1669
1627
  ('name', None),
1670
- ('password', None),
1671
1628
  ('email', None),
1672
- ('multi_factor_auth_rule', [identity_fakes.mfa_opt1]),
1629
+ ('multi_factor_auth_rules', [identity_fakes.mfa_opt1]),
1673
1630
  ('project', None),
1674
1631
  ('enable', False),
1675
1632
  ('disable', False),
@@ -1699,11 +1656,10 @@ class TestUserSet(identity_fakes.TestIdentityv3):
1699
1656
  ]
1700
1657
  verifylist = [
1701
1658
  ('name', None),
1702
- ('password', None),
1703
1659
  ('email', None),
1704
1660
  ('ignore_password_expiry', True),
1705
1661
  ('enable_multi_factor_auth', True),
1706
- ('multi_factor_auth_rule', [identity_fakes.mfa_opt1]),
1662
+ ('multi_factor_auth_rules', [identity_fakes.mfa_opt1]),
1707
1663
  ('project', None),
1708
1664
  ('enable', False),
1709
1665
  ('disable', False),
@@ -1295,6 +1295,117 @@ class TestImageSet(TestImage):
1295
1295
  # the 'update membership' route.
1296
1296
  self.image_client.update_image.assert_called_with(self._image.id)
1297
1297
 
1298
+ def test_image_set_membership_accept_with_project_no_owner_change(self):
1299
+ """Test that --project with --accept doesn't change image owner."""
1300
+ membership = image_fakes.create_one_image_member(
1301
+ attrs={
1302
+ 'image_id': '0f41529e-7c12-4de8-be2d-181abb825b3c',
1303
+ 'member_id': self.project.id,
1304
+ }
1305
+ )
1306
+ self.image_client.update_member.return_value = membership
1307
+
1308
+ arglist = [
1309
+ '--project',
1310
+ self.project.name,
1311
+ '--accept',
1312
+ self._image.id,
1313
+ ]
1314
+ verifylist = [
1315
+ ('project', self.project.name),
1316
+ ('membership', 'accepted'),
1317
+ ('image', self._image.id),
1318
+ ]
1319
+
1320
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1321
+ self.cmd.take_action(parsed_args)
1322
+
1323
+ self.image_client.update_member.assert_called_once_with(
1324
+ image=self._image.id,
1325
+ member=self.project.id,
1326
+ status='accepted',
1327
+ )
1328
+
1329
+ self.image_client.update_image.assert_called()
1330
+ call_args = self.image_client.update_image.call_args
1331
+ if call_args:
1332
+ args, kwargs = call_args
1333
+ self.assertNotIn('owner_id', kwargs)
1334
+
1335
+ def test_image_set_membership_reject_with_project_no_owner_change(self):
1336
+ """Test that --project with --reject doesn't change image owner."""
1337
+ membership = image_fakes.create_one_image_member(
1338
+ attrs={
1339
+ 'image_id': '0f41529e-7c12-4de8-be2d-181abb825b3c',
1340
+ 'member_id': self.project.id,
1341
+ }
1342
+ )
1343
+ self.image_client.update_member.return_value = membership
1344
+
1345
+ arglist = [
1346
+ '--project',
1347
+ self.project.name,
1348
+ '--reject',
1349
+ self._image.id,
1350
+ ]
1351
+ verifylist = [
1352
+ ('project', self.project.name),
1353
+ ('membership', 'rejected'),
1354
+ ('image', self._image.id),
1355
+ ]
1356
+
1357
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1358
+ self.cmd.take_action(parsed_args)
1359
+
1360
+ self.image_client.update_member.assert_called_once_with(
1361
+ image=self._image.id,
1362
+ member=self.project.id,
1363
+ status='rejected',
1364
+ )
1365
+
1366
+ self.image_client.update_image.assert_called()
1367
+ call_args = self.image_client.update_image.call_args
1368
+ if call_args:
1369
+ args, kwargs = call_args
1370
+ self.assertNotIn('owner_id', kwargs)
1371
+
1372
+ def test_image_set_membership_pending_with_project_no_owner_change(self):
1373
+ """Test that --project with --pending doesn't change image owner."""
1374
+ membership = image_fakes.create_one_image_member(
1375
+ attrs={
1376
+ 'image_id': '0f41529e-7c12-4de8-be2d-181abb825b3c',
1377
+ 'member_id': self.project.id,
1378
+ }
1379
+ )
1380
+ self.image_client.update_member.return_value = membership
1381
+
1382
+ arglist = [
1383
+ '--project',
1384
+ self.project.name,
1385
+ '--pending',
1386
+ self._image.id,
1387
+ ]
1388
+ verifylist = [
1389
+ ('project', self.project.name),
1390
+ ('membership', 'pending'),
1391
+ ('image', self._image.id),
1392
+ ]
1393
+
1394
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1395
+ self.cmd.take_action(parsed_args)
1396
+
1397
+ self.image_client.update_member.assert_called_once_with(
1398
+ image=self._image.id,
1399
+ member=self.project.id,
1400
+ status='pending',
1401
+ )
1402
+
1403
+ self.image_client.update_image.assert_called()
1404
+ call_args = self.image_client.update_image.call_args
1405
+ if call_args:
1406
+ args, kwargs = call_args
1407
+ self.assertNotIn('owner_id', kwargs)
1408
+
1298
1409
  def test_image_set_options(self):
1299
1410
  arglist = [
1300
1411
  '--name',
@@ -1974,7 +2085,7 @@ class TestImageImport(TestImage):
1974
2085
  remote_image_id=None,
1975
2086
  remote_service_interface=None,
1976
2087
  stores=None,
1977
- all_stores=None,
2088
+ all_stores=False,
1978
2089
  all_stores_must_succeed=False,
1979
2090
  )
1980
2091
 
@@ -2004,7 +2115,7 @@ class TestImageImport(TestImage):
2004
2115
  remote_image_id=None,
2005
2116
  remote_service_interface=None,
2006
2117
  stores=None,
2007
- all_stores=None,
2118
+ all_stores=False,
2008
2119
  all_stores_must_succeed=False,
2009
2120
  )
2010
2121
 
@@ -2142,7 +2253,7 @@ class TestImageImport(TestImage):
2142
2253
  remote_image_id=None,
2143
2254
  remote_service_interface=None,
2144
2255
  stores=['fast'],
2145
- all_stores=None,
2256
+ all_stores=False,
2146
2257
  all_stores_must_succeed=False,
2147
2258
  )
2148
2259
 
@@ -2174,7 +2285,7 @@ class TestImageImport(TestImage):
2174
2285
  remote_image_id=None,
2175
2286
  remote_service_interface=None,
2176
2287
  stores=['fast'],
2177
- all_stores=None,
2288
+ all_stores=False,
2178
2289
  all_stores_must_succeed=True,
2179
2290
  )
2180
2291
 
@@ -2209,7 +2320,7 @@ class TestImageImport(TestImage):
2209
2320
  remote_image_id='remote-image-id',
2210
2321
  remote_service_interface='private',
2211
2322
  stores=None,
2212
- all_stores=None,
2323
+ all_stores=False,
2213
2324
  all_stores_must_succeed=False,
2214
2325
  )
2215
2326
 
@@ -126,17 +126,13 @@ class TestNetworkAndCompute(utils.TestCommand):
126
126
  # Create client mocks. Note that we intentionally do not use specced
127
127
  # mocks since we want to test fake methods.
128
128
 
129
- self.app.client_manager.network = mock.Mock()
130
- self.network_client = self.app.client_manager.network
131
- self.network_client.network_action = mock.Mock(
132
- return_value='take_action_network'
133
- )
129
+ self.app.client_manager.network = mock.Mock() # noqa: O401
130
+ self.network_client = self.app.client_manager.network # noqa: O401
131
+ self.network_client.network_action.return_value = 'take_action_network'
134
132
 
135
- self.app.client_manager.compute = mock.Mock()
136
- self.compute_client = self.app.client_manager.compute
137
- self.compute_client.compute_action = mock.Mock(
138
- return_value='take_action_compute'
139
- )
133
+ self.app.client_manager.compute = mock.Mock() # noqa: O401
134
+ self.compute_client = self.app.client_manager.compute # noqa: O401
135
+ self.compute_client.compute_action.return_value = 'take_action_compute'
140
136
 
141
137
  self.cmd = FakeNetworkAndComputeCommand(self.app, None)
142
138
 
@@ -205,9 +201,9 @@ class TestNeutronCommandWithExtraArgs(utils.TestCommand):
205
201
  # Create client mocks. Note that we intentionally do not use specced
206
202
  # mocks since we want to test fake methods.
207
203
 
208
- self.app.client_manager.network = mock.Mock()
209
- self.network_client = self.app.client_manager.network
210
- self.network_client.test_create_action = mock.Mock()
204
+ self.app.client_manager.network = mock.Mock() # noqa: O401
205
+ self.network_client = self.app.client_manager.network # noqa: O401
206
+ self.network_client.test_create_action = mock.Mock() # noqa: O402
211
207
 
212
208
  # Subclasses can override the command object to test.
213
209
  self.cmd = FakeCreateNeutronCommandWithExtraArgs(self.app, None)
File without changes