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
|
@@ -19,7 +19,8 @@ import argparse
|
|
|
19
19
|
import logging
|
|
20
20
|
import os
|
|
21
21
|
import sys
|
|
22
|
-
import
|
|
22
|
+
from collections.abc import Iterable, Sequence
|
|
23
|
+
from typing import Any
|
|
23
24
|
|
|
24
25
|
from cliff import columns as cliff_columns
|
|
25
26
|
from osc_lib.api import utils as api_utils
|
|
@@ -51,7 +52,7 @@ DISK_CHOICES = [
|
|
|
51
52
|
LOG = logging.getLogger(__name__)
|
|
52
53
|
|
|
53
54
|
|
|
54
|
-
def _get_columns(item):
|
|
55
|
+
def _get_columns(item: Any) -> tuple[tuple[str, ...], tuple[str, ...]]:
|
|
55
56
|
column_map = {'is_protected': 'protected', 'owner_id': 'owner'}
|
|
56
57
|
hidden_columns = [
|
|
57
58
|
'location',
|
|
@@ -69,7 +70,7 @@ def _get_columns(item):
|
|
|
69
70
|
|
|
70
71
|
|
|
71
72
|
class HumanReadableSizeColumn(cliff_columns.FormattableColumn[int]):
|
|
72
|
-
def human_readable(self):
|
|
73
|
+
def human_readable(self) -> str:
|
|
73
74
|
"""Return a formatted visibility string
|
|
74
75
|
|
|
75
76
|
:rtype:
|
|
@@ -83,7 +84,7 @@ class HumanReadableSizeColumn(cliff_columns.FormattableColumn[int]):
|
|
|
83
84
|
|
|
84
85
|
|
|
85
86
|
class VisibilityColumn(cliff_columns.FormattableColumn[bool]):
|
|
86
|
-
def human_readable(self):
|
|
87
|
+
def human_readable(self) -> str:
|
|
87
88
|
"""Return a formatted visibility string
|
|
88
89
|
|
|
89
90
|
:rtype:
|
|
@@ -99,7 +100,7 @@ class VisibilityColumn(cliff_columns.FormattableColumn[bool]):
|
|
|
99
100
|
class CreateImage(command.ShowOne):
|
|
100
101
|
_description = _("Create/upload an image")
|
|
101
102
|
|
|
102
|
-
def get_parser(self, prog_name):
|
|
103
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
103
104
|
parser = super().get_parser(prog_name)
|
|
104
105
|
parser.add_argument(
|
|
105
106
|
"name",
|
|
@@ -239,7 +240,9 @@ class CreateImage(command.ShowOne):
|
|
|
239
240
|
)
|
|
240
241
|
return parser
|
|
241
242
|
|
|
242
|
-
def take_action(
|
|
243
|
+
def take_action(
|
|
244
|
+
self, parsed_args: argparse.Namespace
|
|
245
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
243
246
|
image_client = self.app.client_manager.image
|
|
244
247
|
|
|
245
248
|
# Build an attribute dict from the parsed args, only include
|
|
@@ -299,7 +302,7 @@ class CreateImage(command.ShowOne):
|
|
|
299
302
|
volume_client.volumes,
|
|
300
303
|
parsed_args.volume,
|
|
301
304
|
)
|
|
302
|
-
|
|
305
|
+
_response, body = volume_client.volumes.upload_to_image(
|
|
303
306
|
source_volume.id,
|
|
304
307
|
parsed_args.force,
|
|
305
308
|
parsed_args.name,
|
|
@@ -314,10 +317,10 @@ class CreateImage(command.ShowOne):
|
|
|
314
317
|
else:
|
|
315
318
|
# Read file from stdin
|
|
316
319
|
if not sys.stdin.isatty():
|
|
317
|
-
if
|
|
320
|
+
if sys.platform == "win32":
|
|
318
321
|
import msvcrt
|
|
319
322
|
|
|
320
|
-
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
|
|
323
|
+
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
|
|
321
324
|
if hasattr(sys.stdin, 'buffer'):
|
|
322
325
|
kwargs['data'] = sys.stdin.buffer
|
|
323
326
|
else:
|
|
@@ -351,13 +354,15 @@ class CreateImage(command.ShowOne):
|
|
|
351
354
|
info['properties'] = format_columns.DictColumn(
|
|
352
355
|
info.get('properties', {})
|
|
353
356
|
)
|
|
354
|
-
|
|
357
|
+
col_headers, col_data = zip(*sorted(info.items()))
|
|
358
|
+
return col_headers, col_data
|
|
359
|
+
return ((), ())
|
|
355
360
|
|
|
356
361
|
|
|
357
362
|
class DeleteImage(command.Command):
|
|
358
363
|
_description = _("Delete image(s)")
|
|
359
364
|
|
|
360
|
-
def get_parser(self, prog_name):
|
|
365
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
361
366
|
parser = super().get_parser(prog_name)
|
|
362
367
|
parser.add_argument(
|
|
363
368
|
"images",
|
|
@@ -367,7 +372,7 @@ class DeleteImage(command.Command):
|
|
|
367
372
|
)
|
|
368
373
|
return parser
|
|
369
374
|
|
|
370
|
-
def take_action(self, parsed_args):
|
|
375
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
371
376
|
result = 0
|
|
372
377
|
image_client = self.app.client_manager.image
|
|
373
378
|
for image in parsed_args.images:
|
|
@@ -396,7 +401,7 @@ class DeleteImage(command.Command):
|
|
|
396
401
|
class ListImage(command.Lister):
|
|
397
402
|
_description = _("List available images")
|
|
398
403
|
|
|
399
|
-
def get_parser(self, prog_name):
|
|
404
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
400
405
|
parser = super().get_parser(prog_name)
|
|
401
406
|
public_group = parser.add_mutually_exclusive_group()
|
|
402
407
|
public_group.add_argument(
|
|
@@ -453,7 +458,9 @@ class ListImage(command.Lister):
|
|
|
453
458
|
)
|
|
454
459
|
return parser
|
|
455
460
|
|
|
456
|
-
def take_action(
|
|
461
|
+
def take_action(
|
|
462
|
+
self, parsed_args: argparse.Namespace
|
|
463
|
+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
|
|
457
464
|
image_client = self.app.client_manager.image
|
|
458
465
|
|
|
459
466
|
kwargs = {}
|
|
@@ -498,7 +505,7 @@ class ListImage(command.Lister):
|
|
|
498
505
|
|
|
499
506
|
if parsed_args.property:
|
|
500
507
|
# NOTE(dtroyer): coerce to a list to subscript it in py3
|
|
501
|
-
attr, value =
|
|
508
|
+
attr, value = next(iter(parsed_args.property.items()))
|
|
502
509
|
api_utils.simple_filter(
|
|
503
510
|
images,
|
|
504
511
|
attr=attr,
|
|
@@ -527,7 +534,7 @@ class ListImage(command.Lister):
|
|
|
527
534
|
class SaveImage(command.Command):
|
|
528
535
|
_description = _("Save an image locally")
|
|
529
536
|
|
|
530
|
-
def get_parser(self, prog_name):
|
|
537
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
531
538
|
parser = super().get_parser(prog_name)
|
|
532
539
|
parser.add_argument(
|
|
533
540
|
"--chunk-size",
|
|
@@ -551,7 +558,7 @@ class SaveImage(command.Command):
|
|
|
551
558
|
)
|
|
552
559
|
return parser
|
|
553
560
|
|
|
554
|
-
def take_action(self, parsed_args):
|
|
561
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
555
562
|
image_client = self.app.client_manager.image
|
|
556
563
|
image = image_client.find_image(
|
|
557
564
|
parsed_args.image, ignore_missing=False
|
|
@@ -572,7 +579,7 @@ class SaveImage(command.Command):
|
|
|
572
579
|
class SetImage(command.Command):
|
|
573
580
|
_description = _("Set image properties")
|
|
574
581
|
|
|
575
|
-
def get_parser(self, prog_name):
|
|
582
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
576
583
|
parser = super().get_parser(prog_name)
|
|
577
584
|
parser.add_argument(
|
|
578
585
|
"image",
|
|
@@ -702,7 +709,7 @@ class SetImage(command.Command):
|
|
|
702
709
|
)
|
|
703
710
|
return parser
|
|
704
711
|
|
|
705
|
-
def take_action(self, parsed_args):
|
|
712
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
706
713
|
image_client = self.app.client_manager.image
|
|
707
714
|
|
|
708
715
|
kwargs = {}
|
|
@@ -785,10 +792,10 @@ class SetImage(command.Command):
|
|
|
785
792
|
# Read file from stdin
|
|
786
793
|
if sys.stdin.isatty() is not True:
|
|
787
794
|
if parsed_args.stdin:
|
|
788
|
-
if
|
|
795
|
+
if sys.platform == "win32":
|
|
789
796
|
import msvcrt
|
|
790
797
|
|
|
791
|
-
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
|
|
798
|
+
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
|
|
792
799
|
if hasattr(sys.stdin, 'buffer'):
|
|
793
800
|
kwargs['data'] = sys.stdin.buffer
|
|
794
801
|
else:
|
|
@@ -819,7 +826,7 @@ class SetImage(command.Command):
|
|
|
819
826
|
class ShowImage(command.ShowOne):
|
|
820
827
|
_description = _("Display image details")
|
|
821
828
|
|
|
822
|
-
def get_parser(self, prog_name):
|
|
829
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
823
830
|
parser = super().get_parser(prog_name)
|
|
824
831
|
parser.add_argument(
|
|
825
832
|
"--human-readable",
|
|
@@ -834,15 +841,15 @@ class ShowImage(command.ShowOne):
|
|
|
834
841
|
)
|
|
835
842
|
return parser
|
|
836
843
|
|
|
837
|
-
def take_action(
|
|
844
|
+
def take_action(
|
|
845
|
+
self, parsed_args: argparse.Namespace
|
|
846
|
+
) -> tuple[Sequence[str], Iterable[Any]]:
|
|
838
847
|
image_client = self.app.client_manager.image
|
|
839
848
|
image = image_client.find_image(
|
|
840
849
|
parsed_args.image, ignore_missing=False
|
|
841
850
|
)
|
|
842
851
|
|
|
843
|
-
formatters: dict[
|
|
844
|
-
str, type[cliff_columns.FormattableColumn[ty.Any]]
|
|
845
|
-
] = {
|
|
852
|
+
formatters: dict[str, type[cliff_columns.FormattableColumn[Any]]] = {
|
|
846
853
|
'properties': format_columns.DictColumn,
|
|
847
854
|
}
|
|
848
855
|
if parsed_args.human_readable:
|
|
@@ -13,9 +13,12 @@
|
|
|
13
13
|
# License for the specific language governing permissions and limitations
|
|
14
14
|
# under the License.
|
|
15
15
|
|
|
16
|
+
import argparse
|
|
17
|
+
from collections.abc import Iterable, Sequence
|
|
16
18
|
import copy
|
|
17
19
|
import datetime
|
|
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
|
|
@@ -27,7 +30,7 @@ from openstackclient.i18n import _
|
|
|
27
30
|
LOG = logging.getLogger(__name__)
|
|
28
31
|
|
|
29
32
|
|
|
30
|
-
def _format_image_cache(cached_images):
|
|
33
|
+
def _format_image_cache(cached_images: dict[str, Any]) -> list[dict[str, Any]]:
|
|
31
34
|
"""Format image cache to make it more consistent with OSC operations."""
|
|
32
35
|
|
|
33
36
|
image_list = []
|
|
@@ -70,11 +73,13 @@ def _format_image_cache(cached_images):
|
|
|
70
73
|
class ListCachedImage(command.Lister):
|
|
71
74
|
_description = _("Get Cache State")
|
|
72
75
|
|
|
73
|
-
def get_parser(self, prog_name):
|
|
76
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
74
77
|
parser = super().get_parser(prog_name)
|
|
75
78
|
return parser
|
|
76
79
|
|
|
77
|
-
def take_action(
|
|
80
|
+
def take_action(
|
|
81
|
+
self, parsed_args: argparse.Namespace
|
|
82
|
+
) -> tuple[Sequence[str], Iterable[tuple[Any, ...]]]:
|
|
78
83
|
image_client = self.app.client_manager.image
|
|
79
84
|
|
|
80
85
|
# List of Cache data received
|
|
@@ -111,7 +116,7 @@ class ListCachedImage(command.Lister):
|
|
|
111
116
|
class QueueCachedImage(command.Command):
|
|
112
117
|
_description = _("Queue image(s) for caching.")
|
|
113
118
|
|
|
114
|
-
def get_parser(self, prog_name):
|
|
119
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
115
120
|
parser = super().get_parser(prog_name)
|
|
116
121
|
parser.add_argument(
|
|
117
122
|
"images",
|
|
@@ -121,7 +126,7 @@ class QueueCachedImage(command.Command):
|
|
|
121
126
|
)
|
|
122
127
|
return parser
|
|
123
128
|
|
|
124
|
-
def take_action(self, parsed_args):
|
|
129
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
125
130
|
image_client = self.app.client_manager.image
|
|
126
131
|
|
|
127
132
|
failures = 0
|
|
@@ -151,7 +156,7 @@ class QueueCachedImage(command.Command):
|
|
|
151
156
|
class DeleteCachedImage(command.Command):
|
|
152
157
|
_description = _("Delete image(s) from cache")
|
|
153
158
|
|
|
154
|
-
def get_parser(self, prog_name):
|
|
159
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
155
160
|
parser = super().get_parser(prog_name)
|
|
156
161
|
parser.add_argument(
|
|
157
162
|
"images",
|
|
@@ -161,7 +166,7 @@ class DeleteCachedImage(command.Command):
|
|
|
161
166
|
)
|
|
162
167
|
return parser
|
|
163
168
|
|
|
164
|
-
def take_action(self, parsed_args):
|
|
169
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
165
170
|
failures = 0
|
|
166
171
|
image_client = self.app.client_manager.image
|
|
167
172
|
for image in parsed_args.images:
|
|
@@ -190,7 +195,7 @@ class DeleteCachedImage(command.Command):
|
|
|
190
195
|
class ClearCachedImage(command.Command):
|
|
191
196
|
_description = _("Clear all images from cache, queue or both")
|
|
192
197
|
|
|
193
|
-
def get_parser(self, prog_name):
|
|
198
|
+
def get_parser(self, prog_name: str) -> argparse.ArgumentParser:
|
|
194
199
|
parser = super().get_parser(prog_name)
|
|
195
200
|
parser.add_argument(
|
|
196
201
|
"--cache",
|
|
@@ -210,7 +215,7 @@ class ClearCachedImage(command.Command):
|
|
|
210
215
|
)
|
|
211
216
|
return parser
|
|
212
217
|
|
|
213
|
-
def take_action(self, parsed_args):
|
|
218
|
+
def take_action(self, parsed_args: argparse.Namespace) -> None:
|
|
214
219
|
image_client = self.app.client_manager.image
|
|
215
220
|
|
|
216
221
|
target = parsed_args.target
|