Add type annotations to ironicclient/osc/plugin.py
Changes: Add type annotations following code conventions. Added file to the migrated files list. Change-Id: I830051fa48223097b1605c77b1c6c3f13671f99e Signed-off-by: Karan Anand <anandkarancompsci@gmail.com>
This commit is contained in:
@@ -16,26 +16,30 @@
|
||||
|
||||
"""OpenStackClient plugin for Bare Metal service."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import logging
|
||||
|
||||
from osc_lib import clientmanager
|
||||
from osc_lib import utils
|
||||
|
||||
from ironicclient.common import http
|
||||
from ironicclient.v1 import client as v1_client
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
LOG: logging.Logger = logging.getLogger(__name__)
|
||||
|
||||
CLIENT_CLASS = 'ironicclient.v1.client.Client'
|
||||
API_VERSION_OPTION = 'os_baremetal_api_version'
|
||||
API_NAME = 'baremetal'
|
||||
CLIENT_CLASS: str = 'ironicclient.v1.client.Client'
|
||||
API_VERSION_OPTION: str = 'os_baremetal_api_version'
|
||||
API_NAME: str = 'baremetal'
|
||||
# NOTE(TheJulia) Latest known version tracking has been moved
|
||||
# to the ironicclient/common/http.py file as the OSC commitment
|
||||
# is latest known, and we should only store it in one location.
|
||||
LAST_KNOWN_API_VERSION = http.LAST_KNOWN_API_VERSION
|
||||
LATEST_VERSION = http.LATEST_VERSION
|
||||
LAST_KNOWN_API_VERSION: int = http.LAST_KNOWN_API_VERSION
|
||||
LATEST_VERSION: str = http.LATEST_VERSION
|
||||
|
||||
|
||||
API_VERSIONS = {
|
||||
API_VERSIONS: dict[str, str] = {
|
||||
'1.%d' % i: CLIENT_CLASS
|
||||
for i in range(1, LAST_KNOWN_API_VERSION + 1)
|
||||
}
|
||||
@@ -43,17 +47,20 @@ API_VERSIONS['1'] = CLIENT_CLASS
|
||||
# NOTE(dtantsur): flag to indicate that the requested version was "latest".
|
||||
# Due to how OSC works we cannot just add "latest" to the list of supported
|
||||
# versions - it breaks the major version detection.
|
||||
OS_BAREMETAL_API_LATEST = True
|
||||
OS_BAREMETAL_API_LATEST: bool = True
|
||||
|
||||
|
||||
def make_client(instance):
|
||||
def make_client(
|
||||
instance: clientmanager.ClientManager,
|
||||
) -> v1_client.Client:
|
||||
"""Returns a baremetal service client."""
|
||||
requested_api_version = instance._api_version[API_NAME]
|
||||
requested_api_version: str = instance._api_version[API_NAME]
|
||||
|
||||
baremetal_client_class = utils.get_client_class(
|
||||
API_NAME,
|
||||
requested_api_version,
|
||||
API_VERSIONS)
|
||||
baremetal_client_class: type[v1_client.Client] = (
|
||||
utils.get_client_class(
|
||||
API_NAME,
|
||||
requested_api_version,
|
||||
API_VERSIONS))
|
||||
LOG.debug('Instantiating baremetal client: %s', baremetal_client_class)
|
||||
LOG.debug('Baremetal API version: %s',
|
||||
requested_api_version if not OS_BAREMETAL_API_LATEST
|
||||
@@ -63,28 +70,34 @@ def make_client(instance):
|
||||
# NOTE(dtantsur): '1' means 'the latest v1 API version'. Since we don't
|
||||
# have other major versions, it's identical to 'latest'.
|
||||
requested_api_version = LATEST_VERSION
|
||||
allow_api_version_downgrade = True
|
||||
allow_api_version_downgrade: bool = True
|
||||
else:
|
||||
allow_api_version_downgrade = OS_BAREMETAL_API_LATEST
|
||||
|
||||
client = baremetal_client_class(
|
||||
result: v1_client.Client = baremetal_client_class(
|
||||
os_ironic_api_version=requested_api_version,
|
||||
# NOTE(dtantsur): enable re-negotiation of the latest version, if CLI
|
||||
# latest is too high for the server we're talking to.
|
||||
allow_api_version_downgrade=allow_api_version_downgrade,
|
||||
session=instance.session,
|
||||
region_name=instance._region_name,
|
||||
# TODO(karan): _region_name is a private attr on ClientManager;
|
||||
# osc-lib should expose this publicly. See also:
|
||||
# https://bugs.launchpad.net/python-ironicclient/+bug/2146739
|
||||
region_name=instance._region_name, # type: ignore[attr-defined]
|
||||
# NOTE(vdrok): This will be set as endpoint_override, and the Client
|
||||
# class will be able to do the version stripping if needed
|
||||
endpoint_override=instance.get_endpoint_for_service_type(
|
||||
API_NAME, interface=instance.interface,
|
||||
region_name=instance._region_name
|
||||
# TODO(karan): same _region_name private attr access as above
|
||||
region_name=instance._region_name # type: ignore[attr-defined]
|
||||
)
|
||||
)
|
||||
return client
|
||||
return result
|
||||
|
||||
|
||||
def build_option_parser(parser):
|
||||
def build_option_parser(
|
||||
parser: argparse.ArgumentParser,
|
||||
) -> argparse.ArgumentParser:
|
||||
"""Hook to add global options."""
|
||||
parser.add_argument(
|
||||
'--os-baremetal-api-version',
|
||||
@@ -101,9 +114,9 @@ def build_option_parser(parser):
|
||||
return parser
|
||||
|
||||
|
||||
def _get_environment_version(default):
|
||||
def _get_environment_version(default: str) -> str:
|
||||
global OS_BAREMETAL_API_LATEST
|
||||
env_value = utils.env('OS_BAREMETAL_API_VERSION')
|
||||
env_value: str | None = utils.env('OS_BAREMETAL_API_VERSION')
|
||||
if not env_value:
|
||||
env_value = default
|
||||
if env_value == 'latest':
|
||||
@@ -122,7 +135,14 @@ class ReplaceLatestVersion(argparse.Action):
|
||||
replaces "latest" with the latest known version, and sets the global
|
||||
OS_BAREMETAL_API_LATEST flag appropriately.
|
||||
"""
|
||||
def __call__(self, parser, namespace, values, option_string=None):
|
||||
# base Action.__call__ accepts str | Sequence[Any] | None; narrowed here
|
||||
def __call__( # type: ignore[override]
|
||||
self,
|
||||
parser: argparse.ArgumentParser,
|
||||
namespace: argparse.Namespace,
|
||||
values: str,
|
||||
option_string: str | None = None,
|
||||
) -> None:
|
||||
global OS_BAREMETAL_API_LATEST
|
||||
if values == 'latest':
|
||||
values = LATEST_VERSION
|
||||
|
||||
@@ -39,4 +39,5 @@ files = [
|
||||
"ironicclient/client.py",
|
||||
"ironicclient/shell.py",
|
||||
"ironicclient/__init__.py",
|
||||
"ironicclient/osc/plugin.py",
|
||||
]
|
||||
Reference in New Issue
Block a user