made formatter a transformer derivation

This commit is contained in:
Matthias Bisping 2022-03-31 15:26:30 +02:00
parent 479afbcd34
commit 726298b155
5 changed files with 23 additions and 8 deletions

View File

@ -1,13 +1,13 @@
from funcy import rcompose
from image_prediction.formatter.formatter import Formatter
from image_prediction.transformer.transformer import Transformer
class FormatterCompositor(Formatter):
class TransformerCompositor(Transformer):
def __init__(self, formatter: Formatter, *formatters: Formatter):
def __init__(self, formatter: Transformer, *formatters: Transformer):
formatters = (formatter, *formatters)
self.pipe = rcompose(*formatters)
def format(self, obj):
def transform(self, obj):
return self.pipe(obj)

View File

@ -1,10 +1,15 @@
import abc
from image_prediction.transformer.transformer import Transformer
class Formatter(abc.ABC):
class Formatter(Transformer):
@abc.abstractmethod
def format(self, obj):
raise NotImplementedError
def transform(self, obj):
return self.format(obj)
def __call__(self, obj):
return self.format(obj)

View File

View File

@ -0,0 +1,10 @@
import abc
class Transformer(abc.ABC):
@abc.abstractmethod
def transform(self, obj):
raise NotImplementedError
def __call__(self, obj):
return self.transform(obj)

View File

@ -1,15 +1,15 @@
import pytest
from image_prediction.compositor.compositor import TransformerCompositor
from image_prediction.formatter.formatters.enum import EnumFormatter
from image_prediction.formatter.formatters.identity import IdentityFormatter
from image_prediction.compositor.compositor import FormatterCompositor
def test_single_formatter(metadata):
compositor = FormatterCompositor(IdentityFormatter())
compositor = TransformerCompositor(IdentityFormatter())
assert metadata == compositor(metadata)
def test_two_formatters(metadata, metadata_formatted):
compositor = FormatterCompositor(IdentityFormatter(), EnumFormatter())
compositor = TransformerCompositor(IdentityFormatter(), EnumFormatter())
assert metadata_formatted == list(compositor(metadata))