python-openstackclient 8.2.0__py3-none-any.whl → 8.3.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 (226) 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 +4 -2
  9. openstackclient/common/project_cleanup.py +10 -8
  10. openstackclient/common/quota.py +23 -6
  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 +76 -27
  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 +2 -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 +1 -1
  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 +1 -1
  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 +1 -1
  54. openstackclient/identity/v3/mapping.py +1 -1
  55. openstackclient/identity/v3/policy.py +1 -1
  56. openstackclient/identity/v3/project.py +10 -3
  57. openstackclient/identity/v3/region.py +1 -1
  58. openstackclient/identity/v3/registered_limit.py +16 -11
  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 +3 -2
  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 +14 -11
  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_role_assignment.py +174 -0
  120. openstackclient/tests/functional/image/v2/test_cache.py +54 -0
  121. openstackclient/tests/functional/image/v2/test_metadef_resource_type.py +55 -0
  122. openstackclient/tests/unit/common/test_command.py +1 -1
  123. openstackclient/tests/unit/common/test_extension.py +2 -3
  124. openstackclient/tests/unit/common/test_module.py +14 -7
  125. openstackclient/tests/unit/common/test_quota.py +20 -0
  126. openstackclient/tests/unit/compute/v2/test_aggregate.py +5 -3
  127. openstackclient/tests/unit/compute/v2/test_console.py +1 -4
  128. openstackclient/tests/unit/compute/v2/test_flavor.py +1 -3
  129. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -9
  130. openstackclient/tests/unit/compute/v2/test_server.py +364 -30
  131. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -3
  132. openstackclient/tests/unit/compute/v2/test_service.py +1 -3
  133. openstackclient/tests/unit/fakes.py +35 -134
  134. openstackclient/tests/unit/identity/test_common.py +100 -0
  135. openstackclient/tests/unit/identity/v2_0/test_project.py +4 -4
  136. openstackclient/tests/unit/identity/v3/fakes.py +10 -2
  137. openstackclient/tests/unit/identity/v3/test_application_credential.py +3 -3
  138. openstackclient/tests/unit/identity/v3/test_domain.py +1 -1
  139. openstackclient/tests/unit/identity/v3/test_endpoint.py +1 -1
  140. openstackclient/tests/unit/identity/v3/test_group.py +4 -2
  141. openstackclient/tests/unit/identity/v3/test_identity_provider.py +10 -10
  142. openstackclient/tests/unit/identity/v3/test_oauth.py +1 -1
  143. openstackclient/tests/unit/identity/v3/test_project.py +1 -1
  144. openstackclient/tests/unit/identity/v3/test_registered_limit.py +2 -2
  145. openstackclient/tests/unit/identity/v3/test_role.py +1 -82
  146. openstackclient/tests/unit/identity/v3/test_user.py +7 -51
  147. openstackclient/tests/unit/image/v2/test_image.py +111 -0
  148. openstackclient/tests/unit/network/test_common.py +9 -13
  149. openstackclient/tests/unit/network/v2/taas/__init__.py +0 -0
  150. openstackclient/tests/unit/network/v2/taas/test_osc_tap_flow.py +276 -0
  151. openstackclient/tests/unit/network/v2/taas/test_osc_tap_mirror.py +288 -0
  152. openstackclient/tests/unit/network/v2/taas/test_osc_tap_service.py +271 -0
  153. openstackclient/tests/unit/network/v2/test_address_group.py +19 -22
  154. openstackclient/tests/unit/network/v2/test_address_scope.py +10 -15
  155. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +38 -49
  156. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +21 -27
  157. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +21 -18
  158. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -8
  159. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +6 -15
  160. openstackclient/tests/unit/network/v2/test_local_ip.py +12 -23
  161. openstackclient/tests/unit/network/v2/test_local_ip_association.py +13 -18
  162. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +11 -21
  163. openstackclient/tests/unit/network/v2/test_network.py +41 -37
  164. openstackclient/tests/unit/network/v2/test_network_agent.py +13 -20
  165. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +5 -8
  166. openstackclient/tests/unit/network/v2/test_network_flavor.py +14 -26
  167. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +14 -17
  168. openstackclient/tests/unit/network/v2/test_network_meter.py +7 -17
  169. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +10 -20
  170. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +7 -13
  171. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +44 -54
  172. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +2 -7
  173. openstackclient/tests/unit/network/v2/test_network_rbac.py +21 -36
  174. openstackclient/tests/unit/network/v2/test_network_segment.py +13 -29
  175. openstackclient/tests/unit/network/v2/test_network_segment_range.py +20 -19
  176. openstackclient/tests/unit/network/v2/test_network_service_provider.py +1 -4
  177. openstackclient/tests/unit/network/v2/test_network_trunk.py +52 -47
  178. openstackclient/tests/unit/network/v2/test_port.py +75 -86
  179. openstackclient/tests/unit/network/v2/test_router.py +104 -126
  180. openstackclient/tests/unit/network/v2/test_security_group_network.py +19 -26
  181. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +17 -18
  182. openstackclient/tests/unit/network/v2/test_subnet.py +35 -46
  183. openstackclient/tests/unit/network/v2/test_subnet_pool.py +21 -33
  184. openstackclient/tests/unit/volume/test_find_resource.py +4 -13
  185. openstackclient/tests/unit/volume/v2/test_volume_backup.py +3 -1
  186. openstackclient/tests/unit/volume/v3/test_volume.py +4 -0
  187. openstackclient/tests/unit/volume/v3/test_volume_backup.py +9 -0
  188. openstackclient/volume/client.py +7 -17
  189. openstackclient/volume/v2/backup_record.py +1 -1
  190. openstackclient/volume/v2/consistency_group.py +1 -1
  191. openstackclient/volume/v2/consistency_group_snapshot.py +1 -1
  192. openstackclient/volume/v2/qos_specs.py +1 -1
  193. openstackclient/volume/v2/service.py +1 -1
  194. openstackclient/volume/v2/volume.py +2 -2
  195. openstackclient/volume/v2/volume_backend.py +1 -1
  196. openstackclient/volume/v2/volume_backup.py +5 -3
  197. openstackclient/volume/v2/volume_host.py +1 -2
  198. openstackclient/volume/v2/volume_snapshot.py +2 -2
  199. openstackclient/volume/v2/volume_transfer_request.py +1 -1
  200. openstackclient/volume/v2/volume_type.py +11 -6
  201. openstackclient/volume/v3/block_storage_cleanup.py +1 -1
  202. openstackclient/volume/v3/block_storage_cluster.py +1 -1
  203. openstackclient/volume/v3/block_storage_log_level.py +1 -1
  204. openstackclient/volume/v3/block_storage_manage.py +1 -1
  205. openstackclient/volume/v3/block_storage_resource_filter.py +1 -1
  206. openstackclient/volume/v3/service.py +1 -1
  207. openstackclient/volume/v3/volume.py +2 -2
  208. openstackclient/volume/v3/volume_attachment.py +6 -5
  209. openstackclient/volume/v3/volume_backup.py +18 -3
  210. openstackclient/volume/v3/volume_group.py +1 -1
  211. openstackclient/volume/v3/volume_group_snapshot.py +1 -1
  212. openstackclient/volume/v3/volume_group_type.py +1 -1
  213. openstackclient/volume/v3/volume_message.py +1 -1
  214. openstackclient/volume/v3/volume_snapshot.py +2 -2
  215. openstackclient/volume/v3/volume_transfer_request.py +1 -1
  216. openstackclient/volume/v3/volume_type.py +15 -9
  217. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/METADATA +15 -13
  218. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/RECORD +224 -213
  219. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/WHEEL +1 -1
  220. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/entry_points.txt +15 -0
  221. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/AUTHORS +10 -0
  222. python_openstackclient-8.3.0.dist-info/pbr.json +1 -0
  223. openstackclient/tests/unit/common/test_logs.py +0 -221
  224. python_openstackclient-8.2.0.dist-info/pbr.json +0 -1
  225. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info/licenses}/LICENSE +0 -0
  226. {python_openstackclient-8.2.0.dist-info → python_openstackclient-8.3.0.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,6 @@
11
11
  # under the License.
12
12
  #
13
13
 
14
- from unittest import mock
15
14
  from unittest.mock import call
16
15
 
17
16
  from osc_lib.cli import format_columns
@@ -266,19 +265,14 @@ class TestCreateSubnet(TestSubnet):
266
265
  self.domains_mock.get.return_value = self.domain
267
266
 
268
267
  # Mock SDK calls for all tests.
269
- self.network_client.create_subnet = mock.Mock(
270
- return_value=self._subnet
271
- )
272
- self.network_client.set_tags = mock.Mock(return_value=None)
273
- self.network_client.find_network = mock.Mock(
274
- return_value=self._network
275
- )
276
- self.network_client.find_segment = mock.Mock(
277
- return_value=self._network_segment
278
- )
279
- self.network_client.find_subnet_pool = mock.Mock(
280
- return_value=self._subnet_pool
281
- )
268
+ self.network_client.create_subnet.return_value = self._subnet
269
+
270
+ self.network_client.set_tags.return_value = None
271
+ self.network_client.find_network.return_value = self._network
272
+
273
+ self.network_client.find_segment.return_value = self._network_segment
274
+
275
+ self.network_client.find_subnet_pool.return_value = self._subnet_pool
282
276
 
283
277
  def test_create_no_options(self):
284
278
  arglist = []
@@ -333,7 +327,7 @@ class TestCreateSubnet(TestSubnet):
333
327
  def test_create_from_subnet_pool_options(self):
334
328
  # Mock SDK calls for this test.
335
329
  self.network_client.create_subnet.return_value = self._subnet_from_pool
336
- self.network_client.set_tags = mock.Mock(return_value=None)
330
+ self.network_client.set_tags.return_value = None
337
331
  self._network.id = self._subnet_from_pool.network_id
338
332
 
339
333
  arglist = [
@@ -721,7 +715,7 @@ class TestDeleteSubnet(TestSubnet):
721
715
  def setUp(self):
722
716
  super().setUp()
723
717
 
724
- self.network_client.delete_subnet = mock.Mock(return_value=None)
718
+ self.network_client.delete_subnet.return_value = None
725
719
 
726
720
  self.network_client.find_subnet = network_fakes.FakeSubnet.get_subnets(
727
721
  self._subnets
@@ -775,9 +769,7 @@ class TestDeleteSubnet(TestSubnet):
775
769
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
776
770
 
777
771
  find_mock_result = [self._subnets[0], exceptions.CommandError]
778
- self.network_client.find_subnet = mock.Mock(
779
- side_effect=find_mock_result
780
- )
772
+ self.network_client.find_subnet.side_effect = find_mock_result
781
773
 
782
774
  try:
783
775
  self.cmd.take_action(parsed_args)
@@ -855,7 +847,7 @@ class TestListSubnet(TestSubnet):
855
847
  # Get the command object to test
856
848
  self.cmd = subnet_v2.ListSubnet(self.app, None)
857
849
 
858
- self.network_client.subnets = mock.Mock(return_value=self._subnet)
850
+ self.network_client.subnets.return_value = self._subnet
859
851
 
860
852
  def test_subnet_list_no_options(self):
861
853
  arglist = []
@@ -1019,7 +1011,7 @@ class TestListSubnet(TestSubnet):
1019
1011
 
1020
1012
  def test_subnet_list_network(self):
1021
1013
  network = network_fakes.create_one_network()
1022
- self.network_client.find_network = mock.Mock(return_value=network)
1014
+ self.network_client.find_network.return_value = network
1023
1015
  arglist = [
1024
1016
  '--network',
1025
1017
  network.id,
@@ -1038,7 +1030,7 @@ class TestListSubnet(TestSubnet):
1038
1030
 
1039
1031
  def test_subnet_list_gateway(self):
1040
1032
  subnet = network_fakes.FakeSubnet.create_one_subnet()
1041
- self.network_client.find_network = mock.Mock(return_value=subnet)
1033
+ self.network_client.find_network.return_value = subnet
1042
1034
  arglist = [
1043
1035
  '--gateway',
1044
1036
  subnet.gateway_ip,
@@ -1057,7 +1049,7 @@ class TestListSubnet(TestSubnet):
1057
1049
 
1058
1050
  def test_subnet_list_name(self):
1059
1051
  subnet = network_fakes.FakeSubnet.create_one_subnet()
1060
- self.network_client.find_network = mock.Mock(return_value=subnet)
1052
+ self.network_client.find_network.return_value = subnet
1061
1053
  arglist = [
1062
1054
  '--name',
1063
1055
  subnet.name,
@@ -1076,7 +1068,7 @@ class TestListSubnet(TestSubnet):
1076
1068
 
1077
1069
  def test_subnet_list_subnet_range(self):
1078
1070
  subnet = network_fakes.FakeSubnet.create_one_subnet()
1079
- self.network_client.find_network = mock.Mock(return_value=subnet)
1071
+ self.network_client.find_network.return_value = subnet
1080
1072
  arglist = [
1081
1073
  '--subnet-range',
1082
1074
  subnet.cidr,
@@ -1098,10 +1090,9 @@ class TestListSubnet(TestSubnet):
1098
1090
  subnet = network_fakes.FakeSubnet.create_one_subnet(
1099
1091
  {'subnetpool_id': subnet_pool.id}
1100
1092
  )
1101
- self.network_client.find_network = mock.Mock(return_value=subnet)
1102
- self.network_client.find_subnet_pool = mock.Mock(
1103
- return_value=subnet_pool
1104
- )
1093
+ self.network_client.find_network.return_value = subnet
1094
+ self.network_client.find_subnet_pool.return_value = subnet_pool
1095
+
1105
1096
  arglist = [
1106
1097
  '--subnet-pool',
1107
1098
  subnet_pool.name,
@@ -1123,10 +1114,9 @@ class TestListSubnet(TestSubnet):
1123
1114
  subnet = network_fakes.FakeSubnet.create_one_subnet(
1124
1115
  {'subnetpool_id': subnet_pool.id}
1125
1116
  )
1126
- self.network_client.find_network = mock.Mock(return_value=subnet)
1127
- self.network_client.find_subnet_pool = mock.Mock(
1128
- return_value=subnet_pool
1129
- )
1117
+ self.network_client.find_network.return_value = subnet
1118
+ self.network_client.find_subnet_pool.return_value = subnet_pool
1119
+
1130
1120
  arglist = [
1131
1121
  '--subnet-pool',
1132
1122
  subnet_pool.id,
@@ -1182,9 +1172,9 @@ class TestSetSubnet(TestSubnet):
1182
1172
 
1183
1173
  def setUp(self):
1184
1174
  super().setUp()
1185
- self.network_client.update_subnet = mock.Mock(return_value=None)
1186
- self.network_client.set_tags = mock.Mock(return_value=None)
1187
- self.network_client.find_subnet = mock.Mock(return_value=self._subnet)
1175
+ self.network_client.update_subnet.return_value = None
1176
+ self.network_client.set_tags.return_value = None
1177
+ self.network_client.find_subnet.return_value = self._subnet
1188
1178
  self.cmd = subnet_v2.SetSubnet(self.app, None)
1189
1179
 
1190
1180
  def test_set_this(self):
@@ -1263,7 +1253,7 @@ class TestSetSubnet(TestSubnet):
1263
1253
  'service_types': ["network:router_gateway"],
1264
1254
  }
1265
1255
  )
1266
- self.network_client.find_subnet = mock.Mock(return_value=_testsubnet)
1256
+ self.network_client.find_subnet.return_value = _testsubnet
1267
1257
  arglist = [
1268
1258
  '--dns-nameserver',
1269
1259
  '10.0.0.2',
@@ -1329,7 +1319,7 @@ class TestSetSubnet(TestSubnet):
1329
1319
  'dns_nameservers': ["10.0.0.1"],
1330
1320
  }
1331
1321
  )
1332
- self.network_client.find_subnet = mock.Mock(return_value=_testsubnet)
1322
+ self.network_client.find_subnet.return_value = _testsubnet
1333
1323
  arglist = [
1334
1324
  '--host-route',
1335
1325
  'destination=10.30.30.30/24,gateway=10.30.30.1',
@@ -1379,7 +1369,7 @@ class TestSetSubnet(TestSubnet):
1379
1369
  'dns_nameservers': ['10.0.0.1'],
1380
1370
  }
1381
1371
  )
1382
- self.network_client.find_subnet = mock.Mock(return_value=_testsubnet)
1372
+ self.network_client.find_subnet.return_value = _testsubnet
1383
1373
  arglist = [
1384
1374
  '--no-host-route',
1385
1375
  '--no-allocation-pool',
@@ -1448,8 +1438,8 @@ class TestSetSubnet(TestSubnet):
1448
1438
  'segment_id': None,
1449
1439
  }
1450
1440
  )
1451
- self.network_client.find_subnet = mock.Mock(return_value=_subnet)
1452
- self.network_client.find_segment = mock.Mock(return_value=_segment)
1441
+ self.network_client.find_subnet.return_value = _subnet
1442
+ self.network_client.find_segment.return_value = _segment
1453
1443
  arglist = ['--network-segment', _segment.id, _subnet.name]
1454
1444
  verifylist = [('network_segment', _segment.id)]
1455
1445
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -1514,7 +1504,7 @@ class TestShowSubnet(TestSubnet):
1514
1504
  # Get the command object to test
1515
1505
  self.cmd = subnet_v2.ShowSubnet(self.app, None)
1516
1506
 
1517
- self.network_client.find_subnet = mock.Mock(return_value=self._subnet)
1507
+ self.network_client.find_subnet.return_value = self._subnet
1518
1508
 
1519
1509
  def test_show_no_options(self):
1520
1510
  arglist = []
@@ -1572,11 +1562,10 @@ class TestUnsetSubnet(TestSubnet):
1572
1562
  'tags': ['green', 'red'],
1573
1563
  }
1574
1564
  )
1575
- self.network_client.find_subnet = mock.Mock(
1576
- return_value=self._testsubnet
1577
- )
1578
- self.network_client.update_subnet = mock.Mock(return_value=None)
1579
- self.network_client.set_tags = mock.Mock(return_value=None)
1565
+ self.network_client.find_subnet.return_value = self._testsubnet
1566
+
1567
+ self.network_client.update_subnet.return_value = None
1568
+ self.network_client.set_tags.return_value = None
1580
1569
  # Get the command object to test
1581
1570
  self.cmd = subnet_v2.UnsetSubnet(self.app, None)
1582
1571
 
@@ -10,7 +10,6 @@
10
10
  # License for the specific language governing permissions and limitations
11
11
  # under the License.
12
12
 
13
- from unittest import mock
14
13
  from unittest.mock import call
15
14
 
16
15
  from osc_lib.cli import format_columns
@@ -76,16 +75,15 @@ class TestCreateSubnetPool(TestSubnetPool):
76
75
  def setUp(self):
77
76
  super().setUp()
78
77
 
79
- self.network_client.create_subnet_pool = mock.Mock(
80
- return_value=self._subnet_pool
81
- )
82
- self.network_client.set_tags = mock.Mock(return_value=None)
78
+ self.network_client.create_subnet_pool.return_value = self._subnet_pool
79
+
80
+ self.network_client.set_tags.return_value = None
83
81
 
84
82
  # Get the command object to test
85
83
  self.cmd = subnet_pool.CreateSubnetPool(self.app, None)
86
84
 
87
- self.network_client.find_address_scope = mock.Mock(
88
- return_value=self._address_scope
85
+ self.network_client.find_address_scope.return_value = (
86
+ self._address_scope
89
87
  )
90
88
 
91
89
  self.projects_mock.get.return_value = self.project
@@ -387,7 +385,7 @@ class TestDeleteSubnetPool(TestSubnetPool):
387
385
  def setUp(self):
388
386
  super().setUp()
389
387
 
390
- self.network_client.delete_subnet_pool = mock.Mock(return_value=None)
388
+ self.network_client.delete_subnet_pool.return_value = None
391
389
 
392
390
  self.network_client.find_subnet_pool = (
393
391
  network_fakes.FakeSubnetPool.get_subnet_pools(self._subnet_pools)
@@ -445,9 +443,7 @@ class TestDeleteSubnetPool(TestSubnetPool):
445
443
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
446
444
 
447
445
  find_mock_result = [self._subnet_pools[0], exceptions.CommandError]
448
- self.network_client.find_subnet_pool = mock.Mock(
449
- side_effect=find_mock_result
450
- )
446
+ self.network_client.find_subnet_pool.side_effect = find_mock_result
451
447
 
452
448
  try:
453
449
  self.cmd.take_action(parsed_args)
@@ -514,9 +510,7 @@ class TestListSubnetPool(TestSubnetPool):
514
510
  # Get the command object to test
515
511
  self.cmd = subnet_pool.ListSubnetPool(self.app, None)
516
512
 
517
- self.network_client.subnet_pools = mock.Mock(
518
- return_value=self._subnet_pools
519
- )
513
+ self.network_client.subnet_pools.return_value = self._subnet_pools
520
514
 
521
515
  def test_subnet_pool_list_no_option(self):
522
516
  arglist = []
@@ -653,7 +647,7 @@ class TestListSubnetPool(TestSubnetPool):
653
647
 
654
648
  def test_subnet_pool_list_name(self):
655
649
  subnet_pool = network_fakes.FakeSubnetPool.create_one_subnet_pool()
656
- self.network_client.find_network = mock.Mock(return_value=subnet_pool)
650
+ self.network_client.find_network.return_value = subnet_pool
657
651
  arglist = [
658
652
  '--name',
659
653
  subnet_pool.name,
@@ -672,9 +666,8 @@ class TestListSubnetPool(TestSubnetPool):
672
666
 
673
667
  def test_subnet_pool_list_address_scope(self):
674
668
  addr_scope = network_fakes.create_one_address_scope()
675
- self.network_client.find_address_scope = mock.Mock(
676
- return_value=addr_scope
677
- )
669
+ self.network_client.find_address_scope.return_value = addr_scope
670
+
678
671
  arglist = [
679
672
  '--address-scope',
680
673
  addr_scope.id,
@@ -734,15 +727,13 @@ class TestSetSubnetPool(TestSubnetPool):
734
727
  def setUp(self):
735
728
  super().setUp()
736
729
 
737
- self.network_client.update_subnet_pool = mock.Mock(return_value=None)
738
- self.network_client.set_tags = mock.Mock(return_value=None)
730
+ self.network_client.update_subnet_pool.return_value = None
731
+ self.network_client.set_tags.return_value = None
739
732
 
740
- self.network_client.find_subnet_pool = mock.Mock(
741
- return_value=self._subnet_pool
742
- )
733
+ self.network_client.find_subnet_pool.return_value = self._subnet_pool
743
734
 
744
- self.network_client.find_address_scope = mock.Mock(
745
- return_value=self._address_scope
735
+ self.network_client.find_address_scope.return_value = (
736
+ self._address_scope
746
737
  )
747
738
 
748
739
  # Get the command object to test
@@ -1079,9 +1070,7 @@ class TestShowSubnetPool(TestSubnetPool):
1079
1070
  def setUp(self):
1080
1071
  super().setUp()
1081
1072
 
1082
- self.network_client.find_subnet_pool = mock.Mock(
1083
- return_value=self._subnet_pool
1084
- )
1073
+ self.network_client.find_subnet_pool.return_value = self._subnet_pool
1085
1074
 
1086
1075
  # Get the command object to test
1087
1076
  self.cmd = subnet_pool.ShowSubnetPool(self.app, None)
@@ -1122,11 +1111,10 @@ class TestUnsetSubnetPool(TestSubnetPool):
1122
1111
  self._subnetpool = network_fakes.FakeSubnetPool.create_one_subnet_pool(
1123
1112
  {'tags': ['green', 'red']}
1124
1113
  )
1125
- self.network_client.find_subnet_pool = mock.Mock(
1126
- return_value=self._subnetpool
1127
- )
1128
- self.network_client.update_subnet_pool = mock.Mock(return_value=None)
1129
- self.network_client.set_tags = mock.Mock(return_value=None)
1114
+ self.network_client.find_subnet_pool.return_value = self._subnetpool
1115
+
1116
+ self.network_client.update_subnet_pool.return_value = None
1117
+ self.network_client.set_tags.return_value = None
1130
1118
  # Get the command object to test
1131
1119
  self.cmd = subnet_pool.UnsetSubnetPool(self.app, None)
1132
1120
 
@@ -21,15 +21,6 @@ from osc_lib import exceptions
21
21
  from osc_lib import utils
22
22
 
23
23
  from openstackclient.tests.unit import utils as test_utils
24
- from openstackclient.volume import client # noqa
25
-
26
-
27
- # Monkey patch for v1 cinderclient
28
- # NOTE(dtroyer): Do here because openstackclient.volume.client
29
- # doesn't do it until the client object is created now.
30
- volumes.Volume.NAME_ATTR = 'display_name'
31
- volume_snapshots.Snapshot.NAME_ATTR = 'display_name'
32
-
33
24
 
34
25
  ID = '1after909'
35
26
  NAME = 'PhilSpector'
@@ -42,14 +33,14 @@ class TestFindResourceVolumes(test_utils.TestCase):
42
33
  api.client = mock.Mock()
43
34
  api.client.get = mock.Mock()
44
35
  resp = mock.Mock()
45
- body = {"volumes": [{"id": ID, 'display_name': NAME}]}
36
+ body = {"volumes": [{"id": ID, 'name': NAME}]}
46
37
  api.client.get.side_effect = [Exception("Not found"), (resp, body)]
47
38
  self.manager = volumes.VolumeManager(api)
48
39
 
49
40
  def test_find(self):
50
41
  result = utils.find_resource(self.manager, NAME)
51
42
  self.assertEqual(ID, result.id)
52
- self.assertEqual(NAME, result.display_name)
43
+ self.assertEqual(NAME, result.name)
53
44
 
54
45
  def test_not_find(self):
55
46
  self.assertRaises(
@@ -67,14 +58,14 @@ class TestFindResourceVolumeSnapshots(test_utils.TestCase):
67
58
  api.client = mock.Mock()
68
59
  api.client.get = mock.Mock()
69
60
  resp = mock.Mock()
70
- body = {"snapshots": [{"id": ID, 'display_name': NAME}]}
61
+ body = {"snapshots": [{"id": ID, 'name': NAME}]}
71
62
  api.client.get.side_effect = [Exception("Not found"), (resp, body)]
72
63
  self.manager = volume_snapshots.SnapshotManager(api)
73
64
 
74
65
  def test_find(self):
75
66
  result = utils.find_resource(self.manager, NAME)
76
67
  self.assertEqual(ID, result.id)
77
- self.assertEqual(NAME, result.display_name)
68
+ self.assertEqual(NAME, result.name)
78
69
 
79
70
  def test_not_find(self):
80
71
  self.assertRaises(
@@ -565,7 +565,9 @@ class TestBackupShow(volume_fakes.TestVolume):
565
565
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
566
566
 
567
567
  columns, data = self.cmd.take_action(parsed_args)
568
- self.volume_sdk_client.find_backup.assert_called_with(self.backup.id)
568
+ self.volume_sdk_client.find_backup.assert_called_with(
569
+ self.backup.id, ignore_missing=False
570
+ )
569
571
 
570
572
  self.assertEqual(self.columns, columns)
571
573
  self.assertEqual(self.data, data)
@@ -37,6 +37,7 @@ class TestVolumeCreate(volume_fakes.TestVolume):
37
37
  columns = (
38
38
  'attachments',
39
39
  'availability_zone',
40
+ 'backup_id',
40
41
  'bootable',
41
42
  'cluster_name',
42
43
  'consistencygroup_id',
@@ -78,6 +79,7 @@ class TestVolumeCreate(volume_fakes.TestVolume):
78
79
  self.datalist = (
79
80
  self.volume.attachments,
80
81
  self.volume.availability_zone,
82
+ self.volume.backup_id,
81
83
  self.volume.is_bootable,
82
84
  self.volume.cluster_name,
83
85
  self.volume.consistency_group_id,
@@ -2011,6 +2013,7 @@ class TestVolumeShow(volume_fakes.TestVolume):
2011
2013
  self.columns = (
2012
2014
  'attachments',
2013
2015
  'availability_zone',
2016
+ 'backup_id',
2014
2017
  'bootable',
2015
2018
  'cluster_name',
2016
2019
  'consistencygroup_id',
@@ -2045,6 +2048,7 @@ class TestVolumeShow(volume_fakes.TestVolume):
2045
2048
  self.data = (
2046
2049
  self.volume.attachments,
2047
2050
  self.volume.availability_zone,
2051
+ self.volume.backup_id,
2048
2052
  self.volume.is_bootable,
2049
2053
  self.volume.cluster_name,
2050
2054
  self.volume.consistency_group_id,
@@ -17,6 +17,7 @@ from openstack.block_storage.v3 import backup as _backup
17
17
  from openstack.block_storage.v3 import snapshot as _snapshot
18
18
  from openstack.block_storage.v3 import volume as _volume
19
19
  from openstack import exceptions as sdk_exceptions
20
+ from openstack.identity.v3 import project as _project
20
21
  from openstack.test import fakes as sdk_fakes
21
22
  from osc_lib import exceptions
22
23
 
@@ -381,6 +382,7 @@ class TestBackupList(volume_fakes.TestVolume):
381
382
  ("marker", None),
382
383
  ("limit", None),
383
384
  ('all_projects', False),
385
+ ("project", None),
384
386
  ]
385
387
 
386
388
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -395,11 +397,14 @@ class TestBackupList(volume_fakes.TestVolume):
395
397
  all_tenants=False,
396
398
  marker=None,
397
399
  limit=None,
400
+ project_id=None,
398
401
  )
399
402
  self.assertEqual(self.columns, columns)
400
403
  self.assertCountEqual(self.data, list(data))
401
404
 
402
405
  def test_backup_list_with_options(self):
406
+ project = sdk_fakes.generate_fake_resource(_project.Project)
407
+ self.identity_sdk_client.find_project.return_value = project
403
408
  arglist = [
404
409
  "--long",
405
410
  "--name",
@@ -413,6 +418,8 @@ class TestBackupList(volume_fakes.TestVolume):
413
418
  "--all-projects",
414
419
  "--limit",
415
420
  "3",
421
+ "--project",
422
+ project.id,
416
423
  ]
417
424
  verifylist = [
418
425
  ("long", True),
@@ -422,6 +429,7 @@ class TestBackupList(volume_fakes.TestVolume):
422
429
  ("marker", self.backups[0].id),
423
430
  ('all_projects', True),
424
431
  ("limit", 3),
432
+ ("project", project.id),
425
433
  ]
426
434
 
427
435
  parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -440,6 +448,7 @@ class TestBackupList(volume_fakes.TestVolume):
440
448
  all_tenants=True,
441
449
  marker=self.backups[0].id,
442
450
  limit=3,
451
+ project_id=project.id,
443
452
  )
444
453
  self.assertEqual(self.columns_long, columns)
445
454
  self.assertCountEqual(self.data_long, list(data))
@@ -20,16 +20,14 @@ from osc_lib import utils
20
20
 
21
21
  from openstackclient.i18n import _
22
22
 
23
-
24
23
  LOG = logging.getLogger(__name__)
25
24
 
26
25
  DEFAULT_API_VERSION = '3'
27
26
  API_VERSION_OPTION = 'os_volume_api_version'
28
- API_NAME = "volume"
27
+ API_NAME = 'volume'
29
28
  API_VERSIONS = {
30
- "1": "cinderclient.v1.client.Client",
31
- "2": "cinderclient.v2.client.Client",
32
- "3": "cinderclient.v3.client.Client",
29
+ '2': 'cinderclient.v2.client.Client',
30
+ '3': 'cinderclient.v3.client.Client',
33
31
  }
34
32
 
35
33
  # Save the microversion if in use
@@ -45,11 +43,6 @@ def make_client(instance):
45
43
  from cinderclient.v3 import volume_snapshots
46
44
  from cinderclient.v3 import volumes
47
45
 
48
- # Check whether the available cinderclient supports v1 or v2
49
- try:
50
- from cinderclient.v1 import services # noqa
51
- except Exception:
52
- del API_VERSIONS['1']
53
46
  try:
54
47
  from cinderclient.v2 import services # noqa
55
48
  except Exception:
@@ -127,21 +120,18 @@ def check_api_version(check_version):
127
120
 
128
121
  global _volume_api_version
129
122
 
130
- # Copy some logic from novaclient 3.3.0 for basic version detection
131
- # NOTE(dtroyer): This is only enough to resume operations using API
132
- # version 3.0 or any valid version supplied by the user.
133
123
  _volume_api_version = api_versions.get_api_version(check_version)
134
124
 
135
125
  # Bypass X.latest format microversion
136
126
  if not _volume_api_version.is_latest():
137
- if _volume_api_version > api_versions.APIVersion("3.0"):
127
+ if _volume_api_version > api_versions.APIVersion('3.0'):
138
128
  if not _volume_api_version.matches(
139
129
  api_versions.MIN_VERSION,
140
130
  api_versions.MAX_VERSION,
141
131
  ):
142
- msg = _("versions supported by client: %(min)s - %(max)s") % {
143
- "min": api_versions.MIN_VERSION,
144
- "max": api_versions.MAX_VERSION,
132
+ msg = _('versions supported by client: %(min)s - %(max)s') % {
133
+ 'min': api_versions.MIN_VERSION,
134
+ 'max': api_versions.MAX_VERSION,
145
135
  }
146
136
  raise exceptions.CommandError(msg)
147
137
 
@@ -16,9 +16,9 @@
16
16
 
17
17
  import logging
18
18
 
19
- from osc_lib.command import command
20
19
  from osc_lib import utils
21
20
 
21
+ from openstackclient import command
22
22
  from openstackclient.i18n import _
23
23
 
24
24
 
@@ -18,10 +18,10 @@ import argparse
18
18
  import logging
19
19
 
20
20
  from osc_lib.cli import format_columns
21
- from osc_lib.command import command
22
21
  from osc_lib import exceptions
23
22
  from osc_lib import utils
24
23
 
24
+ from openstackclient import command
25
25
  from openstackclient.i18n import _
26
26
 
27
27
 
@@ -16,10 +16,10 @@
16
16
 
17
17
  import logging
18
18
 
19
- from osc_lib.command import command
20
19
  from osc_lib import exceptions
21
20
  from osc_lib import utils
22
21
 
22
+ from openstackclient import command
23
23
  from openstackclient.i18n import _
24
24
 
25
25
 
@@ -19,10 +19,10 @@ import logging
19
19
 
20
20
  from osc_lib.cli import format_columns
21
21
  from osc_lib.cli import parseractions
22
- from osc_lib.command import command
23
22
  from osc_lib import exceptions
24
23
  from osc_lib import utils
25
24
 
25
+ from openstackclient import command
26
26
  from openstackclient.i18n import _
27
27
 
28
28
 
@@ -14,10 +14,10 @@
14
14
 
15
15
  """Service action implementations"""
16
16
 
17
- from osc_lib.command import command
18
17
  from osc_lib import exceptions
19
18
  from osc_lib import utils
20
19
 
20
+ from openstackclient import command
21
21
  from openstackclient.i18n import _
22
22
 
23
23
 
@@ -25,11 +25,11 @@ from openstack.block_storage.v2 import volume as _volume
25
25
  from openstack import exceptions as sdk_exceptions
26
26
  from osc_lib.cli import format_columns
27
27
  from osc_lib.cli import parseractions
28
- from osc_lib.command import command
29
28
  from osc_lib import exceptions
30
29
  from osc_lib import utils
31
30
 
32
31
  from openstackclient.api import volume_v2
32
+ from openstackclient import command
33
33
  from openstackclient.common import pagination
34
34
  from openstackclient.i18n import _
35
35
  from openstackclient.identity import common as identity_common
@@ -61,7 +61,7 @@ class KeyValueHintAction(argparse.Action):
61
61
  )
62
62
 
63
63
 
64
- class AttachmentsColumn(cliff_columns.FormattableColumn):
64
+ class AttachmentsColumn(cliff_columns.FormattableColumn[list[ty.Any]]):
65
65
  """Formattable column for attachments column.
66
66
 
67
67
  Unlike the parent FormattableColumn class, the initializer of the
@@ -15,9 +15,9 @@
15
15
  """Storage backend action implementations"""
16
16
 
17
17
  from osc_lib.cli import format_columns
18
- from osc_lib.command import command
19
18
  from osc_lib import utils
20
19
 
20
+ from openstackclient import command
21
21
  from openstackclient.i18n import _
22
22
 
23
23
 
@@ -18,17 +18,17 @@ import functools
18
18
  import logging
19
19
 
20
20
  from cliff import columns as cliff_columns
21
- from osc_lib.command import command
22
21
  from osc_lib import exceptions
23
22
  from osc_lib import utils
24
23
 
24
+ from openstackclient import command
25
25
  from openstackclient.common import pagination
26
26
  from openstackclient.i18n import _
27
27
 
28
28
  LOG = logging.getLogger(__name__)
29
29
 
30
30
 
31
- class VolumeIdColumn(cliff_columns.FormattableColumn):
31
+ class VolumeIdColumn(cliff_columns.FormattableColumn[str]):
32
32
  """Formattable column for volume ID column.
33
33
 
34
34
  Unlike the parent FormattableColumn class, the initializer of the
@@ -453,7 +453,9 @@ class ShowVolumeBackup(command.ShowOne):
453
453
 
454
454
  def take_action(self, parsed_args):
455
455
  volume_client = self.app.client_manager.sdk_connection.volume
456
- backup = volume_client.find_backup(parsed_args.backup)
456
+ backup = volume_client.find_backup(
457
+ parsed_args.backup, ignore_missing=False
458
+ )
457
459
  columns: tuple[str, ...] = (
458
460
  "availability_zone",
459
461
  "container",