python-openstackclient 6.6.1__py3-none-any.whl → 7.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 (337) hide show
  1. openstackclient/api/api.py +4 -4
  2. openstackclient/api/compute_v2.py +352 -638
  3. openstackclient/api/image_v1.py +1 -1
  4. openstackclient/api/object_store_v1.py +3 -4
  5. openstackclient/common/availability_zone.py +1 -1
  6. openstackclient/common/clientmanager.py +16 -4
  7. openstackclient/common/configuration.py +1 -1
  8. openstackclient/common/extension.py +1 -1
  9. openstackclient/common/limits.py +66 -32
  10. openstackclient/common/module.py +3 -3
  11. openstackclient/common/progressbar.py +2 -2
  12. openstackclient/common/project_cleanup.py +5 -2
  13. openstackclient/common/quota.py +281 -410
  14. openstackclient/common/versions.py +1 -1
  15. openstackclient/compute/client.py +7 -116
  16. openstackclient/compute/v2/agent.py +75 -49
  17. openstackclient/compute/v2/aggregate.py +9 -9
  18. openstackclient/compute/v2/console.py +2 -2
  19. openstackclient/compute/v2/flavor.py +6 -6
  20. openstackclient/compute/v2/host.py +38 -33
  21. openstackclient/compute/v2/hypervisor.py +4 -3
  22. openstackclient/compute/v2/keypair.py +7 -8
  23. openstackclient/compute/v2/server.py +478 -396
  24. openstackclient/compute/v2/server_backup.py +1 -1
  25. openstackclient/compute/v2/server_group.py +4 -4
  26. openstackclient/compute/v2/server_image.py +1 -1
  27. openstackclient/compute/v2/server_migration.py +3 -4
  28. openstackclient/compute/v2/service.py +4 -4
  29. openstackclient/compute/v2/usage.py +3 -3
  30. openstackclient/identity/common.py +34 -0
  31. openstackclient/identity/v2_0/catalog.py +2 -2
  32. openstackclient/identity/v2_0/ec2creds.py +4 -4
  33. openstackclient/identity/v2_0/endpoint.py +4 -4
  34. openstackclient/identity/v2_0/project.py +6 -6
  35. openstackclient/identity/v2_0/role.py +5 -5
  36. openstackclient/identity/v2_0/role_assignment.py +1 -1
  37. openstackclient/identity/v2_0/service.py +4 -4
  38. openstackclient/identity/v2_0/token.py +2 -2
  39. openstackclient/identity/v2_0/user.py +7 -7
  40. openstackclient/identity/v3/access_rule.py +3 -3
  41. openstackclient/identity/v3/application_credential.py +127 -45
  42. openstackclient/identity/v3/catalog.py +2 -2
  43. openstackclient/identity/v3/consumer.py +4 -4
  44. openstackclient/identity/v3/credential.py +5 -5
  45. openstackclient/identity/v3/domain.py +5 -5
  46. openstackclient/identity/v3/ec2creds.py +4 -4
  47. openstackclient/identity/v3/endpoint.py +7 -7
  48. openstackclient/identity/v3/endpoint_group.py +8 -10
  49. openstackclient/identity/v3/federation_protocol.py +5 -5
  50. openstackclient/identity/v3/group.py +8 -8
  51. openstackclient/identity/v3/identity_provider.py +5 -5
  52. openstackclient/identity/v3/implied_role.py +3 -3
  53. openstackclient/identity/v3/limit.py +5 -5
  54. openstackclient/identity/v3/mapping.py +5 -5
  55. openstackclient/identity/v3/policy.py +5 -5
  56. openstackclient/identity/v3/project.py +5 -5
  57. openstackclient/identity/v3/region.py +5 -5
  58. openstackclient/identity/v3/registered_limit.py +5 -5
  59. openstackclient/identity/v3/role.py +7 -7
  60. openstackclient/identity/v3/role_assignment.py +92 -140
  61. openstackclient/identity/v3/service.py +64 -34
  62. openstackclient/identity/v3/service_provider.py +4 -4
  63. openstackclient/identity/v3/tag.py +2 -2
  64. openstackclient/identity/v3/token.py +5 -5
  65. openstackclient/identity/v3/trust.py +3 -3
  66. openstackclient/identity/v3/user.py +144 -80
  67. openstackclient/image/client.py +4 -4
  68. openstackclient/image/v1/image.py +8 -9
  69. openstackclient/image/v2/cache.py +12 -10
  70. openstackclient/image/v2/metadef_objects.py +44 -0
  71. openstackclient/image/v2/metadef_resource_type_association.py +189 -0
  72. openstackclient/image/v2/task.py +1 -1
  73. openstackclient/network/common.py +6 -5
  74. openstackclient/network/utils.py +2 -2
  75. openstackclient/network/v2/address_group.py +6 -6
  76. openstackclient/network/v2/address_scope.py +5 -5
  77. openstackclient/network/v2/default_security_group_rule.py +1 -1
  78. openstackclient/network/v2/floating_ip.py +8 -10
  79. openstackclient/network/v2/floating_ip_pool.py +6 -15
  80. openstackclient/network/v2/floating_ip_port_forwarding.py +5 -13
  81. openstackclient/network/v2/ip_availability.py +2 -2
  82. openstackclient/network/v2/l3_conntrack_helper.py +5 -5
  83. openstackclient/network/v2/network.py +8 -8
  84. openstackclient/network/v2/network_agent.py +8 -8
  85. openstackclient/network/v2/network_auto_allocated_topology.py +2 -2
  86. openstackclient/network/v2/network_flavor.py +6 -8
  87. openstackclient/network/v2/network_flavor_profile.py +4 -4
  88. openstackclient/network/v2/network_meter.py +3 -3
  89. openstackclient/network/v2/network_meter_rule.py +3 -3
  90. openstackclient/network/v2/network_qos_policy.py +5 -5
  91. openstackclient/network/v2/network_qos_rule.py +9 -9
  92. openstackclient/network/v2/network_qos_rule_type.py +1 -1
  93. openstackclient/network/v2/network_rbac.py +5 -5
  94. openstackclient/network/v2/network_segment.py +5 -5
  95. openstackclient/network/v2/network_segment_range.py +7 -7
  96. openstackclient/network/v2/network_trunk.py +7 -7
  97. openstackclient/network/v2/port.py +26 -12
  98. openstackclient/network/v2/router.py +403 -54
  99. openstackclient/network/v2/security_group.py +18 -14
  100. openstackclient/network/v2/security_group_rule.py +18 -15
  101. openstackclient/network/v2/subnet.py +15 -8
  102. openstackclient/network/v2/subnet_pool.py +6 -6
  103. openstackclient/object/v1/account.py +2 -2
  104. openstackclient/object/v1/container.py +7 -7
  105. openstackclient/object/v1/object.py +7 -7
  106. openstackclient/shell.py +4 -6
  107. openstackclient/tests/functional/base.py +1 -1
  108. openstackclient/tests/functional/common/test_extension.py +1 -1
  109. openstackclient/tests/functional/common/test_help.py +2 -2
  110. openstackclient/tests/functional/common/test_module.py +1 -1
  111. openstackclient/tests/functional/common/test_quota.py +43 -61
  112. openstackclient/tests/functional/compute/v2/common.py +2 -2
  113. openstackclient/tests/functional/compute/v2/test_flavor.py +2 -2
  114. openstackclient/tests/functional/compute/v2/test_keypair.py +1 -1
  115. openstackclient/tests/functional/compute/v2/test_server.py +5 -5
  116. openstackclient/tests/functional/compute/v2/test_server_event.py +1 -1
  117. openstackclient/tests/functional/identity/v2/common.py +3 -3
  118. openstackclient/tests/functional/identity/v3/common.py +14 -6
  119. openstackclient/tests/functional/identity/v3/test_application_credential.py +13 -19
  120. openstackclient/tests/functional/identity/v3/test_domain.py +1 -3
  121. openstackclient/tests/functional/identity/v3/test_endpoint.py +1 -1
  122. openstackclient/tests/functional/identity/v3/test_idp.py +1 -1
  123. openstackclient/tests/functional/identity/v3/test_limit.py +2 -2
  124. openstackclient/tests/functional/identity/v3/test_region.py +1 -3
  125. openstackclient/tests/functional/identity/v3/test_registered_limit.py +1 -1
  126. openstackclient/tests/functional/identity/v3/test_role.py +2 -2
  127. openstackclient/tests/functional/identity/v3/test_role_assignment.py +210 -0
  128. openstackclient/tests/functional/identity/v3/test_service.py +4 -6
  129. openstackclient/tests/functional/identity/v3/test_service_provider.py +1 -3
  130. openstackclient/tests/functional/image/base.py +1 -1
  131. openstackclient/tests/functional/image/v2/test_image.py +1 -1
  132. openstackclient/tests/functional/image/v2/test_info.py +1 -1
  133. openstackclient/tests/functional/network/v2/common.py +4 -6
  134. openstackclient/tests/functional/network/v2/test_network.py +5 -3
  135. openstackclient/tests/functional/network/v2/test_network_agent.py +7 -5
  136. openstackclient/tests/functional/network/v2/test_network_qos_rule.py +4 -4
  137. openstackclient/tests/functional/network/v2/test_port.py +11 -7
  138. openstackclient/tests/functional/network/v2/test_router.py +2 -2
  139. openstackclient/tests/functional/object/v1/common.py +1 -1
  140. openstackclient/tests/functional/object/v1/test_container.py +3 -3
  141. openstackclient/tests/functional/object/v1/test_object.py +9 -13
  142. openstackclient/tests/functional/volume/base.py +1 -1
  143. openstackclient/tests/functional/volume/v1/test_service.py +1 -1
  144. openstackclient/tests/functional/volume/v1/test_snapshot.py +2 -2
  145. openstackclient/tests/functional/volume/v1/test_transfer_request.py +2 -2
  146. openstackclient/tests/functional/volume/v1/test_volume_type.py +1 -1
  147. openstackclient/tests/functional/volume/v2/test_service.py +2 -2
  148. openstackclient/tests/functional/volume/v2/test_volume_backup.py +2 -2
  149. openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +2 -2
  150. openstackclient/tests/functional/volume/v2/test_volume_type.py +1 -1
  151. openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +2 -2
  152. openstackclient/tests/functional/volume/v3/test_volume_type.py +1 -1
  153. openstackclient/tests/unit/api/fakes.py +1 -1
  154. openstackclient/tests/unit/api/test_api.py +2 -2
  155. openstackclient/tests/unit/api/test_compute_v2.py +522 -707
  156. openstackclient/tests/unit/api/test_image_v1.py +1 -1
  157. openstackclient/tests/unit/api/test_image_v2.py +1 -1
  158. openstackclient/tests/unit/api/test_object_store_v1.py +4 -4
  159. openstackclient/tests/unit/common/test_limits.py +73 -35
  160. openstackclient/tests/unit/common/test_logs.py +2 -2
  161. openstackclient/tests/unit/common/test_module.py +4 -2
  162. openstackclient/tests/unit/common/test_project_cleanup.py +31 -6
  163. openstackclient/tests/unit/common/test_quota.py +490 -630
  164. openstackclient/tests/unit/compute/v2/fakes.py +37 -286
  165. openstackclient/tests/unit/compute/v2/test_agent.py +189 -147
  166. openstackclient/tests/unit/compute/v2/test_aggregate.py +18 -16
  167. openstackclient/tests/unit/compute/v2/test_console.py +4 -5
  168. openstackclient/tests/unit/compute/v2/test_flavor.py +59 -68
  169. openstackclient/tests/unit/compute/v2/test_host.py +83 -54
  170. openstackclient/tests/unit/compute/v2/test_hypervisor.py +28 -31
  171. openstackclient/tests/unit/compute/v2/test_hypervisor_stats.py +2 -2
  172. openstackclient/tests/unit/compute/v2/test_keypair.py +65 -50
  173. openstackclient/tests/unit/compute/v2/test_server.py +2895 -2459
  174. openstackclient/tests/unit/compute/v2/test_server_backup.py +1 -1
  175. openstackclient/tests/unit/compute/v2/test_server_event.py +14 -39
  176. openstackclient/tests/unit/compute/v2/test_server_group.py +28 -29
  177. openstackclient/tests/unit/compute/v2/test_server_migration.py +43 -68
  178. openstackclient/tests/unit/compute/v2/test_server_volume.py +17 -34
  179. openstackclient/tests/unit/compute/v2/test_service.py +34 -52
  180. openstackclient/tests/unit/compute/v2/test_usage.py +4 -4
  181. openstackclient/tests/unit/fakes.py +11 -11
  182. openstackclient/tests/unit/identity/v2_0/fakes.py +27 -10
  183. openstackclient/tests/unit/identity/v2_0/test_catalog.py +3 -3
  184. openstackclient/tests/unit/identity/v2_0/test_endpoint.py +7 -7
  185. openstackclient/tests/unit/identity/v2_0/test_project.py +8 -8
  186. openstackclient/tests/unit/identity/v2_0/test_role.py +10 -10
  187. openstackclient/tests/unit/identity/v2_0/test_role_assignment.py +4 -4
  188. openstackclient/tests/unit/identity/v2_0/test_service.py +6 -6
  189. openstackclient/tests/unit/identity/v2_0/test_token.py +4 -4
  190. openstackclient/tests/unit/identity/v2_0/test_user.py +8 -8
  191. openstackclient/tests/unit/identity/v3/fakes.py +59 -20
  192. openstackclient/tests/unit/identity/v3/test_access_rule.py +5 -5
  193. openstackclient/tests/unit/identity/v3/test_application_credential.py +212 -235
  194. openstackclient/tests/unit/identity/v3/test_catalog.py +3 -3
  195. openstackclient/tests/unit/identity/v3/test_consumer.py +7 -8
  196. openstackclient/tests/unit/identity/v3/test_credential.py +9 -9
  197. openstackclient/tests/unit/identity/v3/test_domain.py +8 -8
  198. openstackclient/tests/unit/identity/v3/test_endpoint.py +13 -13
  199. openstackclient/tests/unit/identity/v3/test_endpoint_group.py +12 -14
  200. openstackclient/tests/unit/identity/v3/test_group.py +12 -12
  201. openstackclient/tests/unit/identity/v3/test_identity_provider.py +8 -8
  202. openstackclient/tests/unit/identity/v3/test_implied_role.py +5 -5
  203. openstackclient/tests/unit/identity/v3/test_limit.py +7 -7
  204. openstackclient/tests/unit/identity/v3/test_mappings.py +7 -7
  205. openstackclient/tests/unit/identity/v3/test_oauth.py +5 -5
  206. openstackclient/tests/unit/identity/v3/test_project.py +16 -16
  207. openstackclient/tests/unit/identity/v3/test_protocol.py +7 -7
  208. openstackclient/tests/unit/identity/v3/test_region.py +7 -7
  209. openstackclient/tests/unit/identity/v3/test_registered_limit.py +12 -13
  210. openstackclient/tests/unit/identity/v3/test_role.py +13 -13
  211. openstackclient/tests/unit/identity/v3/test_role_assignment.py +410 -331
  212. openstackclient/tests/unit/identity/v3/test_service.py +93 -97
  213. openstackclient/tests/unit/identity/v3/test_service_provider.py +7 -7
  214. openstackclient/tests/unit/identity/v3/test_token.py +4 -4
  215. openstackclient/tests/unit/identity/v3/test_trust.py +9 -9
  216. openstackclient/tests/unit/identity/v3/test_unscoped_saml.py +4 -4
  217. openstackclient/tests/unit/identity/v3/test_user.py +299 -327
  218. openstackclient/tests/unit/image/v1/test_image.py +6 -6
  219. openstackclient/tests/unit/image/v2/fakes.py +46 -9
  220. openstackclient/tests/unit/image/v2/test_cache.py +2 -2
  221. openstackclient/tests/unit/image/v2/test_image.py +3 -3
  222. openstackclient/tests/unit/image/v2/test_metadef_objects.py +62 -0
  223. openstackclient/tests/unit/image/v2/test_metadef_resource_type_association.py +131 -0
  224. openstackclient/tests/unit/integ/base.py +1 -1
  225. openstackclient/tests/unit/integ/cli/test_project.py +4 -4
  226. openstackclient/tests/unit/integ/cli/test_shell.py +7 -7
  227. openstackclient/tests/unit/network/test_common.py +12 -21
  228. openstackclient/tests/unit/network/v2/fakes.py +64 -130
  229. openstackclient/tests/unit/network/v2/test_address_group.py +15 -15
  230. openstackclient/tests/unit/network/v2/test_address_scope.py +13 -13
  231. openstackclient/tests/unit/network/v2/test_default_security_group_rule.py +49 -27
  232. openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +40 -38
  233. openstackclient/tests/unit/network/v2/test_floating_ip_network.py +15 -15
  234. openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +4 -7
  235. openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +3 -5
  236. openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +11 -11
  237. openstackclient/tests/unit/network/v2/test_ip_availability.py +6 -6
  238. openstackclient/tests/unit/network/v2/test_l3_conntrack_helper.py +11 -21
  239. openstackclient/tests/unit/network/v2/test_local_ip.py +7 -7
  240. openstackclient/tests/unit/network/v2/test_local_ip_association.py +3 -5
  241. openstackclient/tests/unit/network/v2/test_ndp_proxy.py +13 -13
  242. openstackclient/tests/unit/network/v2/test_network.py +23 -28
  243. openstackclient/tests/unit/network/v2/test_network_agent.py +17 -21
  244. openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +8 -8
  245. openstackclient/tests/unit/network/v2/test_network_compute.py +66 -65
  246. openstackclient/tests/unit/network/v2/test_network_flavor.py +17 -19
  247. openstackclient/tests/unit/network/v2/test_network_flavor_profile.py +13 -13
  248. openstackclient/tests/unit/network/v2/test_network_meter.py +11 -11
  249. openstackclient/tests/unit/network/v2/test_network_meter_rule.py +11 -11
  250. openstackclient/tests/unit/network/v2/test_network_qos_policy.py +11 -21
  251. openstackclient/tests/unit/network/v2/test_network_qos_rule.py +51 -77
  252. openstackclient/tests/unit/network/v2/test_network_qos_rule_type.py +5 -9
  253. openstackclient/tests/unit/network/v2/test_network_rbac.py +12 -12
  254. openstackclient/tests/unit/network/v2/test_network_segment.py +11 -15
  255. openstackclient/tests/unit/network/v2/test_network_segment_range.py +11 -13
  256. openstackclient/tests/unit/network/v2/test_network_service_provider.py +3 -5
  257. openstackclient/tests/unit/network/v2/test_network_trunk.py +11 -11
  258. openstackclient/tests/unit/network/v2/test_port.py +22 -25
  259. openstackclient/tests/unit/network/v2/test_router.py +721 -51
  260. openstackclient/tests/unit/network/v2/test_security_group_compute.py +65 -49
  261. openstackclient/tests/unit/network/v2/test_security_group_network.py +15 -15
  262. openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +57 -45
  263. openstackclient/tests/unit/network/v2/test_security_group_rule_network.py +11 -19
  264. openstackclient/tests/unit/network/v2/test_subnet.py +29 -25
  265. openstackclient/tests/unit/network/v2/test_subnet_pool.py +15 -15
  266. openstackclient/tests/unit/object/v1/fakes.py +1 -1
  267. openstackclient/tests/unit/object/v1/test_container.py +5 -5
  268. openstackclient/tests/unit/object/v1/test_container_all.py +6 -6
  269. openstackclient/tests/unit/object/v1/test_object.py +3 -3
  270. openstackclient/tests/unit/object/v1/test_object_all.py +5 -5
  271. openstackclient/tests/unit/test_shell.py +5 -5
  272. openstackclient/tests/unit/utils.py +4 -1
  273. openstackclient/tests/unit/volume/test_find_resource.py +2 -2
  274. openstackclient/tests/unit/volume/v1/fakes.py +5 -6
  275. openstackclient/tests/unit/volume/v1/test_volume.py +5 -4
  276. openstackclient/tests/unit/volume/v2/fakes.py +39 -259
  277. openstackclient/tests/unit/volume/v2/test_consistency_group_snapshot.py +5 -5
  278. openstackclient/tests/unit/volume/v2/test_qos_specs.py +9 -9
  279. openstackclient/tests/unit/volume/v2/test_volume.py +21 -87
  280. openstackclient/tests/unit/volume/v2/test_volume_backup.py +7 -368
  281. openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +1 -1
  282. openstackclient/tests/unit/volume/v2/test_volume_transfer_request.py +0 -44
  283. openstackclient/tests/unit/volume/v2/test_volume_type.py +6 -87
  284. openstackclient/tests/unit/volume/v3/fakes.py +505 -22
  285. openstackclient/tests/unit/volume/v3/test_block_storage_cleanup.py +2 -3
  286. openstackclient/tests/unit/volume/v3/test_block_storage_cluster.py +10 -11
  287. openstackclient/tests/unit/volume/v3/test_block_storage_log_level.py +10 -6
  288. openstackclient/tests/unit/volume/v3/test_block_storage_manage.py +25 -17
  289. openstackclient/tests/unit/volume/v3/test_block_storage_resource_filter.py +6 -32
  290. openstackclient/tests/unit/volume/v3/test_service.py +271 -0
  291. openstackclient/tests/unit/volume/v3/test_volume.py +2177 -33
  292. openstackclient/tests/unit/volume/v3/test_volume_attachment.py +48 -52
  293. openstackclient/tests/unit/volume/v3/test_volume_backup.py +892 -0
  294. openstackclient/tests/unit/volume/v3/test_volume_group.py +19 -20
  295. openstackclient/tests/unit/volume/v3/test_volume_group_snapshot.py +14 -34
  296. openstackclient/tests/unit/volume/v3/test_volume_group_type.py +13 -16
  297. openstackclient/tests/unit/volume/v3/test_volume_message.py +10 -11
  298. openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +161 -0
  299. openstackclient/tests/unit/volume/v3/test_volume_transfer_request.py +425 -0
  300. openstackclient/tests/unit/volume/v3/test_volume_type.py +1109 -0
  301. openstackclient/volume/v1/qos_specs.py +7 -7
  302. openstackclient/volume/v1/service.py +2 -2
  303. openstackclient/volume/v1/volume.py +12 -12
  304. openstackclient/volume/v1/volume_backup.py +7 -7
  305. openstackclient/volume/v1/volume_snapshot.py +8 -8
  306. openstackclient/volume/v1/volume_transfer_request.py +5 -5
  307. openstackclient/volume/v1/volume_type.py +7 -7
  308. openstackclient/volume/v2/backup_record.py +2 -2
  309. openstackclient/volume/v2/consistency_group.py +7 -9
  310. openstackclient/volume/v2/consistency_group_snapshot.py +4 -12
  311. openstackclient/volume/v2/qos_specs.py +7 -7
  312. openstackclient/volume/v2/service.py +2 -2
  313. openstackclient/volume/v2/volume.py +80 -80
  314. openstackclient/volume/v2/volume_backend.py +2 -2
  315. openstackclient/volume/v2/volume_backup.py +7 -217
  316. openstackclient/volume/v2/volume_host.py +2 -2
  317. openstackclient/volume/v2/volume_snapshot.py +8 -8
  318. openstackclient/volume/v2/volume_transfer_request.py +5 -37
  319. openstackclient/volume/v2/volume_type.py +7 -89
  320. openstackclient/volume/v3/service.py +56 -0
  321. openstackclient/volume/v3/volume.py +971 -0
  322. openstackclient/volume/v3/volume_attachment.py +31 -29
  323. openstackclient/volume/v3/volume_backup.py +670 -0
  324. openstackclient/volume/v3/volume_message.py +1 -1
  325. openstackclient/volume/v3/volume_snapshot.py +97 -0
  326. openstackclient/volume/v3/volume_transfer_request.py +233 -0
  327. openstackclient/volume/v3/volume_type.py +967 -0
  328. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/AUTHORS +4 -0
  329. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/METADATA +2 -3
  330. python_openstackclient-7.0.0.dist-info/RECORD +502 -0
  331. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/entry_points.txt +33 -27
  332. python_openstackclient-7.0.0.dist-info/pbr.json +1 -0
  333. python_openstackclient-6.6.1.dist-info/RECORD +0 -489
  334. python_openstackclient-6.6.1.dist-info/pbr.json +0 -1
  335. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/LICENSE +0 -0
  336. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/WHEEL +0 -0
  337. {python_openstackclient-6.6.1.dist-info → python_openstackclient-7.0.0.dist-info}/top_level.txt +0 -0
@@ -18,6 +18,7 @@
18
18
  import datetime
19
19
  import json
20
20
  import logging
21
+ import uuid
21
22
 
22
23
  from osc_lib.command import command
23
24
  from osc_lib import exceptions
@@ -30,11 +31,35 @@ from openstackclient.identity import common
30
31
  LOG = logging.getLogger(__name__)
31
32
 
32
33
 
34
+ # TODO(stephenfin): Move this to osc_lib since it's useful elsewhere
35
+ def is_uuid_like(value) -> bool:
36
+ """Returns validation of a value as a UUID.
37
+
38
+ :param val: Value to verify
39
+ :type val: string
40
+ :returns: bool
41
+
42
+ .. versionchanged:: 1.1.1
43
+ Support non-lowercase UUIDs.
44
+ """
45
+ try:
46
+ formatted_value = (
47
+ value.replace('urn:', '')
48
+ .replace('uuid:', '')
49
+ .strip('{}')
50
+ .replace('-', '')
51
+ .lower()
52
+ )
53
+ return str(uuid.UUID(value)).replace('-', '') == formatted_value
54
+ except (TypeError, ValueError, AttributeError):
55
+ return False
56
+
57
+
33
58
  class CreateApplicationCredential(command.ShowOne):
34
59
  _description = _("Create new application credential")
35
60
 
36
61
  def get_parser(self, prog_name):
37
- parser = super(CreateApplicationCredential, self).get_parser(prog_name)
62
+ parser = super().get_parser(prog_name)
38
63
  parser.add_argument(
39
64
  'name',
40
65
  metavar='<name>',
@@ -105,19 +130,16 @@ class CreateApplicationCredential(command.ShowOne):
105
130
  return parser
106
131
 
107
132
  def take_action(self, parsed_args):
108
- identity_client = self.app.client_manager.identity
133
+ identity_client = self.app.client_manager.sdk_connection.identity
134
+ conn = self.app.client_manager.sdk_connection
135
+ user_id = conn.config.get_auth().get_user_id(conn.identity)
109
136
 
110
137
  role_ids = []
111
138
  for role in parsed_args.role:
112
- # A user can only create an application credential for themself,
113
- # not for another user even as an admin, and only on the project to
114
- # which they are currently scoped with a subset of the role
115
- # assignments they have on that project. Don't bother trying to
116
- # look up roles via keystone, just introspect the token.
117
- role_id = common._get_token_resource(
118
- identity_client, "roles", role
119
- )
120
- role_ids.append(role_id)
139
+ if is_uuid_like(role):
140
+ role_ids.append({'id': role})
141
+ else:
142
+ role_ids.append({'name': role})
121
143
 
122
144
  expires_at = None
123
145
  if parsed_args.expiration:
@@ -137,17 +159,17 @@ class CreateApplicationCredential(command.ShowOne):
137
159
  try:
138
160
  with open(parsed_args.access_rules) as f:
139
161
  access_rules = json.load(f)
140
- except IOError:
162
+ except OSError:
141
163
  msg = _(
142
164
  "Access rules is not valid JSON string or file does"
143
165
  " not exist."
144
166
  )
145
167
  raise exceptions.CommandError(msg)
146
168
  else:
147
- access_rules = None
169
+ access_rules = []
148
170
 
149
- app_cred_manager = identity_client.application_credentials
150
- application_credential = app_cred_manager.create(
171
+ application_credential = identity_client.create_application_credential(
172
+ user_id,
151
173
  parsed_args.name,
152
174
  roles=role_ids,
153
175
  expires_at=expires_at,
@@ -157,21 +179,39 @@ class CreateApplicationCredential(command.ShowOne):
157
179
  access_rules=access_rules,
158
180
  )
159
181
 
160
- application_credential._info.pop('links', None)
161
-
162
182
  # Format roles into something sensible
163
- roles = application_credential._info.pop('roles')
164
- msg = ' '.join(r['name'] for r in roles)
165
- application_credential._info['roles'] = msg
166
-
167
- return zip(*sorted(application_credential._info.items()))
183
+ if application_credential['roles']:
184
+ roles = application_credential['roles']
185
+ msg = ' '.join(r['name'] for r in roles)
186
+ application_credential['roles'] = msg
187
+
188
+ columns = (
189
+ 'ID',
190
+ 'Name',
191
+ 'Description',
192
+ 'Project ID',
193
+ 'Roles',
194
+ 'Unrestricted',
195
+ 'Access Rules',
196
+ 'Expires At',
197
+ 'Secret',
198
+ )
199
+ return (
200
+ columns,
201
+ (
202
+ utils.get_dict_properties(
203
+ application_credential,
204
+ columns,
205
+ )
206
+ ),
207
+ )
168
208
 
169
209
 
170
210
  class DeleteApplicationCredential(command.Command):
171
211
  _description = _("Delete application credentials(s)")
172
212
 
173
213
  def get_parser(self, prog_name):
174
- parser = super(DeleteApplicationCredential, self).get_parser(prog_name)
214
+ parser = super().get_parser(prog_name)
175
215
  parser.add_argument(
176
216
  'application_credential',
177
217
  metavar='<application-credential>',
@@ -181,15 +221,19 @@ class DeleteApplicationCredential(command.Command):
181
221
  return parser
182
222
 
183
223
  def take_action(self, parsed_args):
184
- identity_client = self.app.client_manager.identity
224
+ identity_client = self.app.client_manager.sdk_connection.identity
225
+ conn = self.app.client_manager.sdk_connection
226
+ user_id = conn.config.get_auth().get_user_id(conn.identity)
185
227
 
186
228
  errors = 0
187
229
  for ac in parsed_args.application_credential:
188
230
  try:
189
- app_cred = utils.find_resource(
190
- identity_client.application_credentials, ac
231
+ app_cred = identity_client.find_application_credential(
232
+ user_id, ac
233
+ )
234
+ identity_client.delete_application_credential(
235
+ user_id, app_cred.id
191
236
  )
192
- identity_client.application_credentials.delete(app_cred.id)
193
237
  except Exception as e:
194
238
  errors += 1
195
239
  LOG.error(
@@ -213,7 +257,7 @@ class ListApplicationCredential(command.Lister):
213
257
  _description = _("List application credentials")
214
258
 
215
259
  def get_parser(self, prog_name):
216
- parser = super(ListApplicationCredential, self).get_parser(prog_name)
260
+ parser = super().get_parser(prog_name)
217
261
  parser.add_argument(
218
262
  '--user',
219
263
  metavar='<user>',
@@ -223,16 +267,36 @@ class ListApplicationCredential(command.Lister):
223
267
  return parser
224
268
 
225
269
  def take_action(self, parsed_args):
226
- identity_client = self.app.client_manager.identity
270
+ identity_client = self.app.client_manager.sdk_connection.identity
227
271
  if parsed_args.user:
228
272
  user_id = common.find_user(
229
273
  identity_client, parsed_args.user, parsed_args.user_domain
230
274
  ).id
231
275
  else:
232
- user_id = None
233
-
234
- columns = ('ID', 'Name', 'Project ID', 'Description', 'Expires At')
235
- data = identity_client.application_credentials.list(user=user_id)
276
+ conn = self.app.client_manager.sdk_connection
277
+ user_id = conn.config.get_auth().get_user_id(conn.identity)
278
+
279
+ data = identity_client.application_credentials(user=user_id)
280
+
281
+ data_formatted = []
282
+ for ac in data:
283
+ # Format roles into something sensible
284
+ roles = ac['roles']
285
+ msg = ' '.join(r['name'] for r in roles)
286
+ ac['roles'] = msg
287
+
288
+ data_formatted.append(ac)
289
+
290
+ columns = (
291
+ 'ID',
292
+ 'Name',
293
+ 'Description',
294
+ 'Project ID',
295
+ 'Roles',
296
+ 'Unrestricted',
297
+ 'Access Rules',
298
+ 'Expires At',
299
+ )
236
300
  return (
237
301
  columns,
238
302
  (
@@ -241,7 +305,7 @@ class ListApplicationCredential(command.Lister):
241
305
  columns,
242
306
  formatters={},
243
307
  )
244
- for s in data
308
+ for s in data_formatted
245
309
  ),
246
310
  )
247
311
 
@@ -250,7 +314,7 @@ class ShowApplicationCredential(command.ShowOne):
250
314
  _description = _("Display application credential details")
251
315
 
252
316
  def get_parser(self, prog_name):
253
- parser = super(ShowApplicationCredential, self).get_parser(prog_name)
317
+ parser = super().get_parser(prog_name)
254
318
  parser.add_argument(
255
319
  'application_credential',
256
320
  metavar='<application-credential>',
@@ -259,17 +323,35 @@ class ShowApplicationCredential(command.ShowOne):
259
323
  return parser
260
324
 
261
325
  def take_action(self, parsed_args):
262
- identity_client = self.app.client_manager.identity
263
- app_cred = utils.find_resource(
264
- identity_client.application_credentials,
265
- parsed_args.application_credential,
266
- )
326
+ identity_client = self.app.client_manager.sdk_connection.identity
327
+ conn = self.app.client_manager.sdk_connection
328
+ user_id = conn.config.get_auth().get_user_id(conn.identity)
267
329
 
268
- app_cred._info.pop('links', None)
330
+ app_cred = identity_client.find_application_credential(
331
+ user_id, parsed_args.application_credential
332
+ )
269
333
 
270
334
  # Format roles into something sensible
271
- roles = app_cred._info.pop('roles')
335
+ roles = app_cred['roles']
272
336
  msg = ' '.join(r['name'] for r in roles)
273
- app_cred._info['roles'] = msg
274
-
275
- return zip(*sorted(app_cred._info.items()))
337
+ app_cred['roles'] = msg
338
+
339
+ columns = (
340
+ 'ID',
341
+ 'Name',
342
+ 'Description',
343
+ 'Project ID',
344
+ 'Roles',
345
+ 'Unrestricted',
346
+ 'Access Rules',
347
+ 'Expires At',
348
+ )
349
+ return (
350
+ columns,
351
+ (
352
+ utils.get_dict_properties(
353
+ app_cred,
354
+ columns,
355
+ )
356
+ ),
357
+ )
@@ -34,7 +34,7 @@ class EndpointsColumn(cliff_columns.FormattableColumn):
34
34
  for ep in self._value:
35
35
  region = ep.get('region_id') or ep.get('region') or '<none>'
36
36
  ret += region + '\n'
37
- ret += " %s: %s\n" % (ep['interface'], ep['url'])
37
+ ret += " {}: {}\n".format(ep['interface'], ep['url'])
38
38
  return ret
39
39
 
40
40
 
@@ -70,7 +70,7 @@ class ShowCatalog(command.ShowOne):
70
70
  _description = _("Display service catalog details")
71
71
 
72
72
  def get_parser(self, prog_name):
73
- parser = super(ShowCatalog, self).get_parser(prog_name)
73
+ parser = super().get_parser(prog_name)
74
74
  parser.add_argument(
75
75
  'service',
76
76
  metavar='<service>',
@@ -31,7 +31,7 @@ class CreateConsumer(command.ShowOne):
31
31
  _description = _("Create new consumer")
32
32
 
33
33
  def get_parser(self, prog_name):
34
- parser = super(CreateConsumer, self).get_parser(prog_name)
34
+ parser = super().get_parser(prog_name)
35
35
  parser.add_argument(
36
36
  '--description',
37
37
  metavar='<description>',
@@ -52,7 +52,7 @@ class DeleteConsumer(command.Command):
52
52
  _description = _("Delete consumer(s)")
53
53
 
54
54
  def get_parser(self, prog_name):
55
- parser = super(DeleteConsumer, self).get_parser(prog_name)
55
+ parser = super().get_parser(prog_name)
56
56
  parser.add_argument(
57
57
  'consumer',
58
58
  metavar='<consumer>',
@@ -111,7 +111,7 @@ class SetConsumer(command.Command):
111
111
  _description = _("Set consumer properties")
112
112
 
113
113
  def get_parser(self, prog_name):
114
- parser = super(SetConsumer, self).get_parser(prog_name)
114
+ parser = super().get_parser(prog_name)
115
115
  parser.add_argument(
116
116
  'consumer',
117
117
  metavar='<consumer>',
@@ -142,7 +142,7 @@ class ShowConsumer(command.ShowOne):
142
142
  _description = _("Display consumer details")
143
143
 
144
144
  def get_parser(self, prog_name):
145
- parser = super(ShowConsumer, self).get_parser(prog_name)
145
+ parser = super().get_parser(prog_name)
146
146
  parser.add_argument(
147
147
  'consumer',
148
148
  metavar='<consumer>',
@@ -32,7 +32,7 @@ class CreateCredential(command.ShowOne):
32
32
  _description = _("Create new credential")
33
33
 
34
34
  def get_parser(self, prog_name):
35
- parser = super(CreateCredential, self).get_parser(prog_name)
35
+ parser = super().get_parser(prog_name)
36
36
  parser.add_argument(
37
37
  'user',
38
38
  metavar='<user>',
@@ -85,7 +85,7 @@ class DeleteCredential(command.Command):
85
85
  _description = _("Delete credential(s)")
86
86
 
87
87
  def get_parser(self, prog_name):
88
- parser = super(DeleteCredential, self).get_parser(prog_name)
88
+ parser = super().get_parser(prog_name)
89
89
  parser.add_argument(
90
90
  'credential',
91
91
  metavar='<credential-id>',
@@ -122,7 +122,7 @@ class ListCredential(command.Lister):
122
122
  _description = _("List credentials")
123
123
 
124
124
  def get_parser(self, prog_name):
125
- parser = super(ListCredential, self).get_parser(prog_name)
125
+ parser = super().get_parser(prog_name)
126
126
  parser.add_argument(
127
127
  '--user',
128
128
  metavar='<user>',
@@ -171,7 +171,7 @@ class SetCredential(command.Command):
171
171
  _description = _("Set credential properties")
172
172
 
173
173
  def get_parser(self, prog_name):
174
- parser = super(SetCredential, self).get_parser(prog_name)
174
+ parser = super().get_parser(prog_name)
175
175
  parser.add_argument(
176
176
  'credential',
177
177
  metavar='<credential-id>',
@@ -232,7 +232,7 @@ class ShowCredential(command.ShowOne):
232
232
  _description = _("Display credential details")
233
233
 
234
234
  def get_parser(self, prog_name):
235
- parser = super(ShowCredential, self).get_parser(prog_name)
235
+ parser = super().get_parser(prog_name)
236
236
  parser.add_argument(
237
237
  'credential',
238
238
  metavar='<credential-id>',
@@ -33,7 +33,7 @@ class CreateDomain(command.ShowOne):
33
33
  _description = _("Create new domain")
34
34
 
35
35
  def get_parser(self, prog_name):
36
- parser = super(CreateDomain, self).get_parser(prog_name)
36
+ parser = super().get_parser(prog_name)
37
37
  parser.add_argument(
38
38
  'name',
39
39
  metavar='<domain-name>',
@@ -96,7 +96,7 @@ class DeleteDomain(command.Command):
96
96
  _description = _("Delete domain(s)")
97
97
 
98
98
  def get_parser(self, prog_name):
99
- parser = super(DeleteDomain, self).get_parser(prog_name)
99
+ parser = super().get_parser(prog_name)
100
100
  parser.add_argument(
101
101
  'domain',
102
102
  metavar='<domain>',
@@ -135,7 +135,7 @@ class ListDomain(command.Lister):
135
135
  _description = _("List domains")
136
136
 
137
137
  def get_parser(self, prog_name):
138
- parser = super(ListDomain, self).get_parser(prog_name)
138
+ parser = super().get_parser(prog_name)
139
139
  parser.add_argument(
140
140
  '--name',
141
141
  metavar='<name>',
@@ -175,7 +175,7 @@ class SetDomain(command.Command):
175
175
  _description = _("Set domain properties")
176
176
 
177
177
  def get_parser(self, prog_name):
178
- parser = super(SetDomain, self).get_parser(prog_name)
178
+ parser = super().get_parser(prog_name)
179
179
  parser.add_argument(
180
180
  'domain',
181
181
  metavar='<domain>',
@@ -232,7 +232,7 @@ class ShowDomain(command.ShowOne):
232
232
  _description = _("Display domain details")
233
233
 
234
234
  def get_parser(self, prog_name):
235
- parser = super(ShowDomain, self).get_parser(prog_name)
235
+ parser = super().get_parser(prog_name)
236
236
  parser.add_argument(
237
237
  'domain',
238
238
  metavar='<domain>',
@@ -60,7 +60,7 @@ class CreateEC2Creds(command.ShowOne):
60
60
  _description = _("Create EC2 credentials")
61
61
 
62
62
  def get_parser(self, prog_name):
63
- parser = super(CreateEC2Creds, self).get_parser(prog_name)
63
+ parser = super().get_parser(prog_name)
64
64
  parser.add_argument(
65
65
  '--project',
66
66
  metavar='<project>',
@@ -122,7 +122,7 @@ class DeleteEC2Creds(command.Command):
122
122
  _description = _("Delete EC2 credentials")
123
123
 
124
124
  def get_parser(self, prog_name):
125
- parser = super(DeleteEC2Creds, self).get_parser(prog_name)
125
+ parser = super().get_parser(prog_name)
126
126
  parser.add_argument(
127
127
  'access_key',
128
128
  metavar='<access-key>',
@@ -166,7 +166,7 @@ class ListEC2Creds(command.Lister):
166
166
  _description = _("List EC2 credentials")
167
167
 
168
168
  def get_parser(self, prog_name):
169
- parser = super(ListEC2Creds, self).get_parser(prog_name)
169
+ parser = super().get_parser(prog_name)
170
170
  parser.add_argument(
171
171
  '--user',
172
172
  metavar='<user>',
@@ -200,7 +200,7 @@ class ShowEC2Creds(command.ShowOne):
200
200
  _description = _("Display EC2 credentials details")
201
201
 
202
202
  def get_parser(self, prog_name):
203
- parser = super(ShowEC2Creds, self).get_parser(prog_name)
203
+ parser = super().get_parser(prog_name)
204
204
  parser.add_argument(
205
205
  'access_key',
206
206
  metavar='<access-key>',
@@ -39,7 +39,7 @@ class AddProjectToEndpoint(command.Command):
39
39
  _description = _("Associate a project to an endpoint")
40
40
 
41
41
  def get_parser(self, prog_name):
42
- parser = super(AddProjectToEndpoint, self).get_parser(prog_name)
42
+ parser = super().get_parser(prog_name)
43
43
  parser.add_argument(
44
44
  'endpoint',
45
45
  metavar='<endpoint>',
@@ -75,7 +75,7 @@ class CreateEndpoint(command.ShowOne):
75
75
  _description = _("Create new endpoint")
76
76
 
77
77
  def get_parser(self, prog_name):
78
- parser = super(CreateEndpoint, self).get_parser(prog_name)
78
+ parser = super().get_parser(prog_name)
79
79
  parser.add_argument(
80
80
  'service',
81
81
  metavar='<service>',
@@ -137,7 +137,7 @@ class DeleteEndpoint(command.Command):
137
137
  _description = _("Delete endpoint(s)")
138
138
 
139
139
  def get_parser(self, prog_name):
140
- parser = super(DeleteEndpoint, self).get_parser(prog_name)
140
+ parser = super().get_parser(prog_name)
141
141
  parser.add_argument(
142
142
  'endpoint',
143
143
  metavar='<endpoint-id>',
@@ -177,7 +177,7 @@ class ListEndpoint(command.Lister):
177
177
  _description = _("List endpoints")
178
178
 
179
179
  def get_parser(self, prog_name):
180
- parser = super(ListEndpoint, self).get_parser(prog_name)
180
+ parser = super().get_parser(prog_name)
181
181
  parser.add_argument(
182
182
  '--service',
183
183
  metavar='<service>',
@@ -285,7 +285,7 @@ class RemoveProjectFromEndpoint(command.Command):
285
285
  _description = _("Dissociate a project from an endpoint")
286
286
 
287
287
  def get_parser(self, prog_name):
288
- parser = super(RemoveProjectFromEndpoint, self).get_parser(prog_name)
288
+ parser = super().get_parser(prog_name)
289
289
  parser.add_argument(
290
290
  'endpoint',
291
291
  metavar='<endpoint>',
@@ -321,7 +321,7 @@ class SetEndpoint(command.Command):
321
321
  _description = _("Set endpoint properties")
322
322
 
323
323
  def get_parser(self, prog_name):
324
- parser = super(SetEndpoint, self).get_parser(prog_name)
324
+ parser = super().get_parser(prog_name)
325
325
  parser.add_argument(
326
326
  'endpoint',
327
327
  metavar='<endpoint-id>',
@@ -393,7 +393,7 @@ class ShowEndpoint(command.ShowOne):
393
393
  _description = _("Display endpoint details")
394
394
 
395
395
  def get_parser(self, prog_name):
396
- parser = super(ShowEndpoint, self).get_parser(prog_name)
396
+ parser = super().get_parser(prog_name)
397
397
  parser.add_argument(
398
398
  'endpoint',
399
399
  metavar='<endpoint>',
@@ -27,7 +27,7 @@ from openstackclient.identity import common
27
27
  LOG = logging.getLogger(__name__)
28
28
 
29
29
 
30
- class _FiltersReader(object):
30
+ class _FiltersReader:
31
31
  _description = _("Helper class capable of reading filters from files")
32
32
 
33
33
  def _read_filters(self, path):
@@ -63,7 +63,7 @@ class AddProjectToEndpointGroup(command.Command):
63
63
  _description = _("Add a project to an endpoint group")
64
64
 
65
65
  def get_parser(self, prog_name):
66
- parser = super(AddProjectToEndpointGroup, self).get_parser(prog_name)
66
+ parser = super().get_parser(prog_name)
67
67
  parser.add_argument(
68
68
  'endpointgroup',
69
69
  metavar='<endpoint-group>',
@@ -97,7 +97,7 @@ class CreateEndpointGroup(command.ShowOne, _FiltersReader):
97
97
  _description = _("Create new endpoint group")
98
98
 
99
99
  def get_parser(self, prog_name):
100
- parser = super(CreateEndpointGroup, self).get_parser(prog_name)
100
+ parser = super().get_parser(prog_name)
101
101
  parser.add_argument(
102
102
  'name',
103
103
  metavar='<name>',
@@ -137,7 +137,7 @@ class DeleteEndpointGroup(command.Command):
137
137
  _description = _("Delete endpoint group(s)")
138
138
 
139
139
  def get_parser(self, prog_name):
140
- parser = super(DeleteEndpointGroup, self).get_parser(prog_name)
140
+ parser = super().get_parser(prog_name)
141
141
  parser.add_argument(
142
142
  'endpointgroup',
143
143
  metavar='<endpoint-group>',
@@ -177,7 +177,7 @@ class ListEndpointGroup(command.Lister):
177
177
  _description = _("List endpoint groups")
178
178
 
179
179
  def get_parser(self, prog_name):
180
- parser = super(ListEndpointGroup, self).get_parser(prog_name)
180
+ parser = super().get_parser(prog_name)
181
181
  list_group = parser.add_mutually_exclusive_group()
182
182
  list_group.add_argument(
183
183
  '--endpointgroup',
@@ -242,9 +242,7 @@ class RemoveProjectFromEndpointGroup(command.Command):
242
242
  _description = _("Remove project from endpoint group")
243
243
 
244
244
  def get_parser(self, prog_name):
245
- parser = super(RemoveProjectFromEndpointGroup, self).get_parser(
246
- prog_name
247
- )
245
+ parser = super().get_parser(prog_name)
248
246
  parser.add_argument(
249
247
  'endpointgroup',
250
248
  metavar='<endpoint-group>',
@@ -278,7 +276,7 @@ class SetEndpointGroup(command.Command, _FiltersReader):
278
276
  _description = _("Set endpoint group properties")
279
277
 
280
278
  def get_parser(self, prog_name):
281
- parser = super(SetEndpointGroup, self).get_parser(prog_name)
279
+ parser = super().get_parser(prog_name)
282
280
  parser.add_argument(
283
281
  'endpointgroup',
284
282
  metavar='<endpoint-group>',
@@ -324,7 +322,7 @@ class ShowEndpointGroup(command.ShowOne):
324
322
  _description = _("Display endpoint group details")
325
323
 
326
324
  def get_parser(self, prog_name):
327
- parser = super(ShowEndpointGroup, self).get_parser(prog_name)
325
+ parser = super().get_parser(prog_name)
328
326
  parser.add_argument(
329
327
  'endpointgroup',
330
328
  metavar='<endpointgroup>',
@@ -30,7 +30,7 @@ class CreateProtocol(command.ShowOne):
30
30
  _description = _("Create new federation protocol")
31
31
 
32
32
  def get_parser(self, prog_name):
33
- parser = super(CreateProtocol, self).get_parser(prog_name)
33
+ parser = super().get_parser(prog_name)
34
34
  parser.add_argument(
35
35
  'federation_protocol',
36
36
  metavar='<name>',
@@ -79,7 +79,7 @@ class DeleteProtocol(command.Command):
79
79
  _description = _("Delete federation protocol(s)")
80
80
 
81
81
  def get_parser(self, prog_name):
82
- parser = super(DeleteProtocol, self).get_parser(prog_name)
82
+ parser = super().get_parser(prog_name)
83
83
  parser.add_argument(
84
84
  'federation_protocol',
85
85
  metavar='<federation-protocol>',
@@ -129,7 +129,7 @@ class ListProtocols(command.Lister):
129
129
  _description = _("List federation protocols")
130
130
 
131
131
  def get_parser(self, prog_name):
132
- parser = super(ListProtocols, self).get_parser(prog_name)
132
+ parser = super().get_parser(prog_name)
133
133
  parser.add_argument(
134
134
  '--identity-provider',
135
135
  metavar='<identity-provider>',
@@ -158,7 +158,7 @@ class SetProtocol(command.Command):
158
158
  _description = _("Set federation protocol properties")
159
159
 
160
160
  def get_parser(self, prog_name):
161
- parser = super(SetProtocol, self).get_parser(prog_name)
161
+ parser = super().get_parser(prog_name)
162
162
  parser.add_argument(
163
163
  'federation_protocol',
164
164
  metavar='<name>',
@@ -202,7 +202,7 @@ class ShowProtocol(command.ShowOne):
202
202
  _description = _("Display federation protocol details")
203
203
 
204
204
  def get_parser(self, prog_name):
205
- parser = super(ShowProtocol, self).get_parser(prog_name)
205
+ parser = super().get_parser(prog_name)
206
206
  parser.add_argument(
207
207
  'federation_protocol',
208
208
  metavar='<federation-protocol>',