36 lines
1.2 KiB
Python
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)
|