Source code for revscoring.datasources.meta.filters

"""
These meta-datasources operate on :class:`revscoring.Datasource`'s that
return `list`'s and produce sub-lists.

.. autoclass:: revscoring.datasources.meta.filters.filter

.. autoclass:: revscoring.datasources.meta.filters.regex_matching

.. autoclass:: revscoring.datasources.meta.filters.positive

.. autoclass:: revscoring.datasources.meta.filters.negative
"""
import re

from ..datasource import Datasource


[docs]class filter(Datasource): """ Generates a filtered list of items :Parameters: include : `func` A function that returns `True` when an item should be included items_datasource : :class:`revscoring.Datasource` A datasource that generates a list of items name : `str` A name for the datasource. """ def __init__(self, include, items_datasource, inverse=False, name=None): self.include = include self.inverse = inverse name = self._format_name(name, [items_datasource]) super().__init__(name, self.process, depends_on=[items_datasource]) def process(self, items): if not self.inverse: return [item for item in items if self.include(item)] else: return [item for item in items if not self.include(item)]
[docs]class regex_matching(filter): """ Generates a filtered list of items :Parameters: regex : `str` | `compiled re` A regular expression to match (case-insensitive if a `str` is provided) items_datasource : :class:`revscoring.Datasource` A datasource that generates a list of items name : `str` A name for the datasource. """ def __init__(self, regex, strs_datasource, name=None): if not hasattr(regex, "pattern"): self.regex = re.compile(regex, re.I) else: self.regex = regex super().__init__(self.regex.match, strs_datasource, name=name)
[docs]class positive(filter): """ Generates a filtered list of positive numbers from a list of numbers. :Parameters: numbers_datasource : :class:`revscoring.Datasource` A datasource that generates the subset of numbers that are positive name : `str` A name for the datasource. """ def __init__(self, numbers_datasource, name=None): super().__init__(self.is_positive, numbers_datasource, name=name) def is_positive(self, v): return v > 0
[docs]class negative(filter): """ Generates a filtered list of negative numbers from a list of numbers. :Parameters: numbers_datasource : :class:`revscoring.Datasource` A datasource that generates the subset of numbers that are negative name : `str` A name for the datasource. """ def __init__(self, numbers_datasource, name=None): super().__init__(self.is_negative, numbers_datasource, name=name) def is_negative(self, v): return v < 0

Revision Scoring

Navigation