Source code for revscoring.datasources.meta.indexable
"""
These meta-datasources operate on :class:`revscoring.Datasource`'s that
return `list`'s and `tuple`'s
.. autoclass:: revscoring.datasources.meta.indexable.index
"""
from ..datasource import Datasource
[docs]class index(Datasource):
"""
Generates a datasource that returns the value that appears at `i`
:Parameters:
i : `int`
The index of a value to return
default : `mixed`
The value to return if no value exists at `i`. If not specified,
an IndexError will be raised
name : `str`
A name for the new datasource.
"""
def __init__(self, i, datasources, default=NotImplemented, name=None):
name = self._format_name(name, [i, default])
self.i = int(i)
self.default = default
super().__init__(name, self.process,
depends_on=[datasources])
def process(self, indexable):
try:
return indexable[self.i]
except IndexError:
if self.default is not NotImplemented:
return self.default
else:
raise