From 9e9b599c285967b5426e3833fba505666a4382b3 Mon Sep 17 00:00:00 2001 From: Lili Nie Date: Sun, 1 Sep 2024 20:46:01 -0400 Subject: [PATCH] rename _normalize_user_data,and add doc --- tmt/steps/provision/mrack.py | 3 +- tmt/utils/__init__.py | 62 ++++++++++++++++++++---------------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/tmt/steps/provision/mrack.py b/tmt/steps/provision/mrack.py index d6bc76639b..9a6243535c 100644 --- a/tmt/steps/provision/mrack.py +++ b/tmt/steps/provision/mrack.py @@ -20,7 +20,6 @@ ProvisionError, ShellScript, UpdatableMessage, - _normalize_user_data, field, ) @@ -768,7 +767,7 @@ class BeakerGuestData(tmt.steps.provision.GuestSshData): metavar='KEY=VALUE', help='Optional Beaker kickstart to use when provisioning the guest.', multiple=True, - normalize=_normalize_user_data) + normalize=tmt.utils.normalize_dict) @dataclasses.dataclass diff --git a/tmt/utils/__init__.py b/tmt/utils/__init__.py index fcce41fe8b..1e31b6099f 100644 --- a/tmt/utils/__init__.py +++ b/tmt/utils/__init__.py @@ -78,34 +78,6 @@ from tmt._compat.typing import Self, TypeAlias -def _normalize_user_data( - key_address: str, - raw_value: Any, - logger: tmt.log.Logger) -> dict[str, str]: - if isinstance(raw_value, dict): - return { - str(key).strip(): str(value).strip() for key, value in raw_value.items() - } - - if isinstance(raw_value, (list, tuple)): - user_data = {} - - for datum in raw_value: - try: - key, value = datum.split('=', 1) - - except ValueError as exc: - raise tmt.utils.NormalizationError( - key_address, datum, 'a KEY=VALUE string') from exc - - user_data[key.strip()] = value.strip() - - return user_data - - raise tmt.utils.NormalizationError( - key_address, value, 'a dictionary or a list of KEY=VALUE strings') - - def configure_optional_constant(default: Optional[int], envvar: str) -> Optional[int]: """ Deduce the actual value of a global constant which may be left unset. @@ -5906,6 +5878,40 @@ def normalize_shell_script( raise NormalizationError(key_address, value, 'a string') +def normalize_dict( + key_address: str, + raw_value: Any, + logger: tmt.log.Logger) -> dict[str, str]: + """ + Normalize a dict-or-list-or-tuple input value. + + :param raw_value: dict, or list, or tuple. + """ + + if isinstance(raw_value, dict): + return { + str(key).strip(): str(value).strip() for key, value in raw_value.items() + } + + if isinstance(raw_value, (list, tuple)): + user_data = {} + + for datum in raw_value: + try: + key, value = datum.split('=', 1) + + except ValueError as exc: + raise tmt.utils.NormalizationError( + key_address, datum, 'a KEY=VALUE string') from exc + + user_data[key.strip()] = value.strip() + + return user_data + + raise tmt.utils.NormalizationError( + key_address, value, 'a dictionary or a list of KEY=VALUE strings') + + class NormalizeKeysMixin(_CommonBase): """ Mixin adding support for loading fmf keys into object attributes.