python-openstackclient 9.0.0__py3-none-any.whl → 10.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) 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 +58 -42
  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 +14 -6
  14. openstackclient/common/pagination.py +8 -2
  15. openstackclient/common/progressbar.py +7 -6
  16. openstackclient/common/project_cleanup.py +13 -7
  17. openstackclient/common/quota.py +97 -99
  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 +39 -21
  25. openstackclient/compute/v2/host.py +14 -6
  26. openstackclient/compute/v2/hypervisor.py +14 -5
  27. openstackclient/compute/v2/hypervisor_stats.py +10 -2
  28. openstackclient/compute/v2/keypair.py +29 -14
  29. openstackclient/compute/v2/server.py +249 -169
  30. openstackclient/compute/v2/server_backup.py +10 -4
  31. openstackclient/compute/v2/server_event.py +21 -12
  32. openstackclient/compute/v2/server_group.py +21 -11
  33. openstackclient/compute/v2/server_image.py +19 -10
  34. openstackclient/compute/v2/server_migration.py +24 -10
  35. openstackclient/compute/v2/server_share.py +274 -0
  36. openstackclient/compute/v2/server_volume.py +10 -4
  37. openstackclient/compute/v2/service.py +14 -7
  38. openstackclient/compute/v2/usage.py +26 -21
  39. openstackclient/identity/client.py +8 -3
  40. openstackclient/identity/common.py +78 -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 +26 -12
  51. openstackclient/identity/v3/application_credential.py +59 -24
  52. openstackclient/identity/v3/catalog.py +14 -7
  53. openstackclient/identity/v3/consumer.py +22 -11
  54. openstackclient/identity/v3/credential.py +36 -16
  55. openstackclient/identity/v3/domain.py +37 -18
  56. openstackclient/identity/v3/ec2creds.py +25 -12
  57. openstackclient/identity/v3/endpoint.py +42 -20
  58. openstackclient/identity/v3/endpoint_group.py +28 -17
  59. openstackclient/identity/v3/federation_protocol.py +38 -16
  60. openstackclient/identity/v3/group.py +55 -32
  61. openstackclient/identity/v3/identity_provider.py +92 -57
  62. openstackclient/identity/v3/implied_role.py +21 -9
  63. openstackclient/identity/v3/limit.py +38 -16
  64. openstackclient/identity/v3/mapping.py +26 -13
  65. openstackclient/identity/v3/policy.py +23 -12
  66. openstackclient/identity/v3/project.py +43 -23
  67. openstackclient/identity/v3/region.py +36 -16
  68. openstackclient/identity/v3/registered_limit.py +40 -16
  69. openstackclient/identity/v3/role.py +61 -31
  70. openstackclient/identity/v3/role_assignment.py +23 -6
  71. openstackclient/identity/v3/service.py +36 -16
  72. openstackclient/identity/v3/service_provider.py +37 -15
  73. openstackclient/identity/v3/tag.py +23 -6
  74. openstackclient/identity/v3/token.py +30 -14
  75. openstackclient/identity/v3/trust.py +32 -14
  76. openstackclient/identity/v3/unscoped_saml.py +10 -2
  77. openstackclient/identity/v3/user.py +49 -26
  78. openstackclient/image/client.py +7 -3
  79. openstackclient/image/v1/image.py +33 -26
  80. openstackclient/image/v2/cache.py +14 -9
  81. openstackclient/image/v2/image.py +74 -48
  82. openstackclient/image/v2/info.py +7 -1
  83. openstackclient/image/v2/metadef_namespaces.py +109 -13
  84. openstackclient/image/v2/metadef_objects.py +28 -15
  85. openstackclient/image/v2/metadef_properties.py +24 -13
  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 +15 -6
  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 +36 -22
  93. openstackclient/network/v2/address_group.py +27 -16
  94. openstackclient/network/v2/address_scope.py +24 -13
  95. openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
  96. openstackclient/network/v2/bgpvpn/constants.py +30 -0
  97. openstackclient/network/v2/bgpvpn/network_association.py +214 -0
  98. openstackclient/network/v2/bgpvpn/port_association.py +490 -0
  99. openstackclient/network/v2/bgpvpn/router_association.py +288 -0
  100. openstackclient/network/v2/default_security_group_rule.py +19 -10
  101. openstackclient/network/v2/floating_ip.py +110 -159
  102. openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
  103. openstackclient/network/v2/fwaas/__init__.py +0 -0
  104. openstackclient/network/v2/fwaas/group.py +466 -0
  105. openstackclient/network/v2/fwaas/policy.py +518 -0
  106. openstackclient/network/v2/fwaas/rule.py +574 -0
  107. openstackclient/network/v2/ip_availability.py +13 -5
  108. openstackclient/network/v2/l3_conntrack_helper.py +22 -13
  109. openstackclient/network/v2/local_ip.py +24 -13
  110. openstackclient/network/v2/local_ip_association.py +14 -7
  111. openstackclient/network/v2/ndp_proxy.py +20 -11
  112. openstackclient/network/v2/network.py +129 -196
  113. openstackclient/network/v2/network_agent.py +46 -25
  114. openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
  115. openstackclient/network/v2/network_flavor.py +27 -16
  116. openstackclient/network/v2/network_flavor_profile.py +23 -12
  117. openstackclient/network/v2/network_meter.py +21 -10
  118. openstackclient/network/v2/network_meter_rule.py +21 -11
  119. openstackclient/network/v2/network_qos_policy.py +25 -15
  120. openstackclient/network/v2/network_qos_rule.py +32 -17
  121. openstackclient/network/v2/network_qos_rule_type.py +13 -5
  122. openstackclient/network/v2/network_rbac.py +23 -12
  123. openstackclient/network/v2/network_segment.py +20 -11
  124. openstackclient/network/v2/network_segment_range.py +56 -29
  125. openstackclient/network/v2/network_service_provider.py +7 -1
  126. openstackclient/network/v2/network_trunk.py +38 -22
  127. openstackclient/network/v2/port.py +54 -29
  128. openstackclient/network/v2/router.py +75 -52
  129. openstackclient/network/v2/security_group.py +87 -157
  130. openstackclient/network/v2/security_group_rule.py +100 -280
  131. openstackclient/network/v2/subnet.py +49 -28
  132. openstackclient/network/v2/subnet_pool.py +30 -17
  133. openstackclient/network/v2/taas/tap_flow.py +22 -11
  134. openstackclient/network/v2/taas/tap_mirror.py +22 -11
  135. openstackclient/network/v2/taas/tap_service.py +23 -12
  136. openstackclient/object/client.py +7 -2
  137. openstackclient/object/v1/account.py +13 -6
  138. openstackclient/object/v1/container.py +25 -15
  139. openstackclient/object/v1/object.py +25 -15
  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 +25 -19
  151. openstackclient/tests/functional/identity/v3/test_group.py +20 -20
  152. openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
  153. openstackclient/tests/functional/identity/v3/test_project.py +10 -10
  154. openstackclient/tests/functional/identity/v3/test_role.py +18 -18
  155. openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
  156. openstackclient/tests/functional/identity/v3/test_user.py +8 -8
  157. openstackclient/tests/functional/image/base.py +1 -6
  158. openstackclient/tests/functional/network/v2/common.py +5 -2
  159. openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
  160. openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
  161. openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
  162. openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
  163. openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
  164. openstackclient/tests/functional/object/v1/common.py +4 -0
  165. openstackclient/tests/functional/volume/v2/common.py +4 -0
  166. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
  167. openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
  168. openstackclient/tests/functional/volume/v3/common.py +4 -0
  169. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
  170. openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
  171. openstackclient/tests/unit/common/test_availability_zone.py +35 -49
  172. openstackclient/tests/unit/common/test_extension.py +2 -2
  173. openstackclient/tests/unit/common/test_module.py +12 -7
  174. openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
  175. openstackclient/tests/unit/common/test_quota.py +6 -26
  176. openstackclient/tests/unit/compute/v2/fakes.py +25 -0
  177. openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
  178. openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
  179. openstackclient/tests/unit/compute/v2/test_server.py +11 -96
  180. openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
  181. openstackclient/tests/unit/identity/v3/fakes.py +3 -0
  182. openstackclient/tests/unit/identity/v3/test_group.py +4 -14
  183. openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
  184. openstackclient/tests/unit/identity/v3/test_user.py +4 -4
  185. openstackclient/tests/unit/image/v2/test_image.py +11 -11
  186. openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
  187. openstackclient/tests/unit/network/test_common.py +0 -155
  188. openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
  189. openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
  190. openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
  191. openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
  192. openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
  193. openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
  194. openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
  195. openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
  196. openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
  197. openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
  198. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
  199. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
  200. openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
  201. openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
  202. openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
  203. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
  204. openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
  205. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
  206. openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
  207. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
  208. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
  209. openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
  210. openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
  211. openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
  212. openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
  213. openstackclient/tests/unit/network/v2/test_router.py +8 -9
  214. openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
  215. openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
  216. openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
  217. openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
  218. openstackclient/tests/unit/object/v1/fakes.py +8 -7
  219. openstackclient/tests/unit/object/v1/test_container.py +65 -101
  220. openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
  221. openstackclient/tests/unit/object/v1/test_object.py +44 -84
  222. openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
  223. openstackclient/tests/unit/test_hacking.py +108 -0
  224. openstackclient/tests/unit/volume/v2/fakes.py +1 -0
  225. openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
  226. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
  227. openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
  228. openstackclient/tests/unit/volume/v3/fakes.py +1 -0
  229. openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
  230. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
  231. openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
  232. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
  233. openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
  234. openstackclient/volume/client.py +7 -3
  235. openstackclient/volume/v2/backup_record.py +15 -6
  236. openstackclient/volume/v2/consistency_group.py +29 -17
  237. openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
  238. openstackclient/volume/v2/qos_specs.py +28 -17
  239. openstackclient/volume/v2/service.py +17 -6
  240. openstackclient/volume/v2/volume.py +57 -29
  241. openstackclient/volume/v2/volume_backend.py +19 -6
  242. openstackclient/volume/v2/volume_backup.py +46 -20
  243. openstackclient/volume/v2/volume_host.py +6 -4
  244. openstackclient/volume/v2/volume_snapshot.py +50 -24
  245. openstackclient/volume/v2/volume_transfer_request.py +31 -13
  246. openstackclient/volume/v2/volume_type.py +43 -24
  247. openstackclient/volume/v3/block_storage_cleanup.py +11 -3
  248. openstackclient/volume/v3/block_storage_cluster.py +19 -7
  249. openstackclient/volume/v3/block_storage_log_level.py +15 -6
  250. openstackclient/volume/v3/block_storage_manage.py +10 -4
  251. openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
  252. openstackclient/volume/v3/service.py +16 -6
  253. openstackclient/volume/v3/volume.py +89 -39
  254. openstackclient/volume/v3/volume_attachment.py +43 -21
  255. openstackclient/volume/v3/volume_backup.py +53 -24
  256. openstackclient/volume/v3/volume_group.py +23 -13
  257. openstackclient/volume/v3/volume_group_snapshot.py +32 -13
  258. openstackclient/volume/v3/volume_group_type.py +26 -13
  259. openstackclient/volume/v3/volume_message.py +15 -7
  260. openstackclient/volume/v3/volume_snapshot.py +69 -32
  261. openstackclient/volume/v3/volume_transfer_request.py +31 -13
  262. openstackclient/volume/v3/volume_type.py +42 -24
  263. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
  264. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +271 -260
  265. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
  266. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
  267. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +4 -0
  268. python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
  269. openstackclient/api/image_v1.py +0 -69
  270. openstackclient/api/image_v2.py +0 -79
  271. openstackclient/network/v2/floating_ip_pool.py +0 -38
  272. openstackclient/tests/functional/image/v1/test_image.py +0 -97
  273. openstackclient/tests/unit/api/test_image_v1.py +0 -96
  274. openstackclient/tests/unit/api/test_image_v2.py +0 -96
  275. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
  276. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
  277. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
  278. openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
  279. openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
  280. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
  281. python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
  282. /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
  283. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
  284. {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
@@ -14,11 +14,12 @@
14
14
  """Router action implementations"""
15
15
 
16
16
  import argparse
17
+ from collections.abc import Iterable, Sequence
17
18
  import collections
18
19
  import copy
19
20
  import json
20
21
  import logging
21
- import typing as ty
22
+ from typing import Any
22
23
 
23
24
  from cliff import columns as cliff_columns
24
25
  from osc_lib.cli import format_columns
@@ -36,25 +37,25 @@ LOG = logging.getLogger(__name__)
36
37
 
37
38
 
38
39
  class AdminStateColumn(cliff_columns.FormattableColumn[bool]):
39
- def human_readable(self):
40
+ def human_readable(self) -> str:
40
41
  return 'UP' if self._value else 'DOWN'
41
42
 
42
43
 
43
- class RouterInfoColumn(cliff_columns.FormattableColumn[ty.Any]):
44
- def human_readable(self):
44
+ class RouterInfoColumn(cliff_columns.FormattableColumn[Any]):
45
+ def human_readable(self) -> str:
45
46
  try:
46
47
  return json.dumps(self._value)
47
48
  except (TypeError, KeyError):
48
49
  return ''
49
50
 
50
51
 
51
- class RoutesColumn(cliff_columns.FormattableColumn[ty.Any]):
52
- def human_readable(self):
52
+ class RoutesColumn(cliff_columns.FormattableColumn[Any]):
53
+ def human_readable(self) -> str:
53
54
  # Map the route keys to match --route option.
54
55
  for route in self._value or []:
55
56
  if 'nexthop' in route:
56
57
  route['gateway'] = route.pop('nexthop')
57
- return utils.format_list_of_dicts(self._value)
58
+ return utils.format_list_of_dicts(self._value) or ""
58
59
 
59
60
 
60
61
  _formatters = {
@@ -68,7 +69,7 @@ _formatters = {
68
69
  }
69
70
 
70
71
 
71
- def _get_columns(item):
72
+ def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
72
73
  column_map = {
73
74
  'is_ha': 'ha',
74
75
  'is_distributed': 'distributed',
@@ -76,19 +77,19 @@ def _get_columns(item):
76
77
  }
77
78
  if hasattr(item, 'interfaces_info'):
78
79
  column_map['interfaces_info'] = 'interfaces_info'
79
- invisible_columns = ['location', 'tenant_id']
80
+ hidden_columns = ['location', 'tenant_id']
80
81
  if item.is_ha is None:
81
- invisible_columns.append('is_ha')
82
+ hidden_columns.append('is_ha')
82
83
  column_map.pop('is_ha')
83
84
  if item.is_distributed is None:
84
- invisible_columns.append('is_distributed')
85
+ hidden_columns.append('is_distributed')
85
86
  column_map.pop('is_distributed')
86
87
  return utils.get_osc_show_columns_for_sdk_resource(
87
- item, column_map, invisible_columns
88
+ item, column_map, hidden_columns
88
89
  )
89
90
 
90
91
 
91
- def is_multiple_gateways_supported(n_client):
92
+ def is_multiple_gateways_supported(n_client: Any) -> bool:
92
93
  return (
93
94
  n_client.find_extension(
94
95
  "external-gateway-multihoming", ignore_missing=True
@@ -97,7 +98,9 @@ def is_multiple_gateways_supported(n_client):
97
98
  )
98
99
 
99
100
 
100
- def _passed_multiple_gateways(extension_supported, external_gateways):
101
+ def _passed_multiple_gateways(
102
+ extension_supported: bool, external_gateways: list[Any]
103
+ ) -> bool:
101
104
  passed_multiple_gws = len(external_gateways) > 1
102
105
  if passed_multiple_gws and not extension_supported:
103
106
  msg = _(
@@ -109,13 +112,15 @@ def _passed_multiple_gateways(extension_supported, external_gateways):
109
112
  return passed_multiple_gws
110
113
 
111
114
 
112
- def _get_external_gateway_attrs(client_manager, parsed_args):
113
- attrs: dict[str, ty.Any] = {}
115
+ def _get_external_gateway_attrs(
116
+ client_manager: Any, parsed_args: argparse.Namespace
117
+ ) -> dict[str, Any]:
118
+ attrs: dict[str, Any] = {}
114
119
 
115
120
  if parsed_args.external_gateways:
116
- external_gateways: collections.defaultdict[str, list[dict]] = (
117
- collections.defaultdict(list)
118
- )
121
+ external_gateways: collections.defaultdict[
122
+ str, list[dict[str, Any]]
123
+ ] = collections.defaultdict(list)
119
124
  n_client = client_manager.network
120
125
  first_network_id = ''
121
126
 
@@ -206,8 +211,10 @@ def _get_external_gateway_attrs(client_manager, parsed_args):
206
211
  return attrs
207
212
 
208
213
 
209
- def _get_attrs(client_manager, parsed_args):
210
- attrs = {}
214
+ def _get_attrs(
215
+ client_manager: Any, parsed_args: argparse.Namespace
216
+ ) -> dict[str, Any]:
217
+ attrs: dict[str, Any] = {}
211
218
  n_client = client_manager.network
212
219
 
213
220
  if parsed_args.name is not None:
@@ -257,7 +264,7 @@ def _get_attrs(client_manager, parsed_args):
257
264
  return attrs
258
265
 
259
266
 
260
- def _parser_add_bfd_ecmp_arguments(parser):
267
+ def _parser_add_bfd_ecmp_arguments(parser: argparse.ArgumentParser) -> None:
261
268
  """Helper to add BFD and ECMP args for CreateRouter and SetRouter."""
262
269
  parser.add_argument(
263
270
  '--enable-default-route-bfd',
@@ -298,7 +305,9 @@ def _parser_add_bfd_ecmp_arguments(parser):
298
305
  )
299
306
 
300
307
 
301
- def _command_check_bfd_ecmp_supported(attrs, client):
308
+ def _command_check_bfd_ecmp_supported(
309
+ attrs: dict[str, Any], client: Any
310
+ ) -> None:
302
311
  """Helper to check for server side support when bfd/ecmp attrs provided.
303
312
 
304
313
  :raises: exceptions.CommandError
@@ -318,7 +327,7 @@ def _command_check_bfd_ecmp_supported(attrs, client):
318
327
  class AddPortToRouter(command.Command):
319
328
  _description = _("Add a port to a router")
320
329
 
321
- def get_parser(self, prog_name):
330
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
322
331
  parser = super().get_parser(prog_name)
323
332
  parser.add_argument(
324
333
  'router',
@@ -330,7 +339,7 @@ class AddPortToRouter(command.Command):
330
339
  )
331
340
  return parser
332
341
 
333
- def take_action(self, parsed_args):
342
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
334
343
  client = self.app.client_manager.network
335
344
  port = client.find_port(parsed_args.port, ignore_missing=False)
336
345
  client.add_interface_to_router(
@@ -342,7 +351,7 @@ class AddPortToRouter(command.Command):
342
351
  class AddSubnetToRouter(command.Command):
343
352
  _description = _("Add a subnet to a router")
344
353
 
345
- def get_parser(self, prog_name):
354
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
346
355
  parser = super().get_parser(prog_name)
347
356
  parser.add_argument(
348
357
  'router',
@@ -356,7 +365,7 @@ class AddSubnetToRouter(command.Command):
356
365
  )
357
366
  return parser
358
367
 
359
- def take_action(self, parsed_args):
368
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
360
369
  client = self.app.client_manager.network
361
370
  subnet = client.find_subnet(parsed_args.subnet, ignore_missing=False)
362
371
  client.add_interface_to_router(
@@ -368,7 +377,7 @@ class AddSubnetToRouter(command.Command):
368
377
  class AddExtraRoutesToRouter(command.ShowOne):
369
378
  _description = _("Add extra static routes to a router's routing table.")
370
379
 
371
- def get_parser(self, prog_name):
380
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
372
381
  parser = super().get_parser(prog_name)
373
382
  parser.add_argument(
374
383
  'router',
@@ -398,7 +407,9 @@ class AddExtraRoutesToRouter(command.ShowOne):
398
407
  )
399
408
  return parser
400
409
 
401
- def take_action(self, parsed_args):
410
+ def take_action(
411
+ self, parsed_args: argparse.Namespace
412
+ ) -> tuple[Sequence[str], Iterable[Any]]:
402
413
  if parsed_args.routes is not None:
403
414
  for route in parsed_args.routes:
404
415
  route['nexthop'] = route.pop('gateway')
@@ -419,7 +430,7 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
419
430
  "Remove extra static routes from a router's routing table."
420
431
  )
421
432
 
422
- def get_parser(self, prog_name):
433
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
423
434
  parser = super().get_parser(prog_name)
424
435
  parser.add_argument(
425
436
  'router',
@@ -449,7 +460,9 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
449
460
  )
450
461
  return parser
451
462
 
452
- def take_action(self, parsed_args):
463
+ def take_action(
464
+ self, parsed_args: argparse.Namespace
465
+ ) -> tuple[Sequence[str], Iterable[Any]]:
453
466
  if parsed_args.routes is not None:
454
467
  for route in parsed_args.routes:
455
468
  route['nexthop'] = route.pop('gateway')
@@ -470,7 +483,7 @@ class RemoveExtraRoutesFromRouter(command.ShowOne):
470
483
  class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
471
484
  _description = _("Create a new router")
472
485
 
473
- def get_parser(self, prog_name):
486
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
474
487
  parser = super().get_parser(prog_name)
475
488
  parser.add_argument(
476
489
  'name', metavar='<name>', help=_("New router name")
@@ -597,7 +610,9 @@ class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
597
610
 
598
611
  return parser
599
612
 
600
- def take_action(self, parsed_args):
613
+ def take_action(
614
+ self, parsed_args: argparse.Namespace
615
+ ) -> tuple[Sequence[str], Iterable[Any]]:
601
616
  client = self.app.client_manager.network
602
617
 
603
618
  attrs = _get_attrs(self.app.client_manager, parsed_args)
@@ -661,7 +676,7 @@ class CreateRouter(command.ShowOne, common.NeutronCommandWithExtraArgs):
661
676
  class DeleteRouter(command.Command):
662
677
  _description = _("Delete router(s)")
663
678
 
664
- def get_parser(self, prog_name):
679
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
665
680
  parser = super().get_parser(prog_name)
666
681
  parser.add_argument(
667
682
  'router',
@@ -671,7 +686,7 @@ class DeleteRouter(command.Command):
671
686
  )
672
687
  return parser
673
688
 
674
- def take_action(self, parsed_args):
689
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
675
690
  client = self.app.client_manager.network
676
691
  result = 0
677
692
 
@@ -703,7 +718,7 @@ class DeleteRouter(command.Command):
703
718
  class ListRouter(command.Lister):
704
719
  _description = _("List routers")
705
720
 
706
- def get_parser(self, prog_name):
721
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
707
722
  parser = super().get_parser(prog_name)
708
723
  parser.add_argument(
709
724
  '--name',
@@ -742,7 +757,9 @@ class ListRouter(command.Lister):
742
757
 
743
758
  return parser
744
759
 
745
- def take_action(self, parsed_args):
760
+ def take_action(
761
+ self, parsed_args: argparse.Namespace
762
+ ) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
746
763
  identity_client = self.app.client_manager.identity
747
764
  client = self.app.client_manager.network
748
765
 
@@ -834,7 +851,7 @@ class ListRouter(command.Lister):
834
851
  )
835
852
 
836
853
  @staticmethod
837
- def _filter_match(data, conditions):
854
+ def _filter_match(data: Any, conditions: dict[str, Any]) -> bool:
838
855
  for key, value in conditions.items():
839
856
  try:
840
857
  if getattr(data, key) != value:
@@ -851,7 +868,7 @@ class ListRouter(command.Lister):
851
868
  class RemovePortFromRouter(command.Command):
852
869
  _description = _("Remove a port from a router")
853
870
 
854
- def get_parser(self, prog_name):
871
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
855
872
  parser = super().get_parser(prog_name)
856
873
  parser.add_argument(
857
874
  'router',
@@ -865,7 +882,7 @@ class RemovePortFromRouter(command.Command):
865
882
  )
866
883
  return parser
867
884
 
868
- def take_action(self, parsed_args):
885
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
869
886
  client = self.app.client_manager.network
870
887
  port = client.find_port(parsed_args.port, ignore_missing=False)
871
888
  client.remove_interface_from_router(
@@ -877,7 +894,7 @@ class RemovePortFromRouter(command.Command):
877
894
  class RemoveSubnetFromRouter(command.Command):
878
895
  _description = _("Remove a subnet from a router")
879
896
 
880
- def get_parser(self, prog_name):
897
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
881
898
  parser = super().get_parser(prog_name)
882
899
  parser.add_argument(
883
900
  'router',
@@ -893,7 +910,7 @@ class RemoveSubnetFromRouter(command.Command):
893
910
  )
894
911
  return parser
895
912
 
896
- def take_action(self, parsed_args):
913
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
897
914
  client = self.app.client_manager.network
898
915
  subnet = client.find_subnet(parsed_args.subnet, ignore_missing=False)
899
916
  client.remove_interface_from_router(
@@ -907,7 +924,7 @@ class RemoveSubnetFromRouter(command.Command):
907
924
  class SetRouter(common.NeutronCommandWithExtraArgs):
908
925
  _description = _("Set router properties")
909
926
 
910
- def get_parser(self, prog_name):
927
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
911
928
  parser = super().get_parser(prog_name)
912
929
  parser.add_argument(
913
930
  'router',
@@ -1051,7 +1068,7 @@ class SetRouter(common.NeutronCommandWithExtraArgs):
1051
1068
  _parser_add_bfd_ecmp_arguments(parser)
1052
1069
  return parser
1053
1070
 
1054
- def take_action(self, parsed_args):
1071
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
1055
1072
  client = self.app.client_manager.network
1056
1073
  obj = client.find_router(parsed_args.router, ignore_missing=False)
1057
1074
 
@@ -1141,7 +1158,7 @@ class SetRouter(common.NeutronCommandWithExtraArgs):
1141
1158
  class ShowRouter(command.ShowOne):
1142
1159
  _description = _("Display router details")
1143
1160
 
1144
- def get_parser(self, prog_name):
1161
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1145
1162
  parser = super().get_parser(prog_name)
1146
1163
  parser.add_argument(
1147
1164
  'router',
@@ -1150,7 +1167,9 @@ class ShowRouter(command.ShowOne):
1150
1167
  )
1151
1168
  return parser
1152
1169
 
1153
- def take_action(self, parsed_args):
1170
+ def take_action(
1171
+ self, parsed_args: argparse.Namespace
1172
+ ) -> tuple[Sequence[str], Iterable[Any]]:
1154
1173
  client = self.app.client_manager.network
1155
1174
  obj = client.find_router(parsed_args.router, ignore_missing=False)
1156
1175
  interfaces_info = []
@@ -1177,7 +1196,7 @@ class ShowRouter(command.ShowOne):
1177
1196
  class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
1178
1197
  _description = _("Unset router properties")
1179
1198
 
1180
- def get_parser(self, prog_name):
1199
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1181
1200
  parser = super().get_parser(prog_name)
1182
1201
  parser.add_argument(
1183
1202
  '--route',
@@ -1217,7 +1236,7 @@ class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
1217
1236
  _tag.add_tag_option_to_parser_for_unset(parser, _('router'))
1218
1237
  return parser
1219
1238
 
1220
- def take_action(self, parsed_args):
1239
+ def take_action(self, parsed_args: argparse.Namespace) -> None:
1221
1240
  client = self.app.client_manager.network
1222
1241
  obj = client.find_router(parsed_args.router, ignore_missing=False)
1223
1242
  tmp_routes = copy.deepcopy(obj.routes)
@@ -1272,7 +1291,7 @@ class UnsetRouter(common.NeutronUnsetCommandWithExtraArgs):
1272
1291
  class AddGatewayToRouter(command.ShowOne):
1273
1292
  _description = _("Add router gateway")
1274
1293
 
1275
- def get_parser(self, prog_name):
1294
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1276
1295
  parser = super().get_parser(prog_name)
1277
1296
  parser.add_argument(
1278
1297
  'router',
@@ -1304,7 +1323,9 @@ class AddGatewayToRouter(command.ShowOne):
1304
1323
  )
1305
1324
  return parser
1306
1325
 
1307
- def take_action(self, parsed_args):
1326
+ def take_action(
1327
+ self, parsed_args: argparse.Namespace
1328
+ ) -> tuple[Sequence[str], Iterable[Any]]:
1308
1329
  client = self.app.client_manager.network
1309
1330
  if not is_multiple_gateways_supported(client):
1310
1331
  msg = _(
@@ -1339,7 +1360,7 @@ class AddGatewayToRouter(command.ShowOne):
1339
1360
  class RemoveGatewayFromRouter(command.ShowOne):
1340
1361
  _description = _("Remove router gateway")
1341
1362
 
1342
- def get_parser(self, prog_name):
1363
+ def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
1343
1364
  parser = super().get_parser(prog_name)
1344
1365
  parser.add_argument(
1345
1366
  'router',
@@ -1371,7 +1392,9 @@ class RemoveGatewayFromRouter(command.ShowOne):
1371
1392
  )
1372
1393
  return parser
1373
1394
 
1374
- def take_action(self, parsed_args):
1395
+ def take_action(
1396
+ self, parsed_args: argparse.Namespace
1397
+ ) -> tuple[Sequence[str], Iterable[Any]]:
1375
1398
  client = self.app.client_manager.network
1376
1399
  if not is_multiple_gateways_supported(client):
1377
1400
  msg = _(