Source code for dispel.processing
"""Processing functionality."""
from typing import Iterable, List, Union
from dispel.data.core import Reading
from dispel.processing.core import ProcessingStep
from dispel.processing.data_trace import DataTrace
from dispel.utils import raise_multiple_errors
ProcessingStepsType = Union[ProcessingStep, Iterable[ProcessingStep]]
[docs]
def process(reading: Reading, steps: ProcessingStepsType, **kwargs) -> DataTrace:
r"""Perform processing steps on a reading.
Parameters
----------
reading
The reading to be processed.
steps
An iterable of :class:`~dispel.processing.core.ProcessingStep`\ s to be applied to
the ``reading`` or a single processing step to be applied.
kwargs
Additional named arguments are passed to the
:meth:`~dispel.processing.core.ProcessingStep.process` function.
Returns
-------
DataTrace
The data trace corresponding to the provided reading after applying the
processing steps.
"""
if isinstance(steps, ProcessingStep):
steps = [steps]
accumulated_errors: List[Exception] = []
trace = DataTrace.from_reading(reading)
for step in steps:
for output in step.process(reading, **kwargs):
error = trace.populate(output)
if error:
accumulated_errors.append(error)
raise_multiple_errors(accumulated_errors)
return trace