python-openstackclient 8.3.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 +126 -114
- 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 +251 -171
- 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 +103 -41
- 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 +26 -12
- 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 +71 -50
- 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 +115 -92
- openstackclient/identity/v3/mapping.py +26 -13
- openstackclient/identity/v3/policy.py +23 -12
- openstackclient/identity/v3/project.py +211 -122
- openstackclient/identity/v3/region.py +36 -16
- openstackclient/identity/v3/registered_limit.py +116 -109
- 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 -17
- 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 +76 -49
- 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_limit.py +47 -0
- 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/image/v2/test_metadef_objects.py +69 -0
- 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 +56 -138
- 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 +62 -23
- 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 +17 -104
- 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_limit.py +197 -145
- openstackclient/tests/unit/identity/v3/test_project.py +831 -512
- openstackclient/tests/unit/identity/v3/test_protocol.py +97 -88
- openstackclient/tests/unit/identity/v3/test_registered_limit.py +355 -220
- openstackclient/tests/unit/identity/v3/test_user.py +4 -4
- openstackclient/tests/unit/image/v2/test_image.py +16 -16
- 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_consistency_group.py +8 -2
- openstackclient/tests/unit/volume/v2/test_volume.py +7 -6
- 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 +94 -15
- 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 +37 -25
- openstackclient/volume/v2/consistency_group_snapshot.py +27 -12
- openstackclient/volume/v2/qos_specs.py +30 -19
- openstackclient/volume/v2/service.py +17 -6
- openstackclient/volume/v2/volume.py +69 -34
- openstackclient/volume/v2/volume_backend.py +19 -6
- openstackclient/volume/v2/volume_backup.py +48 -22
- openstackclient/volume/v2/volume_host.py +6 -4
- openstackclient/volume/v2/volume_snapshot.py +52 -26
- openstackclient/volume/v2/volume_transfer_request.py +33 -15
- openstackclient/volume/v2/volume_type.py +46 -27
- 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 +103 -46
- openstackclient/volume/v3/volume_attachment.py +43 -21
- openstackclient/volume/v3/volume_backup.py +55 -26
- 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 +71 -34
- openstackclient/volume/v3/volume_transfer_request.py +33 -15
- openstackclient/volume/v3/volume_type.py +45 -27
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/METADATA +6 -6
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/RECORD +279 -267
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/WHEEL +1 -1
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/entry_points.txt +53 -1
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/AUTHORS +9 -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-8.3.0.dist-info/pbr.json +0 -1
- /openstackclient/{tests/functional/image/v1 → network/v2/bgpvpn}/__init__.py +0 -0
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/licenses/LICENSE +0 -0
- {python_openstackclient-8.3.0.dist-info → python_openstackclient-10.0.0.dist-info}/top_level.txt +0 -0
|
@@ -15,8 +15,11 @@
|
|
|
15
15
|
|
|
16
16
|
"""Identity v3 federation mapping action implementations"""
|
|
17
17
|
|
|
18
|
+
import argparse
|
|
19
|
+
from collections.abc import Iterable, Sequence
|
|
18
20
|
import json
|
|
19
21
|
import logging
|
|
22
|
+
from typing import Any
|
|
20
23
|
|
|
21
24
|
from osc_lib import exceptions
|
|
22
25
|
from osc_lib import utils
|
|
@@ -31,7 +34,7 @@ LOG = logging.getLogger(__name__)
|
|
|
31
34
|
class _RulesReader:
|
|
32
35
|
_description = _("Helper class capable of reading rules from files")
|
|
33
36
|
|
|
34
|
-
def _read_rules(self, path):
|
|
37
|
+
def _read_rules(self, path: str) -> Any:
|
|
35
38
|
"""Read and parse rules from path
|
|
36
39
|
|
|
37
40
|
Expect the file to contain a valid JSON structure.
|
|
@@ -82,7 +85,9 @@ class _RulesReader:
|
|
|
82
85
|
return rules
|
|
83
86
|
|
|
84
87
|
@staticmethod
|
|
85
|
-
def add_federated_schema_version_option(
|
|
88
|
+
def add_federated_schema_version_option(
|
|
89
|
+
parser: argparse.ArgumentParser,
|
|
90
|
+
) -> None:
|
|
86
91
|
parser.add_argument(
|
|
87
92
|
'--schema-version',
|
|
88
93
|
metavar='<schema_version>',
|
|
@@ -100,7 +105,7 @@ class _RulesReader:
|
|
|
100
105
|
class CreateMapping(command.ShowOne, _RulesReader):
|
|
101
106
|
_description = _("Create new mapping")
|
|
102
107
|
|
|
103
|
-
def get_parser(self, prog_name):
|
|
108
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
104
109
|
parser = super().get_parser(prog_name)
|
|
105
110
|
parser.add_argument(
|
|
106
111
|
'mapping',
|
|
@@ -116,7 +121,9 @@ class CreateMapping(command.ShowOne, _RulesReader):
|
|
|
116
121
|
_RulesReader.add_federated_schema_version_option(parser)
|
|
117
122
|
return parser
|
|
118
123
|
|
|
119
|
-
def take_action(
|
|
124
|
+
def take_action(
|
|
125
|
+
self, parsed_args: argparse.Namespace
|
|
126
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
120
127
|
identity_client = self.app.client_manager.identity
|
|
121
128
|
|
|
122
129
|
rules = self._read_rules(parsed_args.rules)
|
|
@@ -127,13 +134,14 @@ class CreateMapping(command.ShowOne, _RulesReader):
|
|
|
127
134
|
)
|
|
128
135
|
|
|
129
136
|
mapping._info.pop('links', None)
|
|
130
|
-
|
|
137
|
+
col_headers, col_data = zip(*sorted(mapping._info.items()))
|
|
138
|
+
return col_headers, col_data
|
|
131
139
|
|
|
132
140
|
|
|
133
141
|
class DeleteMapping(command.Command):
|
|
134
142
|
_description = _("Delete mapping(s)")
|
|
135
143
|
|
|
136
|
-
def get_parser(self, prog_name):
|
|
144
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
137
145
|
parser = super().get_parser(prog_name)
|
|
138
146
|
parser.add_argument(
|
|
139
147
|
'mapping',
|
|
@@ -143,7 +151,7 @@ class DeleteMapping(command.Command):
|
|
|
143
151
|
)
|
|
144
152
|
return parser
|
|
145
153
|
|
|
146
|
-
def take_action(self, parsed_args):
|
|
154
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
147
155
|
identity_client = self.app.client_manager.identity
|
|
148
156
|
result = 0
|
|
149
157
|
for i in parsed_args.mapping:
|
|
@@ -171,7 +179,9 @@ class DeleteMapping(command.Command):
|
|
|
171
179
|
class ListMapping(command.Lister):
|
|
172
180
|
_description = _("List mappings")
|
|
173
181
|
|
|
174
|
-
def take_action(
|
|
182
|
+
def take_action(
|
|
183
|
+
self, parsed_args: argparse.Namespace
|
|
184
|
+
) -> tuple[tuple[str, ...], Iterable[tuple[Any, ...]]]:
|
|
175
185
|
# NOTE(marek-denis): Since rules can be long and tedious I have decided
|
|
176
186
|
# to only list ids of the mappings. If somebody wants to check the
|
|
177
187
|
# rules, (s)he should show specific ones.
|
|
@@ -185,7 +195,7 @@ class ListMapping(command.Lister):
|
|
|
185
195
|
class SetMapping(command.Command, _RulesReader):
|
|
186
196
|
_description = _("Set mapping properties")
|
|
187
197
|
|
|
188
|
-
def get_parser(self, prog_name):
|
|
198
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
189
199
|
parser = super().get_parser(prog_name)
|
|
190
200
|
parser.add_argument(
|
|
191
201
|
'mapping',
|
|
@@ -201,7 +211,7 @@ class SetMapping(command.Command, _RulesReader):
|
|
|
201
211
|
_RulesReader.add_federated_schema_version_option(parser)
|
|
202
212
|
return parser
|
|
203
213
|
|
|
204
|
-
def take_action(self, parsed_args):
|
|
214
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
205
215
|
identity_client = self.app.client_manager.identity
|
|
206
216
|
|
|
207
217
|
rules = self._read_rules(parsed_args.rules)
|
|
@@ -218,7 +228,7 @@ class SetMapping(command.Command, _RulesReader):
|
|
|
218
228
|
class ShowMapping(command.ShowOne):
|
|
219
229
|
_description = _("Display mapping details")
|
|
220
230
|
|
|
221
|
-
def get_parser(self, prog_name):
|
|
231
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
222
232
|
parser = super().get_parser(prog_name)
|
|
223
233
|
parser.add_argument(
|
|
224
234
|
'mapping',
|
|
@@ -227,10 +237,13 @@ class ShowMapping(command.ShowOne):
|
|
|
227
237
|
)
|
|
228
238
|
return parser
|
|
229
239
|
|
|
230
|
-
def take_action(
|
|
240
|
+
def take_action(
|
|
241
|
+
self, parsed_args: argparse.Namespace
|
|
242
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
231
243
|
identity_client = self.app.client_manager.identity
|
|
232
244
|
|
|
233
245
|
mapping = identity_client.federation.mappings.get(parsed_args.mapping)
|
|
234
246
|
|
|
235
247
|
mapping._info.pop('links', None)
|
|
236
|
-
|
|
248
|
+
col_headers, col_data = zip(*sorted(mapping._info.items()))
|
|
249
|
+
return col_headers, col_data
|
|
@@ -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
|