Source code for isaricanalytics.isaric_transformations
from __future__ import annotations
__all__ = [
"MISSING_ATTRIBUTE_STATUS",
"attribute_status_fill",
"values_strip_missing",
]
# -- IMPORTS --
# -- Standard libraries --
from enum import Enum
# -- 3rd party libraries --
# -- Internal libraries --
[docs]
class MISSING_ATTRIBUTE_STATUS(Enum):
# Unknown
UNKNOWN = "UNK"
# No information
NO_INFORMATION = "NI"
# Not asked
NOT_ASKED = "NASK"
# Not applicable
NOT_APPLICABLE = "NA"
[docs]
def attribute_status_fill(field: str) -> str | None:
""":py:class:`str` or :py:class:`NoneType` : Infer attribute status if it is missing.
Parameters
----------
field : str
Attribute status field.
Returns
-------
str or None
The original status field if it is one of the values:
* ``'UNK'`` - unknown
* ``'NI'`` - no information
* ``'NASK'`` - not asked
* ``'NA'`` - not applicable
or ``'VAL'`` if it is non-null but different from the above, otherwise
``None``.
Examples
--------
>>> attribute_status_fill("UNK")
'UNK'
>>> attribute_status_fill("NI")
'NI'
>>> attribute_status_fill("NASK")
'NASK'
>>> attribute_status_fill("NA")
'NA'
>>> attribute_status_fill("XYZ")
'VAL'
>>> attribute_status_fill(None)
>>>
""" # noqa : E501
if field is None:
return None
match field:
case (
MISSING_ATTRIBUTE_STATUS.UNKNOWN.value
| MISSING_ATTRIBUTE_STATUS.NO_INFORMATION.value
| MISSING_ATTRIBUTE_STATUS.NOT_ASKED.value
| MISSING_ATTRIBUTE_STATUS.NOT_APPLICABLE.value
):
return field
case _:
return "VAL"
[docs]
def values_strip_missing(field: str) -> str | None:
""":py:class:`str` or :py:class:`NoneType` : Strip missing attribute status field.
Parameters
----------
field : str
Attribute status field.
Returns
-------
str or None
Null if it is one of the values:
* ``'UNK'`` - unknown
* ``'NI'`` - no information
* ``'NASK'`` - not asked
* ``'NA'`` - not applicable
and ``None`` otherwise.
Examples
--------
>>> values_strip_missing("UNK")
>>>
>>> values_strip_missing("NI")
>>>
>>> values_strip_missing("NASK")
>>>
>>> values_strip_missing("NA")
>>>
>>> values_strip_missing("XYZ")
'XYZ'
>>> values_strip_missing(None)
>>>
""" # noqa : E501
match field:
case (
MISSING_ATTRIBUTE_STATUS.UNKNOWN.value
| MISSING_ATTRIBUTE_STATUS.NO_INFORMATION.value
| MISSING_ATTRIBUTE_STATUS.NOT_ASKED.value
| MISSING_ATTRIBUTE_STATUS.NOT_APPLICABLE.value
):
return None
case _:
return field
if __name__ == "__main__": # pragma: no cover
# Doctest the module from the project root using
#
# PYTHONPATH="isaricanalytics" python3 -m doctest -v isaricanalytics/isaric_transformations.py # noqa : E501
#
import doctest
doctest.testmod()