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
@@ -13,11 +13,14 @@
13
13
 
14
14
  """Subnet action implementations"""
15
15
 
16
+ import argparse
16
17
  import copy
18
+ from collections.abc import Iterable, Sequence
17
19
  import logging
18
- import typing as ty
20
+ from typing import Any
19
21
 
20
22
  from cliff import columns as cliff_columns
23
+ from openstack.network.v2 import subnet as _subnet
21
24
  from osc_lib.cli import format_columns
22
25
  from osc_lib.cli import parseractions
23
26
  from osc_lib import exceptions
@@ -25,6 +28,7 @@ from osc_lib import utils
25
28
  from osc_lib.utils import tags as _tag
26
29
 
27
30
  from openstackclient import command
31
+ from openstackclient.common import pagination
28
32
  from openstackclient.i18n import _
29
33
  from openstackclient.identity import common as identity_common
30
34
  from openstackclient.network import common
@@ -32,7 +36,9 @@ from openstackclient.network import common
32
36
  LOG = logging.getLogger(__name__)
33
37
 
34
38
 
35
- def _update_arguments(obj_list, parsed_args_list, option):
39
+ def _update_arguments(
40
+ obj_list: list[Any], parsed_args_list: list[Any], option: str
41
+ ) -> None:
36
42
  for item in parsed_args_list:
37
43
  try:
38
44
  obj_list.remove(item)
@@ -44,8 +50,8 @@ def _update_arguments(obj_list, parsed_args_list, option):
44
50
  raise exceptions.CommandError(msg)
45
51
 
46
52
 
47
- class AllocationPoolsColumn(cliff_columns.FormattableColumn[ty.Any]):
48
- def human_readable(self):
53
+ class AllocationPoolsColumn(cliff_columns.FormattableColumn[Any]):
54
+ def human_readable(self) -> str:
49
55
  pool_formatted = [
50
56
  '{}-{}'.format(pool.get('start', ''), pool.get('end', ''))
51
57
  for pool in self._value
@@ -53,18 +59,19 @@ class AllocationPoolsColumn(cliff_columns.FormattableColumn[ty.Any]):
53
59
  return ','.join(pool_formatted)
54
60
 
55
61
 
56
- class HostRoutesColumn(cliff_columns.FormattableColumn[ty.Any]):
57
- def human_readable(self):
62
+ class HostRoutesColumn(cliff_columns.FormattableColumn[Any]):
63
+ def human_readable(self) -> str:
58
64
  # Map the host route keys to match --host-route option.
59
- return utils.format_list_of_dicts(
60
- convert_entries_to_gateway(self._value)
65
+ return (
66
+ utils.format_list_of_dicts(convert_entries_to_gateway(self._value))
67
+ or ""
61
68
  )
62
69
 
63
70
 
64
- class UnsortedListColumn(cliff_columns.FormattableColumn[list[ty.Any]]):
71
+ class UnsortedListColumn(cliff_columns.FormattableColumn[list[Any]]):
65
72
  # format_columns.ListColumn sorts the output, but for things like
66
73
  # DNS server addresses the order matters
67
- def human_readable(self):
74
+ def human_readable(self) -> str:
68
75
  return ', '.join(self._value)
69
76
 
70
77
 
@@ -77,7 +84,9 @@ _formatters = {
77
84
  }
78
85
 
79
86
 
80
- def _get_common_parse_arguments(parser, is_create=True):
87
+ def _get_common_parse_arguments(
88
+ parser: argparse.ArgumentParser, is_create: bool = True
89
+ ) -> None:
81
90
  parser.add_argument(
82
91
  '--allocation-pool',
83
92
  metavar='start=<ip-address>,end=<ip-address>',
@@ -159,7 +168,9 @@ def _get_common_parse_arguments(parser, is_create=True):
159
168
  )
160
169
 
161
170
 
162
- def _get_columns(item):
171
+ def _get_columns(
172
+ item: _subnet.Subnet,
173
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
163
174
  column_map = {
164
175
  'is_dhcp_enabled': 'enable_dhcp',
165
176
  'subnet_pool_id': 'subnetpool_id',
@@ -176,7 +187,9 @@ def _get_columns(item):
176
187
  )
177
188
 
178
189
 
179
- def convert_entries_to_nexthop(entries):
190
+ def convert_entries_to_nexthop(
191
+ entries: list[dict[str, Any]],
192
+ ) -> list[dict[str, Any]]:
180
193
  # Change 'gateway' entry to 'nexthop'
181
194
  changed_entries = copy.deepcopy(entries)
182
195
  for entry in changed_entries:
@@ -187,7 +200,9 @@ def convert_entries_to_nexthop(entries):
187
200
  return changed_entries
188
201
 
189
202
 
190
- def convert_entries_to_gateway(entries):
203
+ def convert_entries_to_gateway(
204
+ entries: list[dict[str, Any]],
205
+ ) -> list[dict[str, Any]]:
191
206
  # Change 'nexthop' entry to 'gateway'
192
207
  changed_entries = copy.deepcopy(entries)
193
208
  for entry in changed_entries:
@@ -198,7 +213,11 @@ def convert_entries_to_gateway(entries):
198
213
  return changed_entries
199
214
 
200
215
 
201
- def _get_attrs(client_manager, parsed_args, is_create=True):
216
+ def _get_attrs(
217
+ client_manager: Any,
218
+ parsed_args: argparse.Namespace,
219
+ is_create: bool = True,
220
+ ) -> dict[str, Any]:
202
221
  attrs = {}
203
222
  client = client_manager.network
204
223
  if 'name' in parsed_args and parsed_args.name is not None:
@@ -287,12 +306,10 @@ def _get_attrs(client_manager, parsed_args, is_create=True):
287
306
  return attrs
288
307
 
289
308
 
290
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
291
- # OSC minimum requirements include SDK 1.0.
292
309
  class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
293
310
  _description = _("Create a subnet")
294
311
 
295
- def get_parser(self, prog_name):
312
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
296
313
  parser = super().get_parser(prog_name)
297
314
  parser.add_argument(
298
315
  'name', metavar='<name>', help=_("New subnet name")
@@ -419,7 +436,9 @@ class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
419
436
  _tag.add_tag_option_to_parser_for_create(parser, _('subnet'))
420
437
  return parser
421
438
 
422
- def take_action(self, parsed_args):
439
+ def take_action(
440
+ self, parsed_args: argparse.Namespace
441
+ ) -> tuple[Sequence[str], Iterable[Any]]:
423
442
  client = self.app.client_manager.network
424
443
  attrs = _get_attrs(self.app.client_manager, parsed_args)
425
444
  attrs.update(
@@ -436,7 +455,7 @@ class CreateSubnet(command.ShowOne, common.NeutronCommandWithExtraArgs):
436
455
  class DeleteSubnet(command.Command):
437
456
  _description = _("Delete subnet(s)")
438
457
 
439
- def get_parser(self, prog_name):
458
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
440
459
  parser = super().get_parser(prog_name)
441
460
  parser.add_argument(
442
461
  'subnet',
@@ -446,7 +465,7 @@ class DeleteSubnet(command.Command):
446
465
  )
447
466
  return parser
448
467
 
449
- def take_action(self, parsed_args):
468
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
450
469
  client = self.app.client_manager.network
451
470
  result = 0
452
471
 
@@ -473,12 +492,10 @@ class DeleteSubnet(command.Command):
473
492
  raise exceptions.CommandError(msg)
474
493
 
475
494
 
476
- # TODO(abhiraut): Use only the SDK resource mapped attribute names once the
477
- # OSC minimum requirements include SDK 1.0.
478
495
  class ListSubnet(command.Lister):
479
496
  _description = _("List subnets")
480
497
 
481
- def get_parser(self, prog_name):
498
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
482
499
  parser = super().get_parser(prog_name)
483
500
  parser.add_argument(
484
501
  '--long',
@@ -564,12 +581,17 @@ class ListSubnet(command.Lister):
564
581
  ),
565
582
  )
566
583
  _tag.add_tag_filtering_option_to_parser(parser, _('subnets'))
584
+ pagination.add_marker_pagination_option_to_parser(parser)
567
585
  return parser
568
586
 
569
- def take_action(self, parsed_args):
587
+ def take_action(
588
+ self, parsed_args: argparse.Namespace
589
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
570
590
  identity_client = self.app.client_manager.identity
571
591
  network_client = self.app.client_manager.network
592
+
572
593
  filters = {}
594
+
573
595
  if parsed_args.ip_version:
574
596
  filters['ip_version'] = parsed_args.ip_version
575
597
  if parsed_args.dhcp:
@@ -603,7 +625,14 @@ class ListSubnet(command.Lister):
603
625
  parsed_args.subnet_pool, ignore_missing=False
604
626
  ).id
605
627
  filters['subnetpool_id'] = subnetpool_id
628
+ if parsed_args.marker is not None:
629
+ filters['marker'] = parsed_args.marker
630
+ if parsed_args.limit is not None:
631
+ filters['limit'] = parsed_args.limit
632
+ if parsed_args.max_items is not None:
633
+ filters['max_items'] = parsed_args.max_items
606
634
  _tag.get_tag_filtering_args(parsed_args, filters)
635
+
607
636
  data = network_client.subnets(**filters)
608
637
 
609
638
  headers: tuple[str, ...] = ('ID', 'Name', 'Network', 'Subnet')
@@ -645,12 +674,10 @@ class ListSubnet(command.Lister):
645
674
  )
646
675
 
647
676
 
648
- # TODO(abhiraut): Use the SDK resource mapped attribute names once the
649
- # OSC minimum requirements include SDK 1.0.
650
677
  class SetSubnet(common.NeutronCommandWithExtraArgs):
651
678
  _description = _("Set subnet properties")
652
679
 
653
- def get_parser(self, prog_name):
680
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
654
681
  parser = super().get_parser(prog_name)
655
682
  parser.add_argument(
656
683
  'subnet',
@@ -707,7 +734,7 @@ class SetSubnet(common.NeutronCommandWithExtraArgs):
707
734
  _get_common_parse_arguments(parser, is_create=False)
708
735
  return parser
709
736
 
710
- def take_action(self, parsed_args):
737
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
711
738
  client = self.app.client_manager.network
712
739
  obj = client.find_subnet(parsed_args.subnet, ignore_missing=False)
713
740
  attrs = _get_attrs(
@@ -743,7 +770,7 @@ class SetSubnet(common.NeutronCommandWithExtraArgs):
743
770
  class ShowSubnet(command.ShowOne):
744
771
  _description = _("Display subnet details")
745
772
 
746
- def get_parser(self, prog_name):
773
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
747
774
  parser = super().get_parser(prog_name)
748
775
  parser.add_argument(
749
776
  'subnet',
@@ -752,7 +779,9 @@ class ShowSubnet(command.ShowOne):
752
779
  )
753
780
  return parser
754
781
 
755
- def take_action(self, parsed_args):
782
+ def take_action(
783
+ self, parsed_args: argparse.Namespace
784
+ ) -> tuple[Sequence[str], Iterable[Any]]:
756
785
  obj = self.app.client_manager.network.find_subnet(
757
786
  parsed_args.subnet, ignore_missing=False
758
787
  )
@@ -764,7 +793,7 @@ class ShowSubnet(command.ShowOne):
764
793
  class UnsetSubnet(common.NeutronUnsetCommandWithExtraArgs):
765
794
  _description = _("Unset subnet properties")
766
795
 
767
- def get_parser(self, prog_name):
796
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
768
797
  parser = super().get_parser(prog_name)
769
798
  parser.add_argument(
770
799
  '--allocation-pool',
@@ -827,11 +856,11 @@ class UnsetSubnet(common.NeutronUnsetCommandWithExtraArgs):
827
856
  )
828
857
  return parser
829
858
 
830
- def take_action(self, parsed_args):
859
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
831
860
  client = self.app.client_manager.network
832
861
  obj = client.find_subnet(parsed_args.subnet, ignore_missing=False)
833
862
 
834
- attrs: dict[str, ty.Any] = {}
863
+ attrs: dict[str, Any] = {}
835
864
  if parsed_args.gateway:
836
865
  attrs['gateway_ip'] = None
837
866
  if parsed_args.dns_nameservers:
@@ -13,8 +13,12 @@
13
13
 
14
14
  """Subnet pool action implementations"""
15
15
 
16
+ import argparse
17
+ from collections.abc import Iterable, Sequence
16
18
  import logging
19
+ from typing import Any
17
20
 
21
+ from openstack.network.v2 import subnet_pool as _subnet_pool
18
22
  from osc_lib.cli import format_columns
19
23
  from osc_lib.cli import parseractions
20
24
  from osc_lib import exceptions
@@ -22,15 +26,17 @@ from osc_lib import utils
22
26
  from osc_lib.utils import tags as _tag
23
27
 
24
28
  from openstackclient import command
29
+ from openstackclient.common import pagination
25
30
  from openstackclient.i18n import _
26
31
  from openstackclient.identity import common as identity_common
27
32
  from openstackclient.network import common
28
33
 
29
-
30
34
  LOG = logging.getLogger(__name__)
31
35
 
32
36
 
33
- def _get_columns(item):
37
+ def _get_columns(
38
+ item: _subnet_pool.SubnetPool,
39
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
34
40
  column_map = {
35
41
  'default_prefix_length': 'default_prefixlen',
36
42
  'is_shared': 'shared',
@@ -49,7 +55,9 @@ _formatters = {
49
55
  }
50
56
 
51
57
 
52
- def _get_attrs(client_manager, parsed_args):
58
+ def _get_attrs(
59
+ client_manager: Any, parsed_args: argparse.Namespace
60
+ ) -> dict[str, Any]:
53
61
  attrs = {}
54
62
  network_client = client_manager.network
55
63
 
@@ -100,7 +108,9 @@ def _get_attrs(client_manager, parsed_args):
100
108
  return attrs
101
109
 
102
110
 
103
- def _add_prefix_options(parser, for_create=False):
111
+ def _add_prefix_options(
112
+ parser: argparse.ArgumentParser, for_create: bool = False
113
+ ) -> None:
104
114
  parser.add_argument(
105
115
  '--pool-prefix',
106
116
  metavar='<pool-prefix>',
@@ -135,7 +145,7 @@ def _add_prefix_options(parser, for_create=False):
135
145
  )
136
146
 
137
147
 
138
- def _add_default_options(parser):
148
+ def _add_default_options(parser: argparse.ArgumentParser) -> None:
139
149
  default_group = parser.add_mutually_exclusive_group()
140
150
  default_group.add_argument(
141
151
  '--default',
@@ -149,12 +159,10 @@ def _add_default_options(parser):
149
159
  )
150
160
 
151
161
 
152
- # TODO(rtheis): Use the SDK resource mapped attribute names once the
153
- # OSC minimum requirements include SDK 1.0.
154
162
  class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
155
163
  _description = _("Create subnet pool")
156
164
 
157
- def get_parser(self, prog_name):
165
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
158
166
  parser = super().get_parser(prog_name)
159
167
  parser.add_argument(
160
168
  'name', metavar='<name>', help=_("Name of the new subnet pool")
@@ -205,7 +213,9 @@ class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
205
213
  _tag.add_tag_option_to_parser_for_create(parser, _('subnet pool'))
206
214
  return parser
207
215
 
208
- def take_action(self, parsed_args):
216
+ def take_action(
217
+ self, parsed_args: argparse.Namespace
218
+ ) -> tuple[Sequence[str], Iterable[Any]]:
209
219
  client = self.app.client_manager.network
210
220
  attrs = _get_attrs(self.app.client_manager, parsed_args)
211
221
  # NeutronServer expects prefixes to be a List
@@ -225,7 +235,7 @@ class CreateSubnetPool(command.ShowOne, common.NeutronCommandWithExtraArgs):
225
235
  class DeleteSubnetPool(command.Command):
226
236
  _description = _("Delete subnet pool(s)")
227
237
 
228
- def get_parser(self, prog_name):
238
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
229
239
  parser = super().get_parser(prog_name)
230
240
  parser.add_argument(
231
241
  'subnet_pool',
@@ -235,7 +245,7 @@ class DeleteSubnetPool(command.Command):
235
245
  )
236
246
  return parser
237
247
 
238
- def take_action(self, parsed_args):
248
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
239
249
  client = self.app.client_manager.network
240
250
  result = 0
241
251
 
@@ -261,12 +271,10 @@ class DeleteSubnetPool(command.Command):
261
271
  raise exceptions.CommandError(msg)
262
272
 
263
273
 
264
- # TODO(rtheis): Use only the SDK resource mapped attribute names once the
265
- # OSC minimum requirements include SDK 1.0.
266
274
  class ListSubnetPool(command.Lister):
267
275
  _description = _("List subnet pools")
268
276
 
269
- def get_parser(self, prog_name):
277
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
270
278
  parser = super().get_parser(prog_name)
271
279
  parser.add_argument(
272
280
  '--long',
@@ -325,12 +333,15 @@ class ListSubnetPool(command.Lister):
325
333
  ),
326
334
  )
327
335
  _tag.add_tag_filtering_option_to_parser(parser, _('subnet pools'))
336
+ pagination.add_marker_pagination_option_to_parser(parser)
328
337
  return parser
329
338
 
330
- def take_action(self, parsed_args):
339
+ def take_action(
340
+ self, parsed_args: argparse.Namespace
341
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
331
342
  identity_client = self.app.client_manager.identity
332
343
  network_client = self.app.client_manager.network
333
- filters = {}
344
+ filters: dict[str, Any] = {}
334
345
  if parsed_args.share:
335
346
  filters['shared'] = True
336
347
  filters['is_shared'] = True
@@ -355,7 +366,14 @@ class ListSubnetPool(command.Lister):
355
366
  parsed_args.address_scope, ignore_missing=False
356
367
  )
357
368
  filters['address_scope_id'] = address_scope.id
369
+ if parsed_args.marker is not None:
370
+ filters['marker'] = parsed_args.marker
371
+ if parsed_args.limit is not None:
372
+ filters['limit'] = parsed_args.limit
373
+ if parsed_args.max_items is not None:
374
+ filters['max_items'] = parsed_args.max_items
358
375
  _tag.get_tag_filtering_args(parsed_args, filters)
376
+
359
377
  data = network_client.subnet_pools(**filters)
360
378
 
361
379
  headers: tuple[str, ...] = ('ID', 'Name', 'Prefixes')
@@ -389,12 +407,10 @@ class ListSubnetPool(command.Lister):
389
407
  )
390
408
 
391
409
 
392
- # TODO(rtheis): Use the SDK resource mapped attribute names once the
393
- # OSC minimum requirements include SDK 1.0.
394
410
  class SetSubnetPool(common.NeutronCommandWithExtraArgs):
395
411
  _description = _("Set subnet pool properties")
396
412
 
397
- def get_parser(self, prog_name):
413
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
398
414
  parser = super().get_parser(prog_name)
399
415
  parser.add_argument(
400
416
  'subnet_pool',
@@ -440,7 +456,7 @@ class SetSubnetPool(common.NeutronCommandWithExtraArgs):
440
456
 
441
457
  return parser
442
458
 
443
- def take_action(self, parsed_args):
459
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
444
460
  client = self.app.client_manager.network
445
461
  obj = client.find_subnet_pool(
446
462
  parsed_args.subnet_pool, ignore_missing=False
@@ -465,7 +481,7 @@ class SetSubnetPool(common.NeutronCommandWithExtraArgs):
465
481
  class ShowSubnetPool(command.ShowOne):
466
482
  _description = _("Display subnet pool details")
467
483
 
468
- def get_parser(self, prog_name):
484
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
469
485
  parser = super().get_parser(prog_name)
470
486
  parser.add_argument(
471
487
  'subnet_pool',
@@ -474,7 +490,9 @@ class ShowSubnetPool(command.ShowOne):
474
490
  )
475
491
  return parser
476
492
 
477
- def take_action(self, parsed_args):
493
+ def take_action(
494
+ self, parsed_args: argparse.Namespace
495
+ ) -> tuple[Sequence[str], Iterable[Any]]:
478
496
  client = self.app.client_manager.network
479
497
  obj = client.find_subnet_pool(
480
498
  parsed_args.subnet_pool, ignore_missing=False
@@ -487,7 +505,7 @@ class ShowSubnetPool(command.ShowOne):
487
505
  class UnsetSubnetPool(command.Command):
488
506
  _description = _("Unset subnet pool properties")
489
507
 
490
- def get_parser(self, prog_name):
508
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
491
509
  parser = super().get_parser(prog_name)
492
510
  parser.add_argument(
493
511
  'subnet_pool',
@@ -497,7 +515,7 @@ class UnsetSubnetPool(command.Command):
497
515
  _tag.add_tag_option_to_parser_for_unset(parser, _('subnet pool'))
498
516
  return parser
499
517
 
500
- def take_action(self, parsed_args):
518
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
501
519
  client = self.app.client_manager.network
502
520
  obj = client.find_subnet_pool(
503
521
  parsed_args.subnet_pool, ignore_missing=False
@@ -12,8 +12,12 @@
12
12
  # License for the specific language governing permissions and limitations
13
13
  # under the License.
14
14
 
15
+ import argparse
15
16
  import logging
17
+ from collections.abc import Iterable, Sequence
18
+ from typing import Any
16
19
 
20
+ from openstack.network.v2 import tap_flow as _tap_flow
17
21
  from osc_lib.cli import format_columns
18
22
  from osc_lib.cli import identity as identity_utils
19
23
  from osc_lib import exceptions
@@ -23,7 +27,6 @@ from osc_lib.utils import columns as column_util
23
27
  from openstackclient import command
24
28
  from openstackclient.i18n import _
25
29
  from openstackclient.identity import common
26
- from openstackclient.network.v2.taas import tap_service
27
30
 
28
31
  LOG = logging.getLogger(__name__)
29
32
 
@@ -45,17 +48,27 @@ _formatters = {
45
48
  }
46
49
 
47
50
 
48
- def _add_updatable_args(parser):
51
+ def _add_updatable_args(parser: argparse.ArgumentParser) -> None:
49
52
  parser.add_argument('--name', help=_('Name of the tap flow.'))
50
53
  parser.add_argument(
51
54
  '--description', help=_('Description of the tap flow.')
52
55
  )
53
56
 
54
57
 
58
+ def _get_columns(
59
+ item: _tap_flow.TapFlow,
60
+ ) -> tuple[tuple[str, ...], tuple[str, ...]]:
61
+ column_map: dict[str, str] = {}
62
+ hidden_columns = ['location', 'tenant_id']
63
+ return osc_utils.get_osc_show_columns_for_sdk_resource(
64
+ item, column_map, hidden_columns
65
+ )
66
+
67
+
55
68
  class CreateTapFlow(command.ShowOne):
56
69
  _description = _("Create a new tap flow.")
57
70
 
58
- def get_parser(self, prog_name):
71
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
59
72
  parser = super().get_parser(prog_name)
60
73
  identity_utils.add_project_owner_option_to_parser(parser)
61
74
  _add_updatable_args(parser)
@@ -92,7 +105,9 @@ class CreateTapFlow(command.ShowOne):
92
105
  )
93
106
  return parser
94
107
 
95
- def take_action(self, parsed_args):
108
+ def take_action(
109
+ self, parsed_args: argparse.Namespace
110
+ ) -> tuple[Sequence[str], Iterable[Any]]:
96
111
  client = self.app.client_manager.network
97
112
  attrs = {}
98
113
  if parsed_args.name is not None:
@@ -120,7 +135,7 @@ class CreateTapFlow(command.ShowOne):
120
135
  parsed_args.project_domain,
121
136
  ).id
122
137
  obj = client.create_tap_flow(**attrs)
123
- display_columns, columns = tap_service._get_columns(obj)
138
+ display_columns, columns = _get_columns(obj)
124
139
  data = osc_utils.get_dict_properties(obj, columns)
125
140
  return display_columns, data
126
141
 
@@ -128,13 +143,15 @@ class CreateTapFlow(command.ShowOne):
128
143
  class ListTapFlow(command.Lister):
129
144
  _description = _("List tap flows.")
130
145
 
131
- def get_parser(self, prog_name):
146
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
132
147
  parser = super().get_parser(prog_name)
133
148
  identity_utils.add_project_owner_option_to_parser(parser)
134
149
 
135
150
  return parser
136
151
 
137
- def take_action(self, parsed_args):
152
+ def take_action(
153
+ self, parsed_args: argparse.Namespace
154
+ ) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
138
155
  client = self.app.client_manager.network
139
156
  params = {}
140
157
  if parsed_args.project is not None:
@@ -161,7 +178,7 @@ class ListTapFlow(command.Lister):
161
178
  class ShowTapFlow(command.ShowOne):
162
179
  _description = _("Show tap flow details.")
163
180
 
164
- def get_parser(self, prog_name):
181
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
165
182
  parser = super().get_parser(prog_name)
166
183
  parser.add_argument(
167
184
  TAP_FLOW,
@@ -170,13 +187,15 @@ class ShowTapFlow(command.ShowOne):
170
187
  )
171
188
  return parser
172
189
 
173
- def take_action(self, parsed_args):
190
+ def take_action(
191
+ self, parsed_args: argparse.Namespace
192
+ ) -> tuple[Sequence[str], Iterable[Any]]:
174
193
  client = self.app.client_manager.network
175
194
  id = client.find_tap_flow(
176
195
  parsed_args.tap_flow, ignore_missing=False
177
196
  ).id
178
197
  obj = client.get_tap_flow(id)
179
- display_columns, columns = tap_service._get_columns(obj)
198
+ display_columns, columns = _get_columns(obj)
180
199
  data = osc_utils.get_dict_properties(obj, columns)
181
200
  return display_columns, data
182
201
 
@@ -184,7 +203,7 @@ class ShowTapFlow(command.ShowOne):
184
203
  class DeleteTapFlow(command.Command):
185
204
  _description = _("Delete a tap flow.")
186
205
 
187
- def get_parser(self, prog_name):
206
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
188
207
  parser = super().get_parser(prog_name)
189
208
  parser.add_argument(
190
209
  TAP_FLOW,
@@ -194,7 +213,7 @@ class DeleteTapFlow(command.Command):
194
213
  )
195
214
  return parser
196
215
 
197
- def take_action(self, parsed_args):
216
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
198
217
  client = self.app.client_manager.network
199
218
  fails = 0
200
219
  for id_or_name in parsed_args.tap_flow:
@@ -219,7 +238,7 @@ class DeleteTapFlow(command.Command):
219
238
  class UpdateTapFlow(command.ShowOne):
220
239
  _description = _("Update a tap flow.")
221
240
 
222
- def get_parser(self, prog_name):
241
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
223
242
  parser = super().get_parser(prog_name)
224
243
  parser.add_argument(
225
244
  TAP_FLOW,
@@ -229,7 +248,9 @@ class UpdateTapFlow(command.ShowOne):
229
248
  _add_updatable_args(parser)
230
249
  return parser
231
250
 
232
- def take_action(self, parsed_args):
251
+ def take_action(
252
+ self, parsed_args: argparse.Namespace
253
+ ) -> tuple[Sequence[str], Iterable[Any]]:
233
254
  client = self.app.client_manager.network
234
255
  original_t_f = client.find_tap_flow(
235
256
  parsed_args.tap_flow, ignore_missing=False