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.
- openstackclient/__init__.py +2 -6
- openstackclient/api/api.py +41 -23
- openstackclient/api/compute_v2.py +44 -25
- openstackclient/api/object_store_v1.py +75 -97
- openstackclient/api/volume_v2.py +2 -1
- openstackclient/api/volume_v3.py +2 -1
- openstackclient/common/availability_zone.py +58 -42
- openstackclient/common/clientmanager.py +56 -29
- openstackclient/common/configuration.py +10 -3
- openstackclient/common/envvars.py +2 -2
- openstackclient/common/extension.py +14 -5
- openstackclient/common/limits.py +10 -5
- openstackclient/common/module.py +14 -6
- openstackclient/common/pagination.py +8 -2
- openstackclient/common/progressbar.py +7 -6
- openstackclient/common/project_cleanup.py +13 -7
- openstackclient/common/quota.py +97 -99
- openstackclient/common/versions.py +8 -2
- openstackclient/compute/client.py +7 -3
- openstackclient/compute/v2/agent.py +17 -10
- openstackclient/compute/v2/aggregate.py +36 -22
- openstackclient/compute/v2/console.py +14 -8
- openstackclient/compute/v2/console_connection.py +11 -3
- openstackclient/compute/v2/flavor.py +39 -21
- openstackclient/compute/v2/host.py +14 -6
- openstackclient/compute/v2/hypervisor.py +14 -5
- openstackclient/compute/v2/hypervisor_stats.py +10 -2
- openstackclient/compute/v2/keypair.py +29 -14
- openstackclient/compute/v2/server.py +249 -169
- openstackclient/compute/v2/server_backup.py +10 -4
- openstackclient/compute/v2/server_event.py +21 -12
- openstackclient/compute/v2/server_group.py +21 -11
- openstackclient/compute/v2/server_image.py +19 -10
- openstackclient/compute/v2/server_migration.py +24 -10
- openstackclient/compute/v2/server_share.py +274 -0
- openstackclient/compute/v2/server_volume.py +10 -4
- openstackclient/compute/v2/service.py +14 -7
- openstackclient/compute/v2/usage.py +26 -21
- openstackclient/identity/client.py +8 -3
- openstackclient/identity/common.py +78 -47
- openstackclient/identity/v2_0/catalog.py +14 -7
- openstackclient/identity/v2_0/ec2creds.py +21 -10
- openstackclient/identity/v2_0/endpoint.py +23 -11
- openstackclient/identity/v2_0/project.py +25 -14
- openstackclient/identity/v2_0/role.py +28 -14
- openstackclient/identity/v2_0/role_assignment.py +9 -3
- openstackclient/identity/v2_0/service.py +23 -11
- openstackclient/identity/v2_0/token.py +12 -5
- openstackclient/identity/v2_0/user.py +26 -15
- openstackclient/identity/v3/access_rule.py +26 -12
- openstackclient/identity/v3/application_credential.py +59 -24
- openstackclient/identity/v3/catalog.py +14 -7
- openstackclient/identity/v3/consumer.py +22 -11
- openstackclient/identity/v3/credential.py +36 -16
- openstackclient/identity/v3/domain.py +37 -18
- openstackclient/identity/v3/ec2creds.py +25 -12
- openstackclient/identity/v3/endpoint.py +42 -20
- openstackclient/identity/v3/endpoint_group.py +28 -17
- openstackclient/identity/v3/federation_protocol.py +38 -16
- openstackclient/identity/v3/group.py +55 -32
- openstackclient/identity/v3/identity_provider.py +92 -57
- openstackclient/identity/v3/implied_role.py +21 -9
- openstackclient/identity/v3/limit.py +38 -16
- openstackclient/identity/v3/mapping.py +26 -13
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +43 -23
- openstackclient/identity/v3/region.py +36 -16
- openstackclient/identity/v3/registered_limit.py +40 -16
- openstackclient/identity/v3/role.py +61 -31
- openstackclient/identity/v3/role_assignment.py +23 -6
- openstackclient/identity/v3/service.py +36 -16
- openstackclient/identity/v3/service_provider.py +37 -15
- openstackclient/identity/v3/tag.py +23 -6
- openstackclient/identity/v3/token.py +30 -14
- openstackclient/identity/v3/trust.py +32 -14
- openstackclient/identity/v3/unscoped_saml.py +10 -2
- openstackclient/identity/v3/user.py +49 -26
- openstackclient/image/client.py +7 -3
- openstackclient/image/v1/image.py +33 -26
- openstackclient/image/v2/cache.py +14 -9
- openstackclient/image/v2/image.py +74 -48
- openstackclient/image/v2/info.py +7 -1
- openstackclient/image/v2/metadef_namespaces.py +109 -13
- openstackclient/image/v2/metadef_objects.py +28 -15
- openstackclient/image/v2/metadef_properties.py +24 -13
- openstackclient/image/v2/metadef_resource_type_association.py +14 -7
- openstackclient/image/v2/metadef_resource_types.py +7 -1
- openstackclient/image/v2/task.py +15 -6
- openstackclient/locale/tr_TR/LC_MESSAGES/openstackclient.po +7 -192
- openstackclient/network/client.py +7 -2
- openstackclient/network/common.py +16 -241
- openstackclient/network/utils.py +36 -22
- openstackclient/network/v2/address_group.py +27 -16
- openstackclient/network/v2/address_scope.py +24 -13
- openstackclient/network/v2/bgpvpn/bgpvpn.py +463 -0
- openstackclient/network/v2/bgpvpn/constants.py +30 -0
- openstackclient/network/v2/bgpvpn/network_association.py +214 -0
- openstackclient/network/v2/bgpvpn/port_association.py +490 -0
- openstackclient/network/v2/bgpvpn/router_association.py +288 -0
- openstackclient/network/v2/default_security_group_rule.py +19 -10
- openstackclient/network/v2/floating_ip.py +110 -159
- openstackclient/network/v2/floating_ip_port_forwarding.py +30 -18
- openstackclient/network/v2/fwaas/__init__.py +0 -0
- openstackclient/network/v2/fwaas/group.py +466 -0
- openstackclient/network/v2/fwaas/policy.py +518 -0
- openstackclient/network/v2/fwaas/rule.py +574 -0
- openstackclient/network/v2/ip_availability.py +13 -5
- openstackclient/network/v2/l3_conntrack_helper.py +22 -13
- openstackclient/network/v2/local_ip.py +24 -13
- openstackclient/network/v2/local_ip_association.py +14 -7
- openstackclient/network/v2/ndp_proxy.py +20 -11
- openstackclient/network/v2/network.py +129 -196
- openstackclient/network/v2/network_agent.py +46 -25
- openstackclient/network/v2/network_auto_allocated_topology.py +22 -11
- openstackclient/network/v2/network_flavor.py +27 -16
- openstackclient/network/v2/network_flavor_profile.py +23 -12
- openstackclient/network/v2/network_meter.py +21 -10
- openstackclient/network/v2/network_meter_rule.py +21 -11
- openstackclient/network/v2/network_qos_policy.py +25 -15
- openstackclient/network/v2/network_qos_rule.py +32 -17
- openstackclient/network/v2/network_qos_rule_type.py +13 -5
- openstackclient/network/v2/network_rbac.py +23 -12
- openstackclient/network/v2/network_segment.py +20 -11
- openstackclient/network/v2/network_segment_range.py +56 -29
- openstackclient/network/v2/network_service_provider.py +7 -1
- openstackclient/network/v2/network_trunk.py +38 -22
- openstackclient/network/v2/port.py +54 -29
- openstackclient/network/v2/router.py +75 -52
- openstackclient/network/v2/security_group.py +87 -157
- openstackclient/network/v2/security_group_rule.py +100 -280
- openstackclient/network/v2/subnet.py +49 -28
- openstackclient/network/v2/subnet_pool.py +30 -17
- openstackclient/network/v2/taas/tap_flow.py +22 -11
- openstackclient/network/v2/taas/tap_mirror.py +22 -11
- openstackclient/network/v2/taas/tap_service.py +23 -12
- openstackclient/object/client.py +7 -2
- openstackclient/object/v1/account.py +13 -6
- openstackclient/object/v1/container.py +25 -15
- openstackclient/object/v1/object.py +25 -15
- openstackclient/py.typed +0 -0
- openstackclient/shell.py +46 -10
- openstackclient/tests/functional/base.py +55 -20
- openstackclient/tests/functional/common/test_extension.py +4 -0
- openstackclient/tests/functional/common/test_quota.py +3 -1
- openstackclient/tests/functional/compute/v2/common.py +14 -13
- openstackclient/tests/functional/compute/v2/test_flavor.py +3 -1
- openstackclient/tests/functional/compute/v2/test_server.py +3 -0
- openstackclient/tests/functional/identity/v2/common.py +10 -6
- openstackclient/tests/functional/identity/v2/test_role.py +4 -4
- openstackclient/tests/functional/identity/v3/common.py +25 -19
- openstackclient/tests/functional/identity/v3/test_group.py +20 -20
- openstackclient/tests/functional/identity/v3/test_idp.py +3 -1
- openstackclient/tests/functional/identity/v3/test_project.py +10 -10
- openstackclient/tests/functional/identity/v3/test_role.py +18 -18
- openstackclient/tests/functional/identity/v3/test_role_assignment.py +12 -12
- openstackclient/tests/functional/identity/v3/test_user.py +8 -8
- openstackclient/tests/functional/image/base.py +1 -6
- openstackclient/tests/functional/network/v2/common.py +5 -2
- openstackclient/tests/functional/network/v2/test_floating_ip.py +10 -4
- openstackclient/tests/functional/network/v2/test_ip_availability.py +4 -0
- openstackclient/tests/functional/network/v2/test_network_meter_rule.py +3 -2
- openstackclient/tests/functional/network/v2/test_network_segment.py +5 -0
- openstackclient/tests/functional/network/v2/test_subnet.py +13 -9
- openstackclient/tests/functional/object/v1/common.py +4 -0
- openstackclient/tests/functional/volume/v2/common.py +4 -0
- openstackclient/tests/functional/volume/v2/test_volume_snapshot.py +27 -11
- openstackclient/tests/functional/volume/v2/test_volume_type.py +2 -2
- openstackclient/tests/functional/volume/v3/common.py +4 -0
- openstackclient/tests/functional/volume/v3/test_volume_snapshot.py +11 -7
- openstackclient/tests/functional/volume/v3/test_volume_type.py +2 -2
- openstackclient/tests/unit/common/test_availability_zone.py +35 -49
- openstackclient/tests/unit/common/test_extension.py +2 -2
- openstackclient/tests/unit/common/test_module.py +12 -7
- openstackclient/tests/unit/common/test_project_cleanup.py +3 -1
- openstackclient/tests/unit/common/test_quota.py +6 -26
- openstackclient/tests/unit/compute/v2/fakes.py +25 -0
- openstackclient/tests/unit/compute/v2/test_flavor.py +28 -2
- openstackclient/tests/unit/compute/v2/test_keypair.py +6 -6
- openstackclient/tests/unit/compute/v2/test_server.py +11 -96
- openstackclient/tests/unit/compute/v2/test_server_share.py +287 -0
- openstackclient/tests/unit/identity/v3/fakes.py +3 -0
- openstackclient/tests/unit/identity/v3/test_group.py +4 -14
- openstackclient/tests/unit/identity/v3/test_identity_provider.py +303 -299
- openstackclient/tests/unit/identity/v3/test_user.py +4 -4
- openstackclient/tests/unit/image/v2/test_image.py +11 -11
- openstackclient/tests/unit/image/v2/test_metadef_namespaces.py +105 -6
- openstackclient/tests/unit/network/test_common.py +0 -155
- openstackclient/tests/unit/network/v2/bgpvpn/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/bgpvpn/fakes.py +179 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_bgpvpn.py +584 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_network_association.py +285 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_port_association.py +384 -0
- openstackclient/tests/unit/network/v2/bgpvpn/test_router_association.py +297 -0
- openstackclient/tests/unit/network/v2/fwaas/__init__.py +0 -0
- openstackclient/tests/unit/network/v2/fwaas/test_group.py +897 -0
- openstackclient/tests/unit/network/v2/fwaas/test_policy.py +869 -0
- openstackclient/tests/unit/network/v2/fwaas/test_rule.py +980 -0
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_flow.py → test_tap_flow.py} +18 -25
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_mirror.py → test_tap_mirror.py} +19 -29
- openstackclient/tests/unit/network/v2/taas/{test_osc_tap_service.py → test_tap_service.py} +19 -29
- openstackclient/tests/unit/network/v2/test_address_group.py +2 -2
- openstackclient/tests/unit/network/v2/{test_floating_ip_network.py → test_floating_ip.py} +3 -2
- openstackclient/tests/unit/network/v2/test_floating_ip_port_forwarding.py +13 -13
- openstackclient/tests/unit/network/v2/test_network_agent.py +8 -4
- openstackclient/tests/unit/network/v2/test_network_auto_allocated_topology.py +3 -3
- openstackclient/tests/unit/network/v2/test_network_flavor.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_qos_policy.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_qos_rule.py +2 -2
- openstackclient/tests/unit/network/v2/test_network_rbac.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_segment.py +1 -1
- openstackclient/tests/unit/network/v2/test_network_segment_range.py +7 -10
- openstackclient/tests/unit/network/v2/test_network_trunk.py +1 -1
- openstackclient/tests/unit/network/v2/test_router.py +8 -9
- openstackclient/tests/unit/network/v2/{test_security_group_network.py → test_security_group.py} +1 -20
- openstackclient/tests/unit/network/v2/{test_security_group_rule_network.py → test_security_group_rule.py} +7 -41
- openstackclient/tests/unit/network/v2/test_subnet.py +2 -1
- openstackclient/tests/unit/network/v2/test_subnet_pool.py +2 -1
- openstackclient/tests/unit/object/v1/fakes.py +8 -7
- openstackclient/tests/unit/object/v1/test_container.py +65 -101
- openstackclient/tests/unit/object/v1/test_container_all.py +8 -1
- openstackclient/tests/unit/object/v1/test_object.py +44 -84
- openstackclient/tests/unit/object/v1/test_object_all.py +8 -1
- openstackclient/tests/unit/test_hacking.py +108 -0
- openstackclient/tests/unit/volume/v2/fakes.py +1 -0
- openstackclient/tests/unit/volume/v2/test_volume_backup.py +1 -5
- openstackclient/tests/unit/volume/v2/test_volume_snapshot.py +2 -1
- openstackclient/tests/unit/volume/v2/test_volume_type.py +2 -4
- openstackclient/tests/unit/volume/v3/fakes.py +1 -0
- openstackclient/tests/unit/volume/v3/test_volume.py +60 -3
- openstackclient/tests/unit/volume/v3/test_volume_attachment.py +1 -1
- openstackclient/tests/unit/volume/v3/test_volume_backup.py +1 -5
- openstackclient/tests/unit/volume/v3/test_volume_snapshot.py +55 -1
- openstackclient/tests/unit/volume/v3/test_volume_type.py +2 -4
- openstackclient/volume/client.py +7 -3
- openstackclient/volume/v2/backup_record.py +15 -6
- openstackclient/volume/v2/consistency_group.py +29 -17
- openstackclient/volume/v2/consistency_group_snapshot.py +25 -10
- openstackclient/volume/v2/qos_specs.py +28 -17
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +57 -29
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +46 -20
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +50 -24
- openstackclient/volume/v2/volume_transfer_request.py +31 -13
- openstackclient/volume/v2/volume_type.py +43 -24
- openstackclient/volume/v3/block_storage_cleanup.py +11 -3
- openstackclient/volume/v3/block_storage_cluster.py +19 -7
- openstackclient/volume/v3/block_storage_log_level.py +15 -6
- openstackclient/volume/v3/block_storage_manage.py +10 -4
- openstackclient/volume/v3/block_storage_resource_filter.py +17 -5
- openstackclient/volume/v3/service.py +16 -6
- openstackclient/volume/v3/volume.py +89 -39
- openstackclient/volume/v3/volume_attachment.py +43 -21
- openstackclient/volume/v3/volume_backup.py +53 -24
- openstackclient/volume/v3/volume_group.py +23 -13
- openstackclient/volume/v3/volume_group_snapshot.py +32 -13
- openstackclient/volume/v3/volume_group_type.py +26 -13
- openstackclient/volume/v3/volume_message.py +15 -7
- openstackclient/volume/v3/volume_snapshot.py +69 -32
- openstackclient/volume/v3/volume_transfer_request.py +31 -13
- openstackclient/volume/v3/volume_type.py +42 -24
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +271 -260
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +4 -0
- python_openstackclient-10.0.0.dist-info/pbr.json +1 -0
- openstackclient/api/image_v1.py +0 -69
- openstackclient/api/image_v2.py +0 -79
- openstackclient/network/v2/floating_ip_pool.py +0 -38
- openstackclient/tests/functional/image/v1/test_image.py +0 -97
- openstackclient/tests/unit/api/test_image_v1.py +0 -96
- openstackclient/tests/unit/api/test_image_v2.py +0 -96
- openstackclient/tests/unit/network/v2/test_floating_ip_compute.py +0 -248
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_compute.py +0 -49
- openstackclient/tests/unit/network/v2/test_floating_ip_pool_network.py +0 -39
- openstackclient/tests/unit/network/v2/test_network_compute.py +0 -404
- openstackclient/tests/unit/network/v2/test_security_group_compute.py +0 -392
- openstackclient/tests/unit/network/v2/test_security_group_rule_compute.py +0 -555
- python_openstackclient-9.0.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-9.0.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
|
@@ -15,7 +15,10 @@
|
|
|
15
15
|
|
|
16
16
|
"""Identity v3 Policy action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import logging
|
|
21
|
+
from typing import Any
|
|
19
22
|
|
|
20
23
|
from osc_lib import exceptions
|
|
21
24
|
from osc_lib import utils
|
|
@@ -30,7 +33,7 @@ LOG = logging.getLogger(__name__)
|
|
|
30
33
|
class CreatePolicy(command.ShowOne):
|
|
31
34
|
_description = _("Create new policy")
|
|
32
35
|
|
|
33
|
-
def get_parser(self, prog_name):
|
|
36
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
34
37
|
parser = super().get_parser(prog_name)
|
|
35
38
|
parser.add_argument(
|
|
36
39
|
'--type',
|
|
@@ -48,7 +51,9 @@ class CreatePolicy(command.ShowOne):
|
|
|
48
51
|
)
|
|
49
52
|
return parser
|
|
50
53
|
|
|
51
|
-
def take_action(
|
|
54
|
+
def take_action(
|
|
55
|
+
self, parsed_args: argparse.Namespace
|
|
56
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
52
57
|
blob = utils.read_blob_file_contents(parsed_args.rules)
|
|
53
58
|
|
|
54
59
|
identity_client = self.app.client_manager.identity
|
|
@@ -58,13 +63,14 @@ class CreatePolicy(command.ShowOne):
|
|
|
58
63
|
|
|
59
64
|
policy._info.pop('links')
|
|
60
65
|
policy._info.update({'rules': policy._info.pop('blob')})
|
|
61
|
-
|
|
66
|
+
col_headers, col_data = zip(*sorted(policy._info.items()))
|
|
67
|
+
return col_headers, col_data
|
|
62
68
|
|
|
63
69
|
|
|
64
70
|
class DeletePolicy(command.Command):
|
|
65
71
|
_description = _("Delete policy(s)")
|
|
66
72
|
|
|
67
|
-
def get_parser(self, prog_name):
|
|
73
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
68
74
|
parser = super().get_parser(prog_name)
|
|
69
75
|
parser.add_argument(
|
|
70
76
|
'policy',
|
|
@@ -74,7 +80,7 @@ class DeletePolicy(command.Command):
|
|
|
74
80
|
)
|
|
75
81
|
return parser
|
|
76
82
|
|
|
77
|
-
def take_action(self, parsed_args):
|
|
83
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
78
84
|
identity_client = self.app.client_manager.identity
|
|
79
85
|
result = 0
|
|
80
86
|
for i in parsed_args.policy:
|
|
@@ -102,7 +108,7 @@ class DeletePolicy(command.Command):
|
|
|
102
108
|
class ListPolicy(command.Lister):
|
|
103
109
|
_description = _("List policies")
|
|
104
110
|
|
|
105
|
-
def get_parser(self, prog_name):
|
|
111
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
106
112
|
parser = super().get_parser(prog_name)
|
|
107
113
|
parser.add_argument(
|
|
108
114
|
'--long',
|
|
@@ -112,7 +118,9 @@ class ListPolicy(command.Lister):
|
|
|
112
118
|
)
|
|
113
119
|
return parser
|
|
114
120
|
|
|
115
|
-
def take_action(
|
|
121
|
+
def take_action(
|
|
122
|
+
self, parsed_args: argparse.Namespace
|
|
123
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
116
124
|
columns: tuple[str, ...] = ('ID', 'Type')
|
|
117
125
|
column_headers: tuple[str, ...] = columns
|
|
118
126
|
if parsed_args.long:
|
|
@@ -135,7 +143,7 @@ class ListPolicy(command.Lister):
|
|
|
135
143
|
class SetPolicy(command.Command):
|
|
136
144
|
_description = _("Set policy properties")
|
|
137
145
|
|
|
138
|
-
def get_parser(self, prog_name):
|
|
146
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
139
147
|
parser = super().get_parser(prog_name)
|
|
140
148
|
parser.add_argument(
|
|
141
149
|
'policy',
|
|
@@ -154,7 +162,7 @@ class SetPolicy(command.Command):
|
|
|
154
162
|
)
|
|
155
163
|
return parser
|
|
156
164
|
|
|
157
|
-
def take_action(self, parsed_args):
|
|
165
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
158
166
|
identity_client = self.app.client_manager.identity
|
|
159
167
|
blob = None
|
|
160
168
|
|
|
@@ -173,7 +181,7 @@ class SetPolicy(command.Command):
|
|
|
173
181
|
class ShowPolicy(command.ShowOne):
|
|
174
182
|
_description = _("Display policy details")
|
|
175
183
|
|
|
176
|
-
def get_parser(self, prog_name):
|
|
184
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
177
185
|
parser = super().get_parser(prog_name)
|
|
178
186
|
parser.add_argument(
|
|
179
187
|
'policy',
|
|
@@ -182,7 +190,9 @@ class ShowPolicy(command.ShowOne):
|
|
|
182
190
|
)
|
|
183
191
|
return parser
|
|
184
192
|
|
|
185
|
-
def take_action(
|
|
193
|
+
def take_action(
|
|
194
|
+
self, parsed_args: argparse.Namespace
|
|
195
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
186
196
|
identity_client = self.app.client_manager.identity
|
|
187
197
|
policy = utils.find_resource(
|
|
188
198
|
identity_client.policies, parsed_args.policy
|
|
@@ -190,4 +200,5 @@ class ShowPolicy(command.ShowOne):
|
|
|
190
200
|
|
|
191
201
|
policy._info.pop('links')
|
|
192
202
|
policy._info.update({'rules': policy._info.pop('blob')})
|
|
193
|
-
|
|
203
|
+
col_headers, col_data = zip(*sorted(policy._info.items()))
|
|
204
|
+
return col_headers, col_data
|
|
@@ -15,9 +15,13 @@
|
|
|
15
15
|
|
|
16
16
|
"""Project action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import logging
|
|
21
|
+
from typing import Any
|
|
19
22
|
|
|
20
23
|
from openstack import exceptions as sdk_exc
|
|
24
|
+
from openstack import utils as sdk_utils
|
|
21
25
|
from osc_lib.cli import parseractions
|
|
22
26
|
from osc_lib import exceptions
|
|
23
27
|
from osc_lib import utils
|
|
@@ -30,7 +34,7 @@ from openstackclient.identity.v3 import tag
|
|
|
30
34
|
LOG = logging.getLogger(__name__)
|
|
31
35
|
|
|
32
36
|
|
|
33
|
-
def _format_project(project):
|
|
37
|
+
def _format_project(project: Any) -> tuple[tuple[str, ...], Any]:
|
|
34
38
|
# NOTE(0weng): Projects allow unknown attributes in the body, so extract
|
|
35
39
|
# the column names separately.
|
|
36
40
|
(column_headers, columns) = utils.get_osc_show_columns_for_sdk_resource(
|
|
@@ -48,7 +52,7 @@ def _format_project(project):
|
|
|
48
52
|
class CreateProject(command.ShowOne):
|
|
49
53
|
_description = _("Create new project")
|
|
50
54
|
|
|
51
|
-
def get_parser(self, prog_name):
|
|
55
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
52
56
|
parser = super().get_parser(prog_name)
|
|
53
57
|
parser.add_argument(
|
|
54
58
|
'name',
|
|
@@ -104,8 +108,12 @@ class CreateProject(command.ShowOne):
|
|
|
104
108
|
tag.add_tag_option_to_parser_for_create(parser, _('project'))
|
|
105
109
|
return parser
|
|
106
110
|
|
|
107
|
-
def take_action(
|
|
108
|
-
|
|
111
|
+
def take_action(
|
|
112
|
+
self, parsed_args: argparse.Namespace
|
|
113
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
114
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
115
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
116
|
+
)
|
|
109
117
|
|
|
110
118
|
kwargs = {}
|
|
111
119
|
|
|
@@ -181,7 +189,7 @@ class DeleteProject(command.Command):
|
|
|
181
189
|
"regardless."
|
|
182
190
|
)
|
|
183
191
|
|
|
184
|
-
def get_parser(self, prog_name):
|
|
192
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
185
193
|
parser = super().get_parser(prog_name)
|
|
186
194
|
parser.add_argument(
|
|
187
195
|
'projects',
|
|
@@ -196,8 +204,10 @@ class DeleteProject(command.Command):
|
|
|
196
204
|
)
|
|
197
205
|
return parser
|
|
198
206
|
|
|
199
|
-
def take_action(self, parsed_args):
|
|
200
|
-
identity_client =
|
|
207
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
208
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
209
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
210
|
+
)
|
|
201
211
|
|
|
202
212
|
errors = 0
|
|
203
213
|
for project in parsed_args.projects:
|
|
@@ -232,7 +242,7 @@ class DeleteProject(command.Command):
|
|
|
232
242
|
class ListProject(command.Lister):
|
|
233
243
|
_description = _("List projects")
|
|
234
244
|
|
|
235
|
-
def get_parser(self, prog_name):
|
|
245
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
236
246
|
parser = super().get_parser(prog_name)
|
|
237
247
|
parser.add_argument(
|
|
238
248
|
'--domain',
|
|
@@ -289,8 +299,12 @@ class ListProject(command.Lister):
|
|
|
289
299
|
tag.add_tag_filtering_option_to_parser(parser, _('projects'))
|
|
290
300
|
return parser
|
|
291
301
|
|
|
292
|
-
def take_action(
|
|
293
|
-
|
|
302
|
+
def take_action(
|
|
303
|
+
self, parsed_args: argparse.Namespace
|
|
304
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
305
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
306
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
307
|
+
)
|
|
294
308
|
|
|
295
309
|
column_headers: tuple[str, ...] = ('ID', 'Name')
|
|
296
310
|
if parsed_args.long:
|
|
@@ -342,21 +356,21 @@ class ListProject(command.Lister):
|
|
|
342
356
|
user = self.app.client_manager.auth_ref.user_id
|
|
343
357
|
|
|
344
358
|
if user:
|
|
345
|
-
data = identity_client.user_projects(user, **kwargs)
|
|
359
|
+
data = list(identity_client.user_projects(user, **kwargs))
|
|
346
360
|
else:
|
|
347
361
|
try:
|
|
348
|
-
data = identity_client.projects(**kwargs)
|
|
362
|
+
data = list(identity_client.projects(**kwargs))
|
|
349
363
|
except sdk_exc.ForbiddenException:
|
|
350
364
|
# NOTE(adriant): if no filters, assume a forbidden is non-admin
|
|
351
365
|
# wanting their own project list.
|
|
352
366
|
if not kwargs:
|
|
353
367
|
user = self.app.client_manager.auth_ref.user_id
|
|
354
|
-
data = identity_client.user_projects(user)
|
|
368
|
+
data = list(identity_client.user_projects(user))
|
|
355
369
|
else:
|
|
356
370
|
raise
|
|
357
371
|
|
|
358
372
|
if parsed_args.sort:
|
|
359
|
-
data = utils.sort_items(data, parsed_args.sort)
|
|
373
|
+
data = list(utils.sort_items(data, parsed_args.sort))
|
|
360
374
|
|
|
361
375
|
return (
|
|
362
376
|
column_headers,
|
|
@@ -367,7 +381,7 @@ class ListProject(command.Lister):
|
|
|
367
381
|
class SetProject(command.Command):
|
|
368
382
|
_description = _("Set project properties")
|
|
369
383
|
|
|
370
|
-
def get_parser(self, prog_name):
|
|
384
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
371
385
|
parser = super().get_parser(prog_name)
|
|
372
386
|
parser.add_argument(
|
|
373
387
|
'project',
|
|
@@ -418,8 +432,10 @@ class SetProject(command.Command):
|
|
|
418
432
|
tag.add_tag_option_to_parser_for_set(parser, _('project'))
|
|
419
433
|
return parser
|
|
420
434
|
|
|
421
|
-
def take_action(self, parsed_args):
|
|
422
|
-
identity_client =
|
|
435
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
436
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
437
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
438
|
+
)
|
|
423
439
|
|
|
424
440
|
kwargs = {}
|
|
425
441
|
if parsed_args.name:
|
|
@@ -481,7 +497,7 @@ class SetProject(command.Command):
|
|
|
481
497
|
class ShowProject(command.ShowOne):
|
|
482
498
|
_description = _("Display project details")
|
|
483
499
|
|
|
484
|
-
def get_parser(self, prog_name):
|
|
500
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
485
501
|
parser = super().get_parser(prog_name)
|
|
486
502
|
parser.add_argument(
|
|
487
503
|
'project',
|
|
@@ -507,10 +523,14 @@ class ShowProject(command.ShowOne):
|
|
|
507
523
|
)
|
|
508
524
|
return parser
|
|
509
525
|
|
|
510
|
-
def take_action(
|
|
511
|
-
|
|
526
|
+
def take_action(
|
|
527
|
+
self, parsed_args: argparse.Namespace
|
|
528
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
529
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
530
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
531
|
+
)
|
|
512
532
|
|
|
513
|
-
kwargs = {}
|
|
533
|
+
kwargs: dict[str, Any] = {}
|
|
514
534
|
|
|
515
535
|
domain = None
|
|
516
536
|
if parsed_args.domain:
|
|
@@ -536,8 +556,8 @@ class ShowProject(command.ShowOne):
|
|
|
536
556
|
if parsed_args.children:
|
|
537
557
|
kwargs['subtree_as_ids'] = True
|
|
538
558
|
|
|
539
|
-
|
|
559
|
+
project_obj = identity_client.find_project(
|
|
540
560
|
project, **kwargs, ignore_missing=False
|
|
541
561
|
)
|
|
542
562
|
|
|
543
|
-
return _format_project(
|
|
563
|
+
return _format_project(project_obj)
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
|
|
14
14
|
"""Identity v3 Region 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 import utils as sdk_utils
|
|
18
22
|
from osc_lib import exceptions
|
|
19
23
|
from osc_lib import utils
|
|
20
24
|
|
|
@@ -25,7 +29,7 @@ from openstackclient.i18n import _
|
|
|
25
29
|
LOG = logging.getLogger(__name__)
|
|
26
30
|
|
|
27
31
|
|
|
28
|
-
def _format_region(region):
|
|
32
|
+
def _format_region(region: Any) -> tuple[tuple[str, ...], Any]:
|
|
29
33
|
columns = ('id', 'description', 'parent_region_id')
|
|
30
34
|
column_headers = ('region', 'description', 'parent_region')
|
|
31
35
|
return (
|
|
@@ -37,7 +41,7 @@ def _format_region(region):
|
|
|
37
41
|
class CreateRegion(command.ShowOne):
|
|
38
42
|
_description = _("Create new region")
|
|
39
43
|
|
|
40
|
-
def get_parser(self, prog_name):
|
|
44
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
41
45
|
parser = super().get_parser(prog_name)
|
|
42
46
|
# NOTE(stevemar): The API supports an optional region ID, but that
|
|
43
47
|
# seems like poor UX, we will only support user-defined IDs.
|
|
@@ -58,8 +62,12 @@ class CreateRegion(command.ShowOne):
|
|
|
58
62
|
)
|
|
59
63
|
return parser
|
|
60
64
|
|
|
61
|
-
def take_action(
|
|
62
|
-
|
|
65
|
+
def take_action(
|
|
66
|
+
self, parsed_args: argparse.Namespace
|
|
67
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
68
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
69
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
70
|
+
)
|
|
63
71
|
|
|
64
72
|
region = identity_client.create_region(
|
|
65
73
|
id=parsed_args.region,
|
|
@@ -73,7 +81,7 @@ class CreateRegion(command.ShowOne):
|
|
|
73
81
|
class DeleteRegion(command.Command):
|
|
74
82
|
_description = _("Delete region(s)")
|
|
75
83
|
|
|
76
|
-
def get_parser(self, prog_name):
|
|
84
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
77
85
|
parser = super().get_parser(prog_name)
|
|
78
86
|
parser.add_argument(
|
|
79
87
|
'region',
|
|
@@ -83,8 +91,10 @@ class DeleteRegion(command.Command):
|
|
|
83
91
|
)
|
|
84
92
|
return parser
|
|
85
93
|
|
|
86
|
-
def take_action(self, parsed_args):
|
|
87
|
-
identity_client =
|
|
94
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
95
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
96
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
97
|
+
)
|
|
88
98
|
result = 0
|
|
89
99
|
for i in parsed_args.region:
|
|
90
100
|
try:
|
|
@@ -108,7 +118,7 @@ class DeleteRegion(command.Command):
|
|
|
108
118
|
class ListRegion(command.Lister):
|
|
109
119
|
_description = _("List regions")
|
|
110
120
|
|
|
111
|
-
def get_parser(self, prog_name):
|
|
121
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
112
122
|
parser = super().get_parser(prog_name)
|
|
113
123
|
parser.add_argument(
|
|
114
124
|
'--parent-region',
|
|
@@ -117,8 +127,12 @@ class ListRegion(command.Lister):
|
|
|
117
127
|
)
|
|
118
128
|
return parser
|
|
119
129
|
|
|
120
|
-
def take_action(
|
|
121
|
-
|
|
130
|
+
def take_action(
|
|
131
|
+
self, parsed_args: argparse.Namespace
|
|
132
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
133
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
134
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
135
|
+
)
|
|
122
136
|
|
|
123
137
|
kwargs = {}
|
|
124
138
|
if parsed_args.parent_region:
|
|
@@ -144,7 +158,7 @@ class ListRegion(command.Lister):
|
|
|
144
158
|
class SetRegion(command.Command):
|
|
145
159
|
_description = _("Set region properties")
|
|
146
160
|
|
|
147
|
-
def get_parser(self, prog_name):
|
|
161
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
148
162
|
parser = super().get_parser(prog_name)
|
|
149
163
|
parser.add_argument(
|
|
150
164
|
'region',
|
|
@@ -163,8 +177,10 @@ class SetRegion(command.Command):
|
|
|
163
177
|
)
|
|
164
178
|
return parser
|
|
165
179
|
|
|
166
|
-
def take_action(self, parsed_args):
|
|
167
|
-
identity_client =
|
|
180
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
181
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
182
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
183
|
+
)
|
|
168
184
|
|
|
169
185
|
kwargs = {}
|
|
170
186
|
if parsed_args.description:
|
|
@@ -178,7 +194,7 @@ class SetRegion(command.Command):
|
|
|
178
194
|
class ShowRegion(command.ShowOne):
|
|
179
195
|
_description = _("Display region details")
|
|
180
196
|
|
|
181
|
-
def get_parser(self, prog_name):
|
|
197
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
182
198
|
parser = super().get_parser(prog_name)
|
|
183
199
|
parser.add_argument(
|
|
184
200
|
'region',
|
|
@@ -187,8 +203,12 @@ class ShowRegion(command.ShowOne):
|
|
|
187
203
|
)
|
|
188
204
|
return parser
|
|
189
205
|
|
|
190
|
-
def take_action(
|
|
191
|
-
|
|
206
|
+
def take_action(
|
|
207
|
+
self, parsed_args: argparse.Namespace
|
|
208
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
209
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
210
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
211
|
+
)
|
|
192
212
|
|
|
193
213
|
region = identity_client.get_region(parsed_args.region)
|
|
194
214
|
|
|
@@ -13,8 +13,12 @@
|
|
|
13
13
|
|
|
14
14
|
"""Registered limits 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 import utils as sdk_utils
|
|
18
22
|
from osc_lib import exceptions
|
|
19
23
|
from osc_lib import utils
|
|
20
24
|
|
|
@@ -25,7 +29,9 @@ from openstackclient.identity import common as common_utils
|
|
|
25
29
|
LOG = logging.getLogger(__name__)
|
|
26
30
|
|
|
27
31
|
|
|
28
|
-
def _format_registered_limit(
|
|
32
|
+
def _format_registered_limit(
|
|
33
|
+
registered_limit: Any,
|
|
34
|
+
) -> tuple[tuple[str, ...], Any]:
|
|
29
35
|
columns = (
|
|
30
36
|
'default_limit',
|
|
31
37
|
'description',
|
|
@@ -51,7 +57,7 @@ def _format_registered_limit(registered_limit):
|
|
|
51
57
|
class CreateRegisteredLimit(command.ShowOne):
|
|
52
58
|
_description = _("Create a registered limit")
|
|
53
59
|
|
|
54
|
-
def get_parser(self, prog_name):
|
|
60
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
55
61
|
parser = super().get_parser(prog_name)
|
|
56
62
|
parser.add_argument(
|
|
57
63
|
'--description',
|
|
@@ -86,8 +92,12 @@ class CreateRegisteredLimit(command.ShowOne):
|
|
|
86
92
|
)
|
|
87
93
|
return parser
|
|
88
94
|
|
|
89
|
-
def take_action(
|
|
90
|
-
|
|
95
|
+
def take_action(
|
|
96
|
+
self, parsed_args: argparse.Namespace
|
|
97
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
98
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
99
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
100
|
+
)
|
|
91
101
|
|
|
92
102
|
kwargs = {}
|
|
93
103
|
|
|
@@ -114,7 +124,7 @@ class CreateRegisteredLimit(command.ShowOne):
|
|
|
114
124
|
class DeleteRegisteredLimit(command.Command):
|
|
115
125
|
_description = _("Delete a registered limit")
|
|
116
126
|
|
|
117
|
-
def get_parser(self, prog_name):
|
|
127
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
118
128
|
parser = super().get_parser(prog_name)
|
|
119
129
|
parser.add_argument(
|
|
120
130
|
'registered_limits',
|
|
@@ -127,8 +137,10 @@ class DeleteRegisteredLimit(command.Command):
|
|
|
127
137
|
)
|
|
128
138
|
return parser
|
|
129
139
|
|
|
130
|
-
def take_action(self, parsed_args):
|
|
131
|
-
identity_client =
|
|
140
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
141
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
142
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
143
|
+
)
|
|
132
144
|
|
|
133
145
|
errors = 0
|
|
134
146
|
for registered_limit_id in parsed_args.registered_limits:
|
|
@@ -160,7 +172,7 @@ class DeleteRegisteredLimit(command.Command):
|
|
|
160
172
|
class ListRegisteredLimit(command.Lister):
|
|
161
173
|
_description = _("List registered limits")
|
|
162
174
|
|
|
163
|
-
def get_parser(self, prog_name):
|
|
175
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
164
176
|
parser = super().get_parser(prog_name)
|
|
165
177
|
parser.add_argument(
|
|
166
178
|
'--service',
|
|
@@ -182,8 +194,12 @@ class ListRegisteredLimit(command.Lister):
|
|
|
182
194
|
)
|
|
183
195
|
return parser
|
|
184
196
|
|
|
185
|
-
def take_action(
|
|
186
|
-
|
|
197
|
+
def take_action(
|
|
198
|
+
self, parsed_args: argparse.Namespace
|
|
199
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
200
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
201
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
202
|
+
)
|
|
187
203
|
|
|
188
204
|
kwargs = {}
|
|
189
205
|
if parsed_args.service:
|
|
@@ -217,7 +233,7 @@ class ListRegisteredLimit(command.Lister):
|
|
|
217
233
|
class SetRegisteredLimit(command.ShowOne):
|
|
218
234
|
_description = _("Update information about a registered limit")
|
|
219
235
|
|
|
220
|
-
def get_parser(self, prog_name):
|
|
236
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
221
237
|
parser = super().get_parser(prog_name)
|
|
222
238
|
parser.add_argument(
|
|
223
239
|
'registered_limit_id',
|
|
@@ -267,8 +283,12 @@ class SetRegisteredLimit(command.ShowOne):
|
|
|
267
283
|
)
|
|
268
284
|
return parser
|
|
269
285
|
|
|
270
|
-
def take_action(
|
|
271
|
-
|
|
286
|
+
def take_action(
|
|
287
|
+
self, parsed_args: argparse.Namespace
|
|
288
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
289
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
290
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
291
|
+
)
|
|
272
292
|
|
|
273
293
|
kwargs = {}
|
|
274
294
|
if parsed_args.service:
|
|
@@ -300,7 +320,7 @@ class SetRegisteredLimit(command.ShowOne):
|
|
|
300
320
|
class ShowRegisteredLimit(command.ShowOne):
|
|
301
321
|
_description = _("Display registered limit details")
|
|
302
322
|
|
|
303
|
-
def get_parser(self, prog_name):
|
|
323
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
304
324
|
parser = super().get_parser(prog_name)
|
|
305
325
|
parser.add_argument(
|
|
306
326
|
'registered_limit_id',
|
|
@@ -309,8 +329,12 @@ class ShowRegisteredLimit(command.ShowOne):
|
|
|
309
329
|
)
|
|
310
330
|
return parser
|
|
311
331
|
|
|
312
|
-
def take_action(
|
|
313
|
-
|
|
332
|
+
def take_action(
|
|
333
|
+
self, parsed_args: argparse.Namespace
|
|
334
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
335
|
+
identity_client = sdk_utils.ensure_service_version(
|
|
336
|
+
self.app.client_manager.sdk_connection.identity, '3'
|
|
337
|
+
)
|
|
314
338
|
registered_limit = identity_client.get_registered_limit(
|
|
315
339
|
parsed_args.registered_limit_id
|
|
316
340
|
)
|