python-openstackclient 9.0.0__py3-none-any.whl → 10.1.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 (352) hide show
  1. openstackclient/__init__.py +2 -6
  2. openstackclient/api/api.py +41 -23
  3. openstackclient/api/compute_v2.py +44 -25
  4. openstackclient/api/object_store_v1.py +75 -97
  5. openstackclient/api/volume_v2.py +2 -1
  6. openstackclient/api/volume_v3.py +2 -1
  7. openstackclient/common/availability_zone.py +59 -43
  8. openstackclient/common/clientmanager.py +56 -29
  9. openstackclient/common/configuration.py +10 -3
  10. openstackclient/common/envvars.py +2 -2
  11. openstackclient/common/extension.py +14 -5
  12. openstackclient/common/limits.py +10 -5
  13. openstackclient/common/module.py +36 -34
  14. openstackclient/common/pagination.py +50 -6
  15. openstackclient/common/progressbar.py +7 -6
  16. openstackclient/common/project_cleanup.py +11 -6
  17. openstackclient/common/quota.py +105 -103
  18. openstackclient/common/versions.py +8 -2
  19. openstackclient/compute/client.py +7 -3
  20. openstackclient/compute/v2/agent.py +17 -10
  21. openstackclient/compute/v2/aggregate.py +36 -22
  22. openstackclient/compute/v2/console.py +14 -8
  23. openstackclient/compute/v2/console_connection.py +11 -3
  24. openstackclient/compute/v2/flavor.py +42 -22
  25. openstackclient/compute/v2/host.py +14 -6
  26. openstackclient/compute/v2/hypervisor.py +16 -5
  27. openstackclient/compute/v2/hypervisor_stats.py +10 -2
  28. openstackclient/compute/v2/keypair.py +35 -16
  29. openstackclient/compute/v2/server.py +268 -179
  30. openstackclient/compute/v2/server_backup.py +10 -4
  31. openstackclient/compute/v2/server_event.py +28 -12
  32. openstackclient/compute/v2/server_group.py +23 -11
  33. openstackclient/compute/v2/server_image.py +19 -10
  34. openstackclient/compute/v2/server_migration.py +27 -10
  35. openstackclient/compute/v2/server_share.py +274 -0
  36. openstackclient/compute/v2/server_volume.py +13 -5
  37. openstackclient/compute/v2/service.py +17 -8
  38. openstackclient/compute/v2/usage.py +28 -23
  39. openstackclient/identity/client.py +8 -3
  40. openstackclient/identity/common.py +82 -47
  41. openstackclient/identity/v2_0/catalog.py +14 -7
  42. openstackclient/identity/v2_0/ec2creds.py +21 -10
  43. openstackclient/identity/v2_0/endpoint.py +23 -11
  44. openstackclient/identity/v2_0/project.py +25 -14
  45. openstackclient/identity/v2_0/role.py +28 -14
  46. openstackclient/identity/v2_0/role_assignment.py +9 -3
  47. openstackclient/identity/v2_0/service.py +23 -11
  48. openstackclient/identity/v2_0/token.py +12 -5
  49. openstackclient/identity/v2_0/user.py +26 -15
  50. openstackclient/identity/v3/access_rule.py +32 -12
  51. openstackclient/identity/v3/application_credential.py +66 -24
  52. openstackclient/identity/v3/catalog.py +14 -7
  53. openstackclient/identity/v3/consumer.py +22 -11
  54. openstackclient/identity/v3/credential.py +39 -17
  55. openstackclient/identity/v3/domain.py +40 -19
  56. openstackclient/identity/v3/ec2creds.py +25 -12
  57. openstackclient/identity/v3/endpoint.py +98 -64
  58. openstackclient/identity/v3/endpoint_group.py +28 -17
  59. openstackclient/identity/v3/federation_protocol.py +44 -20
  60. openstackclient/identity/v3/group.py +64 -40
  61. openstackclient/identity/v3/identity_provider.py +95 -57
  62. openstackclient/identity/v3/implied_role.py +21 -9
  63. openstackclient/identity/v3/limit.py +42 -17
  64. openstackclient/identity/v3/mapping.py +58 -28
  65. openstackclient/identity/v3/policy.py +23 -12
  66. openstackclient/identity/v3/project.py +59 -26
  67. openstackclient/identity/v3/region.py +39 -17
  68. openstackclient/identity/v3/registered_limit.py +41 -16
  69. openstackclient/identity/v3/role.py +62 -31
  70. openstackclient/identity/v3/role_assignment.py +25 -7
  71. openstackclient/identity/v3/service.py +39 -17
  72. openstackclient/identity/v3/service_provider.py +40 -16
  73. openstackclient/identity/v3/tag.py +23 -6
  74. openstackclient/identity/v3/token.py +30 -14
  75. openstackclient/identity/v3/trust.py +39 -18
  76. openstackclient/identity/v3/unscoped_saml.py +10 -2
  77. openstackclient/identity/v3/user.py +86 -36
  78. openstackclient/image/client.py +7 -3
  79. openstackclient/image/v1/image.py +33 -26
  80. openstackclient/image/v2/cache.py +16 -11
  81. openstackclient/image/v2/image.py +88 -56
  82. openstackclient/image/v2/info.py +7 -1
  83. openstackclient/image/v2/metadef_namespaces.py +117 -20
  84. openstackclient/image/v2/metadef_objects.py +32 -19
  85. openstackclient/image/v2/metadef_properties.py +30 -16
  86. openstackclient/image/v2/metadef_resource_type_association.py +14 -7
  87. openstackclient/image/v2/metadef_resource_types.py +7 -1
  88. openstackclient/image/v2/task.py +25 -27
  89. openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
  90. openstackclient/network/client.py +7 -2
  91. openstackclient/network/common.py +16 -241
  92. openstackclient/network/utils.py +27 -54
  93. openstackclient/network/v2/address_group.py +39 -16
  94. openstackclient/network/v2/address_scope.py +36 -20
  95. openstackclient/network/v2/bgpvpn/bgpvpn.py +477 -0
  96. openstackclient/network/v2/bgpvpn/constants.py +30 -0
  97. openstackclient/network/v2/bgpvpn/network_association.py +226 -0
  98. openstackclient/network/v2/bgpvpn/port_association.py +504 -0
  99. openstackclient/network/v2/bgpvpn/router_association.py +301 -0
  100. openstackclient/network/v2/default_security_group_rule.py +31 -14
  101. openstackclient/network/v2/floating_ip.py +121 -162
  102. openstackclient/network/v2/floating_ip_port_forwarding.py +41 -19
  103. openstackclient/network/v2/fwaas/__init__.py +0 -0
  104. openstackclient/network/v2/fwaas/group.py +499 -0
  105. openstackclient/network/v2/fwaas/policy.py +518 -0
  106. openstackclient/network/v2/fwaas/rule.py +610 -0
  107. openstackclient/network/v2/ip_availability.py +25 -8
  108. openstackclient/network/v2/l3_conntrack_helper.py +35 -13
  109. openstackclient/network/v2/local_ip.py +27 -13
  110. openstackclient/network/v2/local_ip_association.py +17 -7
  111. openstackclient/network/v2/ndp_proxy.py +23 -11
  112. openstackclient/network/v2/network.py +213 -213
  113. openstackclient/network/v2/network_agent.py +77 -34
  114. openstackclient/network/v2/network_auto_allocated_topology.py +27 -15
  115. openstackclient/network/v2/network_flavor.py +45 -21
  116. openstackclient/network/v2/network_flavor_profile.py +42 -17
  117. openstackclient/network/v2/network_meter.py +39 -15
  118. openstackclient/network/v2/network_meter_rule.py +40 -12
  119. openstackclient/network/v2/network_qos_policy.py +39 -21
  120. openstackclient/network/v2/network_qos_rule.py +48 -18
  121. openstackclient/network/v2/network_qos_rule_type.py +28 -9
  122. openstackclient/network/v2/network_rbac.py +34 -16
  123. openstackclient/network/v2/network_segment.py +32 -11
  124. openstackclient/network/v2/network_segment_range.py +70 -31
  125. openstackclient/network/v2/network_service_provider.py +7 -1
  126. openstackclient/network/v2/network_trunk.py +41 -22
  127. openstackclient/network/v2/port.py +141 -40
  128. openstackclient/network/v2/router.py +101 -67
  129. openstackclient/network/v2/security_group.py +97 -198
  130. openstackclient/network/v2/security_group_rule.py +115 -282
  131. openstackclient/network/v2/subnet.py +63 -34
  132. openstackclient/network/v2/subnet_pool.py +42 -24
  133. openstackclient/network/v2/taas/tap_flow.py +35 -14
  134. openstackclient/network/v2/taas/tap_mirror.py +28 -14
  135. openstackclient/network/v2/taas/tap_service.py +26 -12
  136. openstackclient/object/client.py +7 -2
  137. openstackclient/object/v1/account.py +13 -6
  138. openstackclient/object/v1/container.py +28 -16
  139. openstackclient/object/v1/object.py +28 -16
  140. openstackclient/py.typed +0 -0
  141. openstackclient/shell.py +46 -10
  142. openstackclient/tests/functional/base.py +55 -20
  143. openstackclient/tests/functional/common/test_extension.py +4 -0
  144. openstackclient/tests/functional/common/test_quota.py +3 -1
  145. openstackclient/tests/functional/compute/v2/common.py +14 -13
  146. openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
  147. openstackclient/tests/functional/compute/v2/test_server.py +3 -0
  148. openstackclient/tests/functional/identity/v2/common.py +10 -6
  149. openstackclient/tests/functional/identity/v2/test_role.py +4 -4
  150. openstackclient/tests/functional/identity/v3/common.py +59 -19
  151. openstackclient/tests/functional/identity/v3/test_application_credential.py +1 -1
  152. openstackclient/tests/functional/identity/v3/test_group.py +20 -20
  153. openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
  154. openstackclient/tests/functional/identity/v3/test_mapping.py +81 -0
  155. openstackclient/tests/functional/identity/v3/test_project.py +10 -10
  156. openstackclient/tests/functional/identity/v3/test_role.py +18 -18
  157. openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
  158. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  159. openstackclient/tests/functional/image/base.py +1 -6
  160. openstackclient/tests/functional/network/v2/common.py +5 -2
  161. openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
  162. openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
  163. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
  164. openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
  165. openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
  166. openstackclient/tests/functional/object/v1/common.py +4 -0
  167. openstackclient/tests/functional/volume/v2/common.py +4 -0
  168. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
  169. openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
  170. openstackclient/tests/functional/volume/v3/common.py +4 -0
  171. openstackclient/tests/functional/volume/v3/test_volume_group.py +163 -0
  172. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
  173. openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
  174. openstackclient/tests/unit/common/test_availability_zone.py +35 -49
  175. openstackclient/tests/unit/common/test_extension.py +2 -2
  176. openstackclient/tests/unit/common/test_limits.py +1 -1
  177. openstackclient/tests/unit/common/test_module.py +82 -44
  178. openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
  179. openstackclient/tests/unit/common/test_quota.py +15 -26
  180. openstackclient/tests/unit/compute/v2/fakes.py +26 -57
  181. openstackclient/tests/unit/compute/v2/test_agent.py +4 -4
  182. openstackclient/tests/unit/compute/v2/test_aggregate.py +1 -1
  183. openstackclient/tests/unit/compute/v2/test_console.py +2 -2
  184. openstackclient/tests/unit/compute/v2/test_console_connection.py +1 -1
  185. openstackclient/tests/unit/compute/v2/test_flavor.py +29 -3
  186. openstackclient/tests/unit/compute/v2/test_host.py +3 -3
  187. openstackclient/tests/unit/compute/v2/test_hypervisor.py +2 -2
  188. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +1 -1
  189. openstackclient/tests/unit/compute/v2/test_keypair.py +7 -7
  190. openstackclient/tests/unit/compute/v2/test_server.py +26 -111
  191. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
  192. openstackclient/tests/unit/compute/v2/test_server_event.py +2 -2
  193. openstackclient/tests/unit/compute/v2/test_server_group.py +1 -1
  194. openstackclient/tests/unit/compute/v2/test_server_image.py +1 -1
  195. openstackclient/tests/unit/compute/v2/test_server_migration.py +4 -4
  196. openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
  197. openstackclient/tests/unit/compute/v2/test_server_volume.py +2 -2
  198. openstackclient/tests/unit/compute/v2/test_service.py +3 -3
  199. openstackclient/tests/unit/compute/v2/test_usage.py +1 -1
  200. openstackclient/tests/unit/identity/v2_0/fakes.py +3 -7
  201. openstackclient/tests/unit/identity/v2_0/test_endpoint.py +1 -1
  202. openstackclient/tests/unit/identity/v2_0/test_project.py +1 -1
  203. openstackclient/tests/unit/identity/v2_0/test_role.py +1 -1
  204. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +1 -1
  205. openstackclient/tests/unit/identity/v2_0/test_service.py +1 -1
  206. openstackclient/tests/unit/identity/v2_0/test_token.py +2 -2
  207. openstackclient/tests/unit/identity/v2_0/test_user.py +1 -1
  208. openstackclient/tests/unit/identity/v3/fakes.py +8 -38
  209. openstackclient/tests/unit/identity/v3/test_access_rule.py +3 -3
  210. openstackclient/tests/unit/identity/v3/test_application_credential.py +4 -4
  211. openstackclient/tests/unit/identity/v3/test_credential.py +5 -5
  212. openstackclient/tests/unit/identity/v3/test_domain.py +5 -5
  213. openstackclient/tests/unit/identity/v3/test_endpoint.py +6 -6
  214. openstackclient/tests/unit/identity/v3/test_endpoint_group.py +1 -1
  215. openstackclient/tests/unit/identity/v3/test_group.py +12 -22
  216. openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
  217. openstackclient/tests/unit/identity/v3/test_implied_role.py +1 -1
  218. openstackclient/tests/unit/identity/v3/test_limit.py +5 -5
  219. openstackclient/tests/unit/identity/v3/test_mappings.py +163 -79
  220. openstackclient/tests/unit/identity/v3/test_project.py +28 -5
  221. openstackclient/tests/unit/identity/v3/test_protocol.py +3 -3
  222. openstackclient/tests/unit/identity/v3/test_region.py +5 -5
  223. openstackclient/tests/unit/identity/v3/test_registered_limit.py +5 -5
  224. openstackclient/tests/unit/identity/v3/test_role.py +8 -8
  225. openstackclient/tests/unit/identity/v3/test_role_assignment.py +1 -1
  226. openstackclient/tests/unit/identity/v3/test_service.py +5 -5
  227. openstackclient/tests/unit/identity/v3/test_token.py +2 -2
  228. openstackclient/tests/unit/identity/v3/test_trust.py +4 -4
  229. openstackclient/tests/unit/identity/v3/test_user.py +77 -10
  230. openstackclient/tests/unit/image/v2/test_image.py +11 -11
  231. openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
  232. openstackclient/tests/unit/network/test_common.py +0 -155
  233. openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
  234. openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
  235. openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
  236. openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
  237. openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
  238. openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
  239. openstackclient/tests/unit/network/v2/fakes.py +5 -77
  240. openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
  241. openstackclient/tests/unit/network/v2/fwaas/test_group.py +923 -0
  242. openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
  243. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +1005 -0
  244. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
  245. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
  246. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
  247. openstackclient/tests/unit/network/v2/test_address_group.py +26 -2
  248. openstackclient/tests/unit/network/v2/test_address_scope.py +24 -0
  249. openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +27 -2
  250. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +37 -13
  251. openstackclient/tests/unit/network/v2/test_ip_availability.py +25 -0
  252. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +29 -3
  253. openstackclient/tests/unit/network/v2/test_network.py +74 -12
  254. openstackclient/tests/unit/network/v2/test_network_agent.py +58 -5
  255. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
  256. openstackclient/tests/unit/network/v2/test_network_flavor.py +26 -2
  257. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +24 -0
  258. openstackclient/tests/unit/network/v2/test_network_meter.py +24 -0
  259. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +25 -1
  260. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
  261. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +24 -0
  262. openstackclient/tests/unit/network/v2/test_network_rbac.py +25 -1
  263. openstackclient/tests/unit/network/v2/test_network_segment.py +25 -1
  264. openstackclient/tests/unit/network/v2/test_network_segment_range.py +31 -10
  265. openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
  266. openstackclient/tests/unit/network/v2/test_port.py +166 -0
  267. openstackclient/tests/unit/network/v2/test_router.py +36 -16
  268. openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +11 -8
  269. openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +28 -37
  270. openstackclient/tests/unit/network/v2/test_subnet.py +30 -5
  271. openstackclient/tests/unit/network/v2/test_subnet_pool.py +26 -1
  272. openstackclient/tests/unit/object/v1/fakes.py +8 -7
  273. openstackclient/tests/unit/object/v1/test_container.py +65 -101
  274. openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
  275. openstackclient/tests/unit/object/v1/test_object.py +44 -84
  276. openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
  277. openstackclient/tests/unit/test_hacking.py +108 -0
  278. openstackclient/tests/unit/volume/v2/fakes.py +21 -140
  279. openstackclient/tests/unit/volume/v2/test_volume_backup.py +6 -14
  280. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +8 -1
  281. openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
  282. openstackclient/tests/unit/volume/v3/fakes.py +205 -100
  283. openstackclient/tests/unit/volume/v3/test_backup_record.py +114 -0
  284. openstackclient/tests/unit/volume/v3/test_consistency_group.py +720 -0
  285. openstackclient/tests/unit/volume/v3/test_consistency_group_snapshot.py +354 -0
  286. openstackclient/tests/unit/volume/v3/test_qos_specs.py +455 -0
  287. openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
  288. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +3 -1
  289. openstackclient/tests/unit/volume/v3/test_volume_backend.py +158 -0
  290. openstackclient/tests/unit/volume/v3/test_volume_backup.py +6 -14
  291. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +65 -0
  292. openstackclient/tests/unit/volume/v3/test_volume_host.py +115 -0
  293. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +61 -1
  294. openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
  295. openstackclient/volume/client.py +7 -3
  296. openstackclient/volume/v2/backup_record.py +15 -6
  297. openstackclient/volume/v2/consistency_group.py +29 -17
  298. openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
  299. openstackclient/volume/v2/qos_specs.py +28 -17
  300. openstackclient/volume/v2/service.py +17 -6
  301. openstackclient/volume/v2/volume.py +60 -30
  302. openstackclient/volume/v2/volume_backend.py +19 -6
  303. openstackclient/volume/v2/volume_backup.py +48 -23
  304. openstackclient/volume/v2/volume_host.py +6 -4
  305. openstackclient/volume/v2/volume_snapshot.py +49 -24
  306. openstackclient/volume/v2/volume_transfer_request.py +31 -13
  307. openstackclient/volume/v2/volume_type.py +43 -24
  308. openstackclient/volume/v3/backup_record.py +94 -0
  309. openstackclient/volume/v3/block_storage_cleanup.py +11 -3
  310. openstackclient/volume/v3/block_storage_cluster.py +19 -7
  311. openstackclient/volume/v3/block_storage_log_level.py +15 -6
  312. openstackclient/volume/v3/block_storage_manage.py +10 -4
  313. openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
  314. openstackclient/volume/v3/consistency_group.py +400 -0
  315. openstackclient/volume/v3/consistency_group_snapshot.py +225 -0
  316. openstackclient/volume/v3/qos_specs.py +389 -0
  317. openstackclient/volume/v3/service.py +16 -6
  318. openstackclient/volume/v3/volume.py +92 -40
  319. openstackclient/volume/v3/volume_attachment.py +47 -21
  320. openstackclient/volume/v3/volume_backend.py +130 -0
  321. openstackclient/volume/v3/volume_backup.py +55 -27
  322. openstackclient/volume/v3/volume_group.py +23 -13
  323. openstackclient/volume/v3/volume_group_snapshot.py +34 -17
  324. openstackclient/volume/v3/volume_group_type.py +27 -14
  325. openstackclient/volume/v3/volume_host.py +74 -0
  326. openstackclient/volume/v3/volume_message.py +18 -8
  327. openstackclient/volume/v3/volume_snapshot.py +70 -32
  328. openstackclient/volume/v3/volume_transfer_request.py +31 -13
  329. openstackclient/volume/v3/volume_type.py +42 -24
  330. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/METADATA +7 -8
  331. python_openstackclient-10.1.0.dist-info/RECORD +524 -0
  332. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/WHEEL +1 -1
  333. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/entry_points.txt +77 -25
  334. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/AUTHORS +9 -0
  335. python_openstackclient-10.1.0.dist-info/pbr.json +1 -0
  336. openstackclient/api/image_v1.py +0 -69
  337. openstackclient/api/image_v2.py +0 -79
  338. openstackclient/network/v2/floating_ip_pool.py +0 -38
  339. openstackclient/tests/functional/image/v1/test_image.py +0 -97
  340. openstackclient/tests/unit/api/test_image_v1.py +0 -96
  341. openstackclient/tests/unit/api/test_image_v2.py +0 -96
  342. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
  343. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
  344. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
  345. openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
  346. openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
  347. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
  348. python_openstackclient-9.0.0.dist-info/RECORD +0 -499
  349. python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
  350. /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
  351. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/licenses/LICENSE +0 -0
  352. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.1.0.dist-info}/top_level.txt +0 -0
@@ -16,7 +16,8 @@
16
16
  import logging
17
17
  import os
18
18
  import sys
19
- import urllib
19
+ from typing import Any
20
+ import urllib.parse
20
21
 
21
22
  from osc_lib import utils
22
23
 
@@ -31,12 +32,15 @@ PUBLIC_CONTAINER_ACLS = [GLOBAL_READ_ACL, LIST_CONTENTS_ACL]
31
32
  class APIv1(api.BaseAPI):
32
33
  """Object Store v1 API"""
33
34
 
34
- def __init__(self, **kwargs):
35
+ def __init__(self, **kwargs: Any) -> None:
35
36
  super().__init__(**kwargs)
36
37
 
37
38
  def container_create(
38
- self, container=None, public=False, storage_policy=None
39
- ):
39
+ self,
40
+ container: str,
41
+ public: bool = False,
42
+ storage_policy: str | None = None,
43
+ ) -> dict[str, Any | None]:
40
44
  """Create a container
41
45
 
42
46
  :param string container:
@@ -58,7 +62,9 @@ class APIv1(api.BaseAPI):
58
62
  headers['x-storage-policy'] = storage_policy
59
63
 
60
64
  response = self.create(
61
- urllib.parse.quote(container), method='PUT', headers=headers
65
+ urllib.parse.quote(container),
66
+ method='PUT',
67
+ headers=headers,
62
68
  )
63
69
 
64
70
  data = {
@@ -69,10 +75,7 @@ class APIv1(api.BaseAPI):
69
75
 
70
76
  return data
71
77
 
72
- def container_delete(
73
- self,
74
- container=None,
75
- ):
78
+ def container_delete(self, container: str) -> None:
76
79
  """Delete a container
77
80
 
78
81
  :param string container:
@@ -84,13 +87,13 @@ class APIv1(api.BaseAPI):
84
87
 
85
88
  def container_list(
86
89
  self,
87
- full_listing=False,
88
- limit=None,
89
- marker=None,
90
- end_marker=None,
91
- prefix=None,
92
- **params,
93
- ):
90
+ full_listing: bool = False,
91
+ limit: int | None = None,
92
+ marker: str | None = None,
93
+ end_marker: str | None = None,
94
+ prefix: str | None = None,
95
+ **params: Any,
96
+ ) -> Any:
94
97
  """Get containers in an account
95
98
 
96
99
  :param boolean full_listing:
@@ -142,10 +145,7 @@ class APIv1(api.BaseAPI):
142
145
 
143
146
  return self.list('', **params)
144
147
 
145
- def container_save(
146
- self,
147
- container=None,
148
- ):
148
+ def container_save(self, container: str) -> None:
149
149
  """Save all the content from a container
150
150
 
151
151
  :param string container:
@@ -158,9 +158,9 @@ class APIv1(api.BaseAPI):
158
158
 
159
159
  def container_set(
160
160
  self,
161
- container,
162
- properties,
163
- ):
161
+ container: str,
162
+ properties: dict[str, str],
163
+ ) -> None:
164
164
  """Set container properties
165
165
 
166
166
  :param string container:
@@ -173,10 +173,7 @@ class APIv1(api.BaseAPI):
173
173
  if headers:
174
174
  self.create(urllib.parse.quote(container), headers=headers)
175
175
 
176
- def container_show(
177
- self,
178
- container=None,
179
- ):
176
+ def container_show(self, container: str) -> dict[str, Any]:
180
177
  """Get container details
181
178
 
182
179
  :param string container:
@@ -213,9 +210,9 @@ class APIv1(api.BaseAPI):
213
210
 
214
211
  def container_unset(
215
212
  self,
216
- container,
217
- properties,
218
- ):
213
+ container: str,
214
+ properties: dict[str, str],
215
+ ) -> None:
219
216
  """Unset container properties
220
217
 
221
218
  :param string container:
@@ -231,11 +228,8 @@ class APIv1(api.BaseAPI):
231
228
  self.create(urllib.parse.quote(container), headers=headers)
232
229
 
233
230
  def object_create(
234
- self,
235
- container=None,
236
- object=None,
237
- name=None,
238
- ):
231
+ self, container: str, object: str, name: str | None = None
232
+ ) -> dict[str, Any]:
239
233
  """Create an object inside a container
240
234
 
241
235
  :param string container:
@@ -254,33 +248,25 @@ class APIv1(api.BaseAPI):
254
248
 
255
249
  # For uploading a file, if name is provided then set it as the
256
250
  # object's name in the container.
257
- object_name_str = name if name else object
251
+ name = name if name else object
258
252
 
259
- full_url = (
260
- f"{urllib.parse.quote(container)}/"
261
- f"{urllib.parse.quote(object_name_str)}"
262
- )
263
253
  with open(object, 'rb') as f:
264
254
  response = self.create(
265
- full_url,
255
+ f"{urllib.parse.quote(container)}/{urllib.parse.quote(name)}",
266
256
  method='PUT',
267
257
  data=f,
268
258
  )
269
259
  data = {
270
260
  'account': self._find_account_id(),
271
261
  'container': container,
272
- 'object': object_name_str,
262
+ 'object': name,
273
263
  'x-trans-id': response.headers.get('X-Trans-Id'),
274
264
  'etag': response.headers.get('Etag'),
275
265
  }
276
266
 
277
267
  return data
278
268
 
279
- def object_delete(
280
- self,
281
- container=None,
282
- object=None,
283
- ):
269
+ def object_delete(self, container: str, object: str) -> None:
284
270
  """Delete an object from a container
285
271
 
286
272
  :param string container:
@@ -298,15 +284,15 @@ class APIv1(api.BaseAPI):
298
284
 
299
285
  def object_list(
300
286
  self,
301
- container=None,
302
- full_listing=False,
303
- limit=None,
304
- marker=None,
305
- end_marker=None,
306
- delimiter=None,
307
- prefix=None,
308
- **params,
309
- ):
287
+ container: str,
288
+ full_listing: bool = False,
289
+ limit: int | None = None,
290
+ marker: str | None = None,
291
+ end_marker: str | None = None,
292
+ delimiter: str | None = None,
293
+ prefix: str | None = None,
294
+ **params: Any,
295
+ ) -> Any:
310
296
  """List objects in a container
311
297
 
312
298
  :param string container:
@@ -374,11 +360,8 @@ class APIv1(api.BaseAPI):
374
360
  return self.list(urllib.parse.quote(container), **params)
375
361
 
376
362
  def object_save(
377
- self,
378
- container=None,
379
- object=None,
380
- file=None,
381
- ):
363
+ self, container: str, object: str, file: str | None = None
364
+ ) -> None:
382
365
  """Save an object stored in a container
383
366
 
384
367
  :param string container:
@@ -394,7 +377,7 @@ class APIv1(api.BaseAPI):
394
377
 
395
378
  response = self._request(
396
379
  'GET',
397
- f"{urllib.parse.quote(container)}/{urllib.parse.quote(object)}",
380
+ f'{urllib.parse.quote(container)}/{urllib.parse.quote(object)}',
398
381
  stream=True,
399
382
  )
400
383
  if response.status_code == 200:
@@ -403,19 +386,20 @@ class APIv1(api.BaseAPI):
403
386
  for chunk in response.iter_content(64 * 1024):
404
387
  f.write(chunk)
405
388
  else:
406
- if not os.path.exists(os.path.dirname(file)):
407
- if len(os.path.dirname(file)) > 0:
408
- os.makedirs(os.path.dirname(file))
409
- with open(file, 'wb') as f:
389
+ file_path = file or ''
390
+ if not os.path.exists(os.path.dirname(file_path)):
391
+ if len(os.path.dirname(file_path)) > 0:
392
+ os.makedirs(os.path.dirname(file_path))
393
+ with open(file_path, 'wb') as f:
410
394
  for chunk in response.iter_content(64 * 1024):
411
395
  f.write(chunk)
412
396
 
413
397
  def object_set(
414
398
  self,
415
- container,
416
- object,
417
- properties,
418
- ):
399
+ container: str,
400
+ object: str,
401
+ properties: dict[str, str],
402
+ ) -> None:
419
403
  """Set object properties
420
404
 
421
405
  :param string container:
@@ -434,11 +418,8 @@ class APIv1(api.BaseAPI):
434
418
  )
435
419
 
436
420
  def object_unset(
437
- self,
438
- container,
439
- object,
440
- properties,
441
- ):
421
+ self, container: str, object: str, properties: dict[str, str]
422
+ ) -> None:
442
423
  """Unset object properties
443
424
 
444
425
  :param string container:
@@ -456,11 +437,7 @@ class APIv1(api.BaseAPI):
456
437
  headers=headers,
457
438
  )
458
439
 
459
- def object_show(
460
- self,
461
- container=None,
462
- object=None,
463
- ):
440
+ def object_show(self, container: str, object: str) -> dict[str, Any]:
464
441
  """Get object details
465
442
 
466
443
  :param string container:
@@ -502,10 +479,7 @@ class APIv1(api.BaseAPI):
502
479
 
503
480
  return data
504
481
 
505
- def account_set(
506
- self,
507
- properties,
508
- ):
482
+ def account_set(self, properties: dict[str, str]) -> None:
509
483
  """Set account properties
510
484
 
511
485
  :param dict properties:
@@ -519,13 +493,13 @@ class APIv1(api.BaseAPI):
519
493
  # registered in the catalog
520
494
  self.create("", headers=headers)
521
495
 
522
- def account_show(self):
496
+ def account_show(self) -> dict[str, Any]:
523
497
  """Show account details"""
524
498
 
525
499
  # NOTE(stevemar): Just a HEAD request to the endpoint already in the
526
500
  # catalog should be enough.
527
501
  response = self._request("HEAD", "")
528
- data = {}
502
+ data: dict[str, Any] = {}
529
503
 
530
504
  properties = self._get_properties(response.headers, 'x-account-meta-')
531
505
  if properties:
@@ -541,8 +515,8 @@ class APIv1(api.BaseAPI):
541
515
 
542
516
  def account_unset(
543
517
  self,
544
- properties,
545
- ):
518
+ properties: dict[str, str],
519
+ ) -> None:
546
520
  """Unset account properties
547
521
 
548
522
  :param dict properties:
@@ -555,11 +529,13 @@ class APIv1(api.BaseAPI):
555
529
  if headers:
556
530
  self.create("", headers=headers)
557
531
 
558
- def _find_account_id(self):
559
- url_parts = urllib.parse.urlparse(self.endpoint)
560
- return url_parts.path.split('/')[-1]
532
+ def _find_account_id(self) -> str:
533
+ url_parts = urllib.parse.urlparse(self.endpoint or '')
534
+ return str(url_parts.path).split('/')[-1]
561
535
 
562
- def _unset_properties(self, properties, header_tag):
536
+ def _unset_properties(
537
+ self, properties: dict[str, str], header_tag: str
538
+ ) -> dict[str, str]:
563
539
  # NOTE(stevemar): As per the API, the headers have to be in the form
564
540
  # of "X-Remove-Account-Meta-Book: x". In the case where metadata is
565
541
  # removed, we can set the value of the header to anything, so it's
@@ -567,13 +543,15 @@ class APIv1(api.BaseAPI):
567
543
  # "X-Remove-Container-Meta-Book: x", and the same logic applies for
568
544
  # Object properties
569
545
 
570
- headers = {}
546
+ headers: dict[str, str] = {}
571
547
  for k in properties:
572
548
  header_name = header_tag % k
573
549
  headers[header_name] = 'x'
574
550
  return headers
575
551
 
576
- def _set_properties(self, properties, header_tag):
552
+ def _set_properties(
553
+ self, properties: dict[str, str], header_tag: str
554
+ ) -> dict[str, str]:
577
555
  # NOTE(stevemar): As per the API, the headers have to be in the form
578
556
  # of "X-Account-Meta-Book: MobyDick". In the case of a Container
579
557
  # property we use: "X-Add-Container-Meta-Book: MobyDick", and the same
@@ -581,7 +559,7 @@ class APIv1(api.BaseAPI):
581
559
 
582
560
  log = logging.getLogger(__name__ + '._set_properties')
583
561
 
584
- headers = {}
562
+ headers: dict[str, str] = {}
585
563
  for k, v in properties.items():
586
564
  if not utils.is_ascii(k) or not utils.is_ascii(v):
587
565
  log.error('Cannot set property %s to non-ascii value', k)
@@ -591,10 +569,10 @@ class APIv1(api.BaseAPI):
591
569
  headers[header_name] = v
592
570
  return headers
593
571
 
594
- def _get_properties(self, headers, header_tag):
572
+ def _get_properties(self, headers: Any, header_tag: str) -> dict[str, Any]:
595
573
  # Add in properties as a top level key, this is consistent with other
596
574
  # OSC commands
597
- properties = {}
575
+ properties: dict[str, Any] = {}
598
576
  for k, v in headers.items():
599
577
  if k.lower().startswith(header_tag):
600
578
  properties[k[len(header_tag) :]] = v
@@ -17,6 +17,7 @@ intentionally supported by SDK.
17
17
  """
18
18
 
19
19
  import http
20
+ from typing import Any
20
21
 
21
22
  from openstack import exceptions as sdk_exceptions
22
23
  from osc_lib import exceptions
@@ -25,7 +26,7 @@ from osc_lib import exceptions
25
26
  # consistency groups
26
27
 
27
28
 
28
- def find_consistency_group(compute_client, name_or_id):
29
+ def find_consistency_group(compute_client: Any, name_or_id: str) -> Any:
29
30
  """Find the consistency group for a given name or ID
30
31
 
31
32
  https://docs.openstack.org/api-ref/block-storage/v3/#show-a-consistency-group-s-details
@@ -17,6 +17,7 @@ intentionally supported by SDK.
17
17
  """
18
18
 
19
19
  import http
20
+ from typing import Any
20
21
 
21
22
  from openstack import exceptions as sdk_exceptions
22
23
  from osc_lib import exceptions
@@ -25,7 +26,7 @@ from osc_lib import exceptions
25
26
  # consistency groups
26
27
 
27
28
 
28
- def find_consistency_group(compute_client, name_or_id):
29
+ def find_consistency_group(compute_client: Any, name_or_id: str) -> Any:
29
30
  """Find the consistency group for a given name or ID
30
31
 
31
32
  https://docs.openstack.org/api-ref/block-storage/v3/#show-a-consistency-group-s-details
@@ -13,10 +13,14 @@
13
13
 
14
14
  """Availability Zone action implementations"""
15
15
 
16
+ import argparse
16
17
  import copy
17
18
  import logging
19
+ from collections.abc import Iterable, Sequence
20
+ from typing import Any
18
21
 
19
22
  from openstack import exceptions as sdk_exceptions
23
+ from openstack import utils as sdk_utils
20
24
  from osc_lib import utils
21
25
 
22
26
  from openstackclient import command
@@ -26,8 +30,10 @@ from openstackclient.i18n import _
26
30
  LOG = logging.getLogger(__name__)
27
31
 
28
32
 
29
- def _xform_compute_availability_zone(az, include_extra):
30
- result = []
33
+ def _xform_compute_availability_zone(
34
+ az: Any, include_extra: bool
35
+ ) -> list[dict[str, str]]:
36
+ result: list[dict[str, str]] = []
31
37
  zone_info = {
32
38
  'zone_name': az.name,
33
39
  'zone_status': (
@@ -61,20 +67,8 @@ def _xform_compute_availability_zone(az, include_extra):
61
67
  return result
62
68
 
63
69
 
64
- def _xform_volume_availability_zone(az):
65
- result = []
66
- zone_info = {
67
- 'zone_name': az.name,
68
- 'zone_status': (
69
- 'available' if az.state['available'] else 'not available'
70
- ),
71
- }
72
- result.append(zone_info)
73
- return result
74
-
75
-
76
- def _xform_network_availability_zone(az):
77
- result = []
70
+ def _xform_network_availability_zone(az: Any) -> list[dict[str, str]]:
71
+ result: list[dict[str, str]] = []
78
72
  zone_info = {}
79
73
  zone_info['zone_name'] = az.name
80
74
  zone_info['zone_status'] = az.state
@@ -85,10 +79,22 @@ def _xform_network_availability_zone(az):
85
79
  return result
86
80
 
87
81
 
82
+ def _xform_volume_availability_zone(az: Any) -> list[dict[str, str]]:
83
+ result: list[dict[str, str]] = []
84
+ zone_info = {
85
+ 'zone_name': az.name,
86
+ 'zone_status': (
87
+ 'available' if az.state['available'] else 'not available'
88
+ ),
89
+ }
90
+ result.append(zone_info)
91
+ return result
92
+
93
+
88
94
  class ListAvailabilityZone(command.Lister):
89
95
  _description = _("List availability zones and their status")
90
96
 
91
- def get_parser(self, prog_name):
97
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
92
98
  parser = super().get_parser(prog_name)
93
99
  parser.add_argument(
94
100
  '--compute',
@@ -116,13 +122,15 @@ class ListAvailabilityZone(command.Lister):
116
122
  )
117
123
  return parser
118
124
 
119
- def _get_compute_availability_zones(self, parsed_args):
125
+ def _get_compute_availability_zones(
126
+ self, parsed_args: argparse.Namespace
127
+ ) -> list[dict[str, str]]:
120
128
  compute_client = self.app.client_manager.compute
121
129
  try:
122
130
  data = list(compute_client.availability_zones(details=True))
123
131
  except sdk_exceptions.ForbiddenException: # policy doesn't allow
124
132
  try:
125
- data = compute_client.availability_zones(details=False)
133
+ data = list(compute_client.availability_zones(details=False))
126
134
  except Exception:
127
135
  raise
128
136
 
@@ -131,26 +139,9 @@ class ListAvailabilityZone(command.Lister):
131
139
  result += _xform_compute_availability_zone(zone, parsed_args.long)
132
140
  return result
133
141
 
134
- def _get_volume_availability_zones(self, parsed_args):
135
- volume_client = self.app.client_manager.sdk_connection.volume
136
- data = []
137
- try:
138
- data = list(volume_client.availability_zones())
139
- except Exception as e:
140
- LOG.debug('Volume availability zone exception: %s', e)
141
- if parsed_args.volume:
142
- message = _(
143
- "Availability zones list not supported by "
144
- "Block Storage API"
145
- )
146
- LOG.warning(message)
147
-
148
- result = []
149
- for zone in data:
150
- result += _xform_volume_availability_zone(zone)
151
- return result
152
-
153
- def _get_network_availability_zones(self, parsed_args):
142
+ def _get_network_availability_zones(
143
+ self, parsed_args: argparse.Namespace
144
+ ) -> list[dict[str, str]]:
154
145
  network_client = self.app.client_manager.network
155
146
  try:
156
147
  # Verify that the extension exists.
@@ -171,7 +162,32 @@ class ListAvailabilityZone(command.Lister):
171
162
  result += _xform_network_availability_zone(zone)
172
163
  return result
173
164
 
174
- def take_action(self, parsed_args):
165
+ def _get_volume_availability_zones(
166
+ self, parsed_args: argparse.Namespace
167
+ ) -> list[dict[str, str]]:
168
+ volume_client = sdk_utils.ensure_service_version(
169
+ self.app.client_manager.sdk_connection.volume, '3'
170
+ )
171
+ data = []
172
+ try:
173
+ data = list(volume_client.availability_zones())
174
+ except Exception as e:
175
+ LOG.debug('Volume availability zone exception: %s', e)
176
+ if parsed_args.volume:
177
+ message = _(
178
+ "Availability zones list not supported by "
179
+ "Block Storage API"
180
+ )
181
+ LOG.warning(message)
182
+
183
+ result = []
184
+ for zone in data:
185
+ result += _xform_volume_availability_zone(zone)
186
+ return result
187
+
188
+ def take_action(
189
+ self, parsed_args: argparse.Namespace
190
+ ) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
175
191
  columns: tuple[str, ...] = ('Zone Name', 'Zone Status')
176
192
  if parsed_args.long:
177
193
  columns += (
@@ -184,17 +200,17 @@ class ListAvailabilityZone(command.Lister):
184
200
  # Show everything by default.
185
201
  show_all = (
186
202
  not parsed_args.compute
187
- and not parsed_args.volume
188
203
  and not parsed_args.network
204
+ and not parsed_args.volume
189
205
  )
190
206
 
191
207
  result = []
192
208
  if parsed_args.compute or show_all:
193
209
  result += self._get_compute_availability_zones(parsed_args)
194
- if parsed_args.volume or show_all:
195
- result += self._get_volume_availability_zones(parsed_args)
196
210
  if parsed_args.network or show_all:
197
211
  result += self._get_network_availability_zones(parsed_args)
212
+ if parsed_args.volume or show_all:
213
+ result += self._get_volume_availability_zones(parsed_args)
198
214
 
199
215
  return (
200
216
  columns,