Skip to content

Preprocessor Interface

apple_health_parser.interfaces.preprocessor_interface.PreprocessorInterface

Bases: ABC

Source code in apple_health_parser/interfaces/preprocessor_interface.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
class PreprocessorInterface(ABC):
    def __init__(
        self,
        data: ParsedData,
        year: int,
        source: str | None = None,
        operation: str | None = None,
        heatmap: bool = False,
    ) -> None:
        """
        Initialize the Preprocessor object.

        Prepare the DataFrame for the plot.

        Args:
            data (ParsedData): ParsedData object
            year (int, optional): Year, defaults to date.today().year
            source (str | None, optional): Source, defaults to None
            operation (str | None, optional): Operation, defaults to None
            heatmap (bool, optional): Flag to plot a heatmap, defaults to False
        """
        self.src = source
        self.data = data
        self.year = year
        self.oper = operation
        self.hmap = heatmap
        self.flag = data.flag
        self._validate()

    @property
    def meta(self) -> Metadata:
        """
        Metadata for the flag.

        Raises:
            MissingFlag: Missing flag metadata

        Returns:
            Metadata: Metadata for the flag
        """
        metadata = FLAG_METADATA.get(self.flag)
        if metadata is None:
            raise MissingFlag(self.flag)
        return metadata

    def _validate(self) -> None:
        """
        Validate the flag, operation, and year.

        Raises:
            MissingYear: Missing year in the records
            InvalidOperation: Invalid operation
            InvalidHeatmapOperation: Invalid operation for heatmap
            InvalidSource: Invalid source name
        """
        years = self.data.records.start_date.dt.year.unique().tolist()
        if self.year not in years:
            raise MissingYear(self.year, years)

        if self.oper is not None:
            if self.oper not in OPERATIONS:
                raise InvalidOperation(self.oper)
        else:
            if self.hmap:
                raise InvalidHeatmapOperation

        sources = self.data.records.source_name.unique()
        if self.src and self.src not in sources:
            raise InvalidSource(self.src, sources)

    @abstractmethod
    def get_heatmap(self, data: pd.DataFrame) -> pd.DataFrame:
        pass

    @abstractmethod
    def get_dataframe(self) -> pd.DataFrame:
        pass

meta: Metadata property

Metadata for the flag.

Raises:

Type Description
MissingFlag

Missing flag metadata

Returns:

Name Type Description
Metadata Metadata

Metadata for the flag

__init__(data, year, source=None, operation=None, heatmap=False)

Initialize the Preprocessor object.

Prepare the DataFrame for the plot.

Parameters:

Name Type Description Default
data ParsedData

ParsedData object

required
year int

Year, defaults to date.today().year

required
source str | None

Source, defaults to None

None
operation str | None

Operation, defaults to None

None
heatmap bool

Flag to plot a heatmap, defaults to False

False
Source code in apple_health_parser/interfaces/preprocessor_interface.py
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
def __init__(
    self,
    data: ParsedData,
    year: int,
    source: str | None = None,
    operation: str | None = None,
    heatmap: bool = False,
) -> None:
    """
    Initialize the Preprocessor object.

    Prepare the DataFrame for the plot.

    Args:
        data (ParsedData): ParsedData object
        year (int, optional): Year, defaults to date.today().year
        source (str | None, optional): Source, defaults to None
        operation (str | None, optional): Operation, defaults to None
        heatmap (bool, optional): Flag to plot a heatmap, defaults to False
    """
    self.src = source
    self.data = data
    self.year = year
    self.oper = operation
    self.hmap = heatmap
    self.flag = data.flag
    self._validate()