typing: Add types for empty dicts, tuples

In some cases, simply remove them.

Change-Id: I24a311a24eb533325dda83005777bcb2e0afc320
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
Stephen Finucane 2025-02-19 20:15:43 +00:00
parent bdd55d989d
commit 7380fbe300
35 changed files with 67 additions and 93 deletions

View File

@ -18,6 +18,7 @@
import importlib
import logging
import sys
import typing as ty
from osc_lib import clientmanager
from osc_lib import shell
@ -26,7 +27,7 @@ import stevedore
LOG = logging.getLogger(__name__)
PLUGIN_MODULES = []
PLUGIN_MODULES: list[ty.Any] = []
USER_AGENT = 'python-openstackclient'

View File

@ -17,6 +17,7 @@ import getpass
import logging
import os
import queue
import typing as ty
from cliff.formatters import table
from osc_lib.command import command
@ -100,7 +101,7 @@ class ProjectCleanup(command.Command):
project_connect = sdk.connect_as_project(project)
if project_connect:
status_queue = queue.Queue()
status_queue: queue.Queue[ty.Any] = queue.Queue()
parsed_args.max_width = int(
os.environ.get('CLIFF_MAX_TERM_WIDTH', 0)
)

View File

@ -17,6 +17,7 @@
"""Compute v2 Aggregate action implementations"""
import logging
import typing as ty
from openstack import utils as sdk_utils
from osc_lib.cli import format_columns
@ -321,7 +322,7 @@ class SetAggregate(command.Command):
if kwargs:
compute_client.update_aggregate(aggregate.id, **kwargs)
properties = {}
properties: dict[str, ty.Any] = {}
if parsed_args.no_property:
# NOTE(RuiChen): "availability_zone" can not be unset from
# properties. It is already excluded from show and create output.

View File

@ -25,10 +25,9 @@ from openstackclient.i18n import _
def _get_console_columns(item):
# To maintain backwards compatibility we need to rename sdk props to
# whatever OSC was using before
column_map = {}
hidden_columns = ['id', 'links', 'location', 'name']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -61,14 +61,13 @@ def _generate_keypair():
def _get_keypair_columns(item, hide_pub_key=False, hide_priv_key=False):
# To maintain backwards compatibility we need to rename sdk props to
# whatever OSC was using before
column_map = {}
hidden_columns = ['links', 'location']
if hide_pub_key:
hidden_columns.append('public_key')
if hide_priv_key:
hidden_columns.append('private_key')
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -1032,7 +1032,6 @@ class BDMLegacyAction(argparse.Action):
class BDMAction(parseractions.MultiKeyValueAction):
def __init__(self, option_strings, dest, **kwargs):
required_keys = []
optional_keys = [
'uuid',
'source_type',
@ -1050,7 +1049,7 @@ class BDMAction(parseractions.MultiKeyValueAction):
super().__init__(
option_strings,
dest,
required_keys=required_keys,
required_keys=[],
optional_keys=optional_keys,
**kwargs,
)
@ -3963,14 +3962,12 @@ class RemoveFloatingIP(network_common.NetworkAndComputeCommand):
return parser
def take_action_network(self, client, parsed_args):
attrs = {}
obj = client.find_ip(
parsed_args.ip_address,
ignore_missing=False,
)
attrs['port_id'] = None
client.update_ip(obj, **attrs)
client.update_ip(obj, port_id=None)
def take_action_compute(self, client, parsed_args):
server = client.find_server(parsed_args.server, ignore_missing=False)

View File

@ -65,17 +65,11 @@ class ServerActionEventColumn(columns.FormattableColumn):
"""
def _format_event(self, event):
column_map = {}
hidden_columns = ['id', 'name', 'location']
_, columns = utils.get_osc_show_columns_for_sdk_resource(
event,
column_map,
hidden_columns,
)
data = utils.get_item_properties(
event,
columns,
event, {}, hidden_columns
)
data = utils.get_item_properties(event, columns)
return dict(zip(columns, data))
def human_readable(self):
@ -88,7 +82,6 @@ class ServerActionEventColumn(columns.FormattableColumn):
def _get_server_event_columns(item, client):
column_map = {}
hidden_columns = ['name', 'server_id', 'links', 'location']
if not sdk_utils.supports_microversion(client, '2.58'):
@ -96,9 +89,7 @@ def _get_server_event_columns(item, client):
hidden_columns.append('updated_at')
return utils.get_osc_show_columns_for_sdk_resource(
item,
column_map,
hidden_columns,
item, {}, hidden_columns
)

View File

@ -20,6 +20,7 @@ from base64 import b64encode
import logging
import os
import sys
import typing as ty
from cinderclient import api_versions
from openstack import exceptions as sdk_exceptions
@ -615,7 +616,10 @@ class CreateImage(command.ShowOne):
volume_client.volumes,
parsed_args.volume,
)
kwargs = {}
kwargs = {
'visibility': None,
'protected': None,
}
if volume_client.api_version < api_versions.APIVersion('3.1'):
if parsed_args.visibility or parsed_args.is_protected is not None:
msg = _(
@ -625,10 +629,8 @@ class CreateImage(command.ShowOne):
)
raise exceptions.CommandError(msg)
else:
kwargs.update(
visibility=parsed_args.visibility or 'private',
protected=parsed_args.is_protected or False,
)
kwargs['visibility'] = parsed_args.visibility or 'private'
kwargs['protected'] = parsed_args.is_protected or False
response, body = volume_client.volumes.upload_to_image(
source_volume.id,
@ -1453,7 +1455,6 @@ class UnsetImage(command.Command):
ignore_missing=False,
)
kwargs = {}
tagret = 0
propret = 0
if parsed_args.tags:
@ -1466,6 +1467,7 @@ class UnsetImage(command.Command):
)
tagret += 1
kwargs: dict[str, ty.Any] = {}
if parsed_args.properties:
for k in parsed_args.properties:
if k in image:

View File

@ -22,10 +22,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -23,8 +23,7 @@ class ListMetadefResourceTypes(command.Lister):
def take_action(self, parsed_args):
image_client = self.app.client_manager.image
kwargs = {}
data = image_client.metadef_resource_types(**kwargs)
data = image_client.metadef_resource_types()
columns = ['Name']
column_headers = columns
return (

View File

@ -14,6 +14,7 @@
import abc
import contextlib
import logging
import typing as ty
import openstack.exceptions
from osc_lib.cli import parseractions
@ -295,10 +296,10 @@ class NeutronCommandWithExtraArgs(command.Command):
}
def _get_property_converter(self, _property):
if 'type' not in _property:
converter = str
else:
if 'type' in _property:
converter = self._allowed_types_dict.get(_property['type'])
else:
converter = str
if not converter:
raise exceptions.CommandError(
@ -311,7 +312,7 @@ class NeutronCommandWithExtraArgs(command.Command):
return converter
def _parse_extra_properties(self, extra_properties):
result = {}
result: dict[str, ty.Any] = {}
if extra_properties:
for _property in extra_properties:
converter = self._get_property_converter(_property)
@ -344,7 +345,7 @@ class NeutronCommandWithExtraArgs(command.Command):
class NeutronUnsetCommandWithExtraArgs(NeutronCommandWithExtraArgs):
def _parse_extra_properties(self, extra_properties):
result = {}
result: dict[str, ty.Any] = {}
if extra_properties:
for _property in extra_properties:
result[_property['name']] = None

View File

@ -58,12 +58,12 @@ def str2list(strlist):
return result
def str2dict(strdict):
def str2dict(strdict: str) -> dict[str, str]:
"""Convert key1:value1;key2:value2;... string into dictionary.
:param strdict: string in the form of key1:value1;key2:value2
"""
result = {}
result: dict[str, str] = {}
if not strdict:
return result
i = 0

View File

@ -28,10 +28,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -28,10 +28,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'name', 'revision_number']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -27,10 +27,9 @@ _formatters = {
def _get_network_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)
@ -571,7 +570,7 @@ class UnsetFloatingIP(common.NeutronCommandWithExtraArgs):
parsed_args.floating_ip,
ignore_missing=False,
)
attrs = {}
attrs: dict[str, None] = {}
if parsed_args.port:
attrs['port_id'] = None
if parsed_args.qos_policy:

View File

@ -14,6 +14,7 @@
"""Floating IP Port Forwarding action implementations"""
import logging
import typing as ty
from osc_lib.command import command
from osc_lib import exceptions
@ -85,10 +86,9 @@ def validate_port(port):
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)
@ -165,7 +165,7 @@ class CreateFloatingIPPortForwarding(
return parser
def take_action(self, parsed_args):
attrs = {}
attrs: dict[str, ty.Any] = {}
client = self.app.client_manager.network
floating_ip = client.find_ip(
parsed_args.floating_ip,

View File

@ -26,10 +26,9 @@ _formatters = {
def _get_columns(item):
column_map = {}
hidden_columns = ['id', 'name', 'location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -25,10 +25,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -28,10 +28,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -28,10 +28,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'name', 'id', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -29,10 +29,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -68,8 +68,7 @@ def _get_columns_network(item):
def _get_columns_compute(item):
column_map = {}
return utils.get_osc_show_columns_for_sdk_resource(item, column_map)
return utils.get_osc_show_columns_for_sdk_resource(item, {})
def _get_attrs_network(client_manager, parsed_args):

View File

@ -25,10 +25,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['name', 'location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -27,10 +27,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -73,10 +73,9 @@ ACTION_SHOW = 'get'
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -26,10 +26,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -18,6 +18,7 @@
import itertools
import logging
import typing as ty
from osc_lib.command import command
from osc_lib import exceptions
@ -32,10 +33,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)
@ -59,7 +59,7 @@ def _is_prop_empty(columns, props, prop_name):
def _exchange_dict_keys_with_values(orig_dict):
updated_dict = dict()
updated_dict: dict[str, ty.Any] = {}
for k, v in orig_dict.items():
k = [k]
if not updated_dict.get(v):
@ -351,8 +351,7 @@ class ListNetworkSegmentRange(command.Lister):
) % {'e': e}
raise exceptions.CommandError(msg)
filters = {}
data = network_client.network_segment_ranges(**filters)
data = network_client.network_segment_ranges()
headers: tuple[str, ...] = (
'ID',
@ -396,7 +395,7 @@ class ListNetworkSegmentRange(command.Lister):
'available',
)
display_props = tuple()
display_props: tuple[str, ...] = tuple()
for s in data:
props = utils.get_item_properties(s, columns)
if (

View File

@ -336,10 +336,9 @@ _formatters = {
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return osc_utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -30,10 +30,9 @@ LOG = logging.getLogger(__name__)
def _get_columns(item):
column_map = {}
hidden_columns = ['location', 'tenant_id']
return utils.get_osc_show_columns_for_sdk_resource(
item, column_map, hidden_columns
item, {}, hidden_columns
)

View File

@ -15,6 +15,7 @@
import copy
import logging
import typing as ty
from cliff import columns as cliff_columns
from osc_lib.cli import format_columns
@ -831,7 +832,7 @@ class UnsetSubnet(common.NeutronUnsetCommandWithExtraArgs):
client = self.app.client_manager.network
obj = client.find_subnet(parsed_args.subnet, ignore_missing=False)
attrs = {}
attrs: dict[str, ty.Any] = {}
if parsed_args.gateway:
attrs['gateway_ip'] = None
if parsed_args.dns_nameservers:

View File

@ -56,7 +56,7 @@ class NetworkTagTests(NetworkTests):
'set', name1, '--tag red --tag green', ['red', 'green']
)
list_expected = (
list_expected: tuple[tuple[str, list[str]]] = (
(name1, ['red', 'green']),
(name2, ['red', 'blue']),
(name3, []),

View File

@ -346,7 +346,13 @@ class TestImageCreate(TestImage):
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.upload_to_image.assert_called_with(
fake_vol_id, False, self.new_image.name, 'bare', 'raw'
fake_vol_id,
False,
self.new_image.name,
'bare',
'raw',
visibility=None,
protected=None,
)
@mock.patch('osc_lib.utils.find_resource')

View File

@ -85,8 +85,6 @@ class CreateTransferRequest(command.ShowOne):
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
kwargs = {}
volume_id = utils.find_resource(
volume_client.volumes,
parsed_args.volume,
@ -94,7 +92,6 @@ class CreateTransferRequest(command.ShowOne):
volume_transfer_request = volume_client.transfers.create(
volume_id,
parsed_args.name,
**kwargs,
)
volume_transfer_request._info.pop("links", None)

View File

@ -649,9 +649,7 @@ class SetVolumeType(command.Command):
)
result += 1
properties = {}
properties = {}
properties: dict[str, str] = {}
if parsed_args.properties:
properties.update(parsed_args.properties)
if parsed_args.multiattach:

View File

@ -731,9 +731,7 @@ class SetVolumeType(command.Command):
)
result += 1
properties = {}
properties = {}
properties: dict[str, str] = {}
if parsed_args.properties:
properties.update(parsed_args.properties)
if parsed_args.multiattach: