builtup4/bu4/transform/states/aftertransform.py

36 lines
1.2 KiB
Python

# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from typing import TypeVar
from bu4.transform.states.transformfinished import TransformFinished
from bu4.transform.states.transformstate import TransformState
from bu4.transform.targets.attarget import ATTarget
__all__ = ('AfterTransform',)
T = TypeVar('T')
class AfterTransform(TransformState[T]):
def __init__(self, state: TransformState[T], target: ATTarget[T]):
self.state = state
self.target = target
def next(self) -> TransformState[T]:
if isinstance(self.state, TransformFinished):
return self.target.given(self.state.transformed)
elif isinstance(self.state, AfterTransform):
self.state, self.target = self.state.state, ATChain(self.state.target, self.target)
else:
self.state = self.state.next()
return self
class ATChain(ATTarget[T]):
def __init__(self, target: ATTarget[T], aftertarget: ATTarget[T]):
self.target = target
self.aftertarget = aftertarget
def given(self, transformed: T) -> TransformState[T]:
return AfterTransform(self.target.given(transformed), self.aftertarget)