Source code for ningen.value

"""
Hold one or more values.
"""
from collections import abc
from typing import Dict
from typing import List
from typing import Optional
from typing import Sequence
from typing import Union

# pylint: disable=missing-docstring

__all__ = ["Value", "value_as_list", "values_dict"]


#: A value (or list of values) used in generating the ``ninja`` file.
#:
#: If this is a list, then ``None`` entries are silently ignored.
Value = Union[str, Sequence[Optional[str]]]


[docs]def value_as_list(value: Optional[Value]) -> List[str]: """ Given a :py:class:`Value`, return a list of non-``None`` string values, for uniform processing. """ if isinstance(value, str) or not isinstance(value, abc.Sequence): value = [value] values = [entry for entry in value if entry is not None] return values
[docs]def values_dict(values: Dict[str, Value]) -> Dict[str, List[str]]: """ Given a dictionary of :py:class:`Value`, return a dictionary of lists of strings. """ return {name: value_as_list(value) for name, value in values.items()}