Source code for draugr.python_utilities.counter_filter

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = "heider"
__doc__ = r"""

           Created on 7/8/22
           """

__all__ = ["CounterFilter"]

from abc import ABCMeta
from collections import Counter
from typing import Optional, Iterable

from warg import drop_unused_kws, is_none_or_zero_or_negative_or_mod_zero


[docs]class CounterFilter(metaclass=ABCMeta): """ """
[docs] @drop_unused_kws def __init__( self, *, interval: Optional[int] = 1, filters: Iterable = None, verbose: bool = False ): """ :param interval: :param filters: :param verbose:""" self._counter = Counter() self._interval = interval self.filters = filters self._verbose = verbose
[docs] def filter(self, tag: str) -> bool: """ returns a boolean value, true if to be included, False if to be excluded tag is in filter if not None and within interval for inclusion :param tag: :type tag: :return: :rtype:""" is_in_filters = self.filters is None or tag in self.filters at_interval = is_none_or_zero_or_negative_or_mod_zero( self._interval, self._counter[tag] ) return is_in_filters and at_interval