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 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) formatters = (formatter, *formatters)
self.pipe = rcompose(*formatters) self.pipe = rcompose(*formatters)
def format(self, obj): def transform(self, obj):
return self.pipe(obj) return self.pipe(obj)

View File

@ -1,10 +1,15 @@
import abc import abc
from image_prediction.transformer.transformer import Transformer
class Formatter(abc.ABC):
class Formatter(Transformer):
@abc.abstractmethod @abc.abstractmethod
def format(self, obj): def format(self, obj):
raise NotImplementedError raise NotImplementedError
def transform(self, obj):
return self.format(obj)
def __call__(self, obj): def __call__(self, obj):
return self.format(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 import pytest
from image_prediction.compositor.compositor import TransformerCompositor
from image_prediction.formatter.formatters.enum import EnumFormatter from image_prediction.formatter.formatters.enum import EnumFormatter
from image_prediction.formatter.formatters.identity import IdentityFormatter from image_prediction.formatter.formatters.identity import IdentityFormatter
from image_prediction.compositor.compositor import FormatterCompositor
def test_single_formatter(metadata): def test_single_formatter(metadata):
compositor = FormatterCompositor(IdentityFormatter()) compositor = TransformerCompositor(IdentityFormatter())
assert metadata == compositor(metadata) assert metadata == compositor(metadata)
def test_two_formatters(metadata, metadata_formatted): def test_two_formatters(metadata, metadata_formatted):
compositor = FormatterCompositor(IdentityFormatter(), EnumFormatter()) compositor = TransformerCompositor(IdentityFormatter(), EnumFormatter())
assert metadata_formatted == list(compositor(metadata)) assert metadata_formatted == list(compositor(metadata))