Source code for revscoring.datasources.meta.mappers
"""
These meta-datasources operate on :class:`revscoring.Datasource`'s that
return `list`'s and apply a specific function to each item.
.. autoclass:: revscoring.datasources.meta.mappers.map
.. autoclass:: revscoring.datasources.meta.mappers.lower_case
.. autoclass:: revscoring.datasources.meta.mappers.abs
"""
from ..datasource import Datasource
absolute_value = abs
[docs]class map(Datasource):
"""
Returns a :class:`revscoring.Datasource` that applies a function over
a set of items generated by another datasource.
:Parameters:
apply : `func`
A function to apply to each item generated by `items_datasource`
items_datasource : :class:`revscoring.Datasource`
A datasource that generates a list of some item
name : `str`
A name for the datasource.
"""
def __init__(self, apply, items_datasource, name=None):
self.apply = apply
name = self._format_name(name, [apply, items_datasource])
super().__init__(name, self.process, depends_on=[items_datasource])
def process(self, items):
return [self.apply(item) for item in items]
[docs]class lower_case(map):
"""
Returns a :class:`revscoring.Datasource` that lower cases a list of `str`
returned by another datasource.
:Parameters:
strs_datasource : :class:`revscoring.Datasource`
A datasource that generates a list of `str`
name : `str`
A name for the datasource.
"""
def __init__(self, strs_datasource, name=None):
name = self._format_name(name, [strs_datasource])
super().__init__(self.lower, strs_datasource, name=name)
def lower(self, s):
return s.lower()
[docs]class abs(map):
"""
Returns a :class:`revscoring.Datasource` that converts a list of numeric
values into a list of absolute numeric values.
:Parameters:
numbers_datasource : :class:`revscoring.Datasource`
A datasource that generates a list of numeric values
name : `str`
A name for the datasource.
"""
def __init__(self, numbers_datasource, name=None):
super().__init__(absolute_value, numbers_datasource, name=name)