Source code for dispel.io.flags

"""Functions to manage flags when generating measure export."""

from typing import Any, Dict, Iterable, List

from dispel.data.core import Reading
from dispel.data.flags import Flag, FlagMixIn


[docs] def format_flag(flag_object: FlagMixIn) -> List: """Format flags objects into a string format to add to the json.""" if not isinstance(flag_object, FlagMixIn): raise TypeError( "flag_object should be an FlagMixin." f"but is of type: {type(flag_object)}" ) return [ { "id": flag.id.id, "reason": flag.reason, "stop_processing": flag.stop_processing, } for flag in flag_object.get_flags() ]
[docs] def format_all_flags(reading: Reading) -> Dict[str, Any]: """Format all flag inside a reading into a usable format.""" flags: Dict[str, Any] = { "reading": format_flag(reading), "level": {}, } for level in reading.levels: lvl_id = str(level.id) flags["level"][lvl_id] = {} level_flag = format_flag(level) if len(level_flag) > 0: flags["level"][lvl_id][lvl_id] = level_flag for data_set in level.raw_data_sets: ds_id = str(data_set.id) data_set_flag = format_flag(data_set) if len(data_set_flag) > 0: flags["level"][lvl_id][ds_id] = data_set_flag measure_set = level.measure_set for f_id in measure_set.ids(): feat_flag = format_flag(measure_set.get(f_id)) # type: ignore if len(feat_flag) > 0: flags["level"][lvl_id][str(f_id)] = feat_flag return flags
[docs] def merge_flags(flags: Iterable[Flag]) -> Dict[str, str]: """Merge multiple flags in a dictionary. Parameters ---------- flags An iterable of flags. Returns ------- Dict[str, str] A dictionary regrouping the provided flags by id and reason. """ def merge(flags: Iterable[Flag], attr: str) -> str: return ";".join(map(lambda i: str(getattr(i, attr)), flags)) return dict( flag_ids=merge(flags, "id"), flag_reasons=merge(flags, "reason"), )