Skip to content

Commit

Permalink
rename _normalize_user_data,and add doc
Browse files Browse the repository at this point in the history
  • Loading branch information
skycastlelily committed Sep 2, 2024
1 parent 99b437f commit 9e9b599
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 30 deletions.
3 changes: 1 addition & 2 deletions tmt/steps/provision/mrack.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
ProvisionError,
ShellScript,
UpdatableMessage,
_normalize_user_data,
field,
)

Expand Down Expand Up @@ -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
Expand Down
62 changes: 34 additions & 28 deletions tmt/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit 9e9b599

Please sign in to comment.