Skip to content
Snippets Groups Projects
dmpflagger.py 1.32 KiB
Newer Older
David Schäfer's avatar
David Schäfer committed
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import pandas as pd

from .baseflagger import BaseFlagger
David Schäfer's avatar
David Schäfer committed

class FlagFields:
    FLAG = "quality_flag"
    CAUSE = "quality_cause"
    COMMENT = "quality_comment"


class Flags:
    OK = "OK"
    DOUBTFUL = "DOUBTFUL"
    BAD = "BAD"

Bert Palm's avatar
Bert Palm committed
    @staticmethod
    def isValid(flag):
        return flag in [Flags.OK, Flags.DOUBTFUL, Flags.BAD]

David Schäfer's avatar
David Schäfer committed

class DmpFlagger(BaseFlagger):
    def __init__(self, no_flag="NIL", flag="BAD"):
David Schäfer's avatar
David Schäfer committed
        super().__init__(no_flag, flag)
        self.flag_fields = [FlagFields.FLAG, FlagFields.CAUSE, FlagFields.COMMENT]

    def emptyFlags(self, data, value="NIL", **kwargs):
        columns = data.columns if isinstance(data, pd.DataFrame) else [data.name]
        columns = pd.MultiIndex.from_product([columns, self.flag_fields])
Bert Palm's avatar
Bert Palm committed
        return pd.DataFrame(data=value, columns=columns, index=data.index)
David Schäfer's avatar
David Schäfer committed

    def setFlag(self, flags, flag=Flags.BAD, cause="NIL", comment="NIL", **kwargs):
        self._isFlag(flag)
        for field, f in zip(self.flag_fields, [flag, cause, comment]):
Bert Palm's avatar
Bert Palm committed
            flags.loc[:, field] = f
David Schäfer's avatar
David Schäfer committed
        return flags

    def isFlagged(self, flags, flag=None):
Bert Palm's avatar
Bert Palm committed
        flagcol = flags.loc[:, FlagFields.FLAG].squeeze()
        return super().isFlagged(flagcol, flag)

    def _isFlag(self, flag):
Bert Palm's avatar
Bert Palm committed
        assert Flags.isValid(flag)