diff --git a/autopipe/models.py b/autopipe/models.py index 491a4e0..0c0cfb8 100644 --- a/autopipe/models.py +++ b/autopipe/models.py @@ -18,8 +18,9 @@ class Pipe(ABC): def name(self): raise NotImplementedError + @abstractmethod def pipe(self, data: APData) -> APData: - pass + raise NotImplementedError class Input(ABC): diff --git a/autopipe/pipe/filter_pipe.py b/autopipe/pipe/filter_pipe.py new file mode 100644 index 0000000..c595084 --- /dev/null +++ b/autopipe/pipe/filter_pipe.py @@ -0,0 +1,15 @@ +from typing import Callable +from models import Pipe, APData + + +class FilterPipe(Pipe): + def __init__(self, filter: Callable[[APData], bool]): + super().__init__() + self.filter = filter + + @property + def name(self): + return "Filter" + + def pipe(self, data: APData) -> APData: + return data if self.filter(data) else None diff --git a/autopipe/pipe/tee.py b/autopipe/pipe/tee.py new file mode 100644 index 0000000..243fcb3 --- /dev/null +++ b/autopipe/pipe/tee.py @@ -0,0 +1,16 @@ +from models import Pipe, APData + + +class TeePipe(Pipe): + def __init__(self, *outputs): + super().__init__() + self.outputs = outputs + + @property + def name(self): + return "Tee" + + def pipe(self, data: APData) -> APData: + for output in self.outputs: + output.pipe(data) + return data