Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions gloe/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
from gloe.conditional import If, condition
from gloe.ensurer import ensure
from gloe.exceptions import UnsupportedTransformerArgException
from gloe.transformers import Transformer, MultiArgsTransformer
from gloe.transformers import Transformer
from gloe.base_transformer import BaseTransformer, PreviousTransformer
from gloe.base_transformer import TransformerException
from gloe.async_transformer import AsyncTransformer, MultiArgsAsyncTransformer
from gloe.async_transformer import AsyncTransformer

__version__ = "0.7.0"

Expand All @@ -33,5 +33,3 @@

setattr(Transformer, "__rshift__", _compose_nodes)
setattr(AsyncTransformer, "__rshift__", _compose_nodes)
setattr(MultiArgsTransformer, "__rshift__", _compose_nodes)
setattr(MultiArgsAsyncTransformer, "__rshift__", _compose_nodes)
135 changes: 36 additions & 99 deletions gloe/_composition_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
from inspect import Signature
from typing import TypeVar, Any, Optional, Union

from gloe.async_transformer import AsyncTransformer, MultiArgsAsyncTransformer
from gloe.async_transformer import AsyncTransformer
from gloe.base_transformer import BaseTransformer
from gloe.gateways._parallel import _Parallel, _ParallelAsync
from gloe.transformers import Transformer, MultiArgsTransformer
from gloe.transformers import Transformer
from gloe._typing_utils import _match_types, _specify_types
from gloe.exceptions import UnsupportedTransformerArgException

Expand Down Expand Up @@ -76,55 +76,26 @@ def __len__(self):
new_transformer: Optional[BaseTransformer] = None
if is_transformer(transformer1) and is_transformer(transformer2):

if isinstance(transformer1, MultiArgsTransformer):
class NewTransformer1(BaseNewTransformer, Transformer[_In, _NextOut]):
def __init__(self):
super().__init__()
self._flow = transformer1._flow + transformer2._flow

class NewMultiArgsTransformer(BaseNewTransformer, MultiArgsTransformer):
def __init__(self):
super().__init__()
self._flow = transformer1._flow + transformer2._flow
def transform(self, data):
return None

def transform(self, data):
return None

new_transformer = NewMultiArgsTransformer()

else:

class NewTransformer1(BaseNewTransformer, Transformer[_In, _NextOut]):
def __init__(self):
super().__init__()
self._flow = transformer1._flow + transformer2._flow

def transform(self, data):
return None

new_transformer = NewTransformer1()
new_transformer = NewTransformer1()
else:

if isinstance(transformer1, MultiArgsAsyncTransformer):

class NewMultiArgsAsyncTransformer(
BaseNewTransformer, MultiArgsAsyncTransformer
):
def __init__(self):
super().__init__()
self._flow = transformer1._flow + transformer2._flow

async def transform_async(self, data):
return None

new_transformer = NewMultiArgsAsyncTransformer()
else:

class NewTransformer2(BaseNewTransformer, AsyncTransformer[_In, _NextOut]):
def __init__(self):
super().__init__()
self._flow = transformer1._flow + transformer2._flow
class NewTransformer2(BaseNewTransformer, AsyncTransformer[_In, _NextOut]):
def __init__(self):
super().__init__()
self._flow = transformer1._flow + transformer2._flow

async def transform_async(self, data):
return None
async def transform_async(self, data):
return None

new_transformer = NewTransformer2()
new_transformer = NewTransformer2()

new_transformer.__class__.__name__ = transformer2.__class__.__name__
new_transformer._label = transformer2.label
Expand Down Expand Up @@ -157,67 +128,33 @@ def __len__(self):

if is_transformer(incident_transformer) and is_transformer(receiving_transformers):

if isinstance(incident_transformer, MultiArgsTransformer):
class NewTransformer1(BaseNewTransformer, Transformer[_In, tuple[Any, ...]]):
def __init__(self):
super().__init__()
self._flow = incident_transformer._flow + [
_Parallel(*receiving_transformers)
]

class NewMultiArgsTransformer(BaseNewTransformer, MultiArgsTransformer):
def __init__(self):
super().__init__()
self._flow = incident_transformer._flow + [
_Parallel(*receiving_transformers)
]
def transform(self, data):
return None

def transform(self, data):
return None

new_transformer = NewMultiArgsTransformer()
else:

class NewTransformer1(
BaseNewTransformer, Transformer[_In, tuple[Any, ...]]
):
def __init__(self):
super().__init__()
self._flow = incident_transformer._flow + [
_Parallel(*receiving_transformers)
]

def transform(self, data):
return None

new_transformer = NewTransformer1()
new_transformer = NewTransformer1()

else:

if isinstance(incident_transformer, MultiArgsAsyncTransformer):

class NewMultiArgsAsyncTransformer(
BaseNewTransformer, MultiArgsAsyncTransformer
):
def __init__(self):
super().__init__()
self._flow = incident_transformer._flow + [
_ParallelAsync(*receiving_transformers)
]

async def transform_async(self, data):
return None

new_transformer = NewMultiArgsAsyncTransformer()
else:

class NewTransformer2(
BaseNewTransformer, AsyncTransformer[_In, tuple[Any, ...]]
):
def __init__(self):
super().__init__()
self._flow = incident_transformer._flow + [
_ParallelAsync(*receiving_transformers)
]
class NewTransformer2(
BaseNewTransformer, AsyncTransformer[_In, tuple[Any, ...]]
):
def __init__(self):
super().__init__()
self._flow = incident_transformer._flow + [
_ParallelAsync(*receiving_transformers)
]

async def transform_async(self, data):
return None
async def transform_async(self, data):
return None

new_transformer = NewTransformer2()
new_transformer = NewTransformer2()

# new_transformer._previous = cast(Transformer, receiving_transformers)
new_transformer.__class__.__name__ = "Converge"
Expand Down
111 changes: 13 additions & 98 deletions gloe/async_transformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,13 +106,23 @@ def copy(

@overload
async def __call__(self: "AsyncTransformer[None, _Out]") -> _Out:
return await _execute_async_flow(self._flow, None)
pass

@overload
async def __call__(
self: "AsyncTransformer[tuple[Unpack[Args]], _Out]", *args: Unpack[Args]
) -> _Out:
pass

@overload
async def __call__(self, data: _In) -> _Out:
return await _execute_async_flow(self._flow, data)
pass

async def __call__(self, data=None):
async def __call__(self, *data):
if len(data) == 0:
return await _execute_async_flow(self._flow, None)
if len(data) == 1:
return await _execute_async_flow(self._flow, data[0])
return await _execute_async_flow(self._flow, data)

@overload
Expand Down Expand Up @@ -195,98 +205,3 @@ def __rshift__(

def __rshift__(self, next_node): # pragma: no cover
pass


class MultiArgsAsyncTransformer(
Generic[Unpack[Args], _Out], AsyncTransformer[tuple[Unpack[Args]], _Out]
):
@override
async def __call__( # type: ignore[override]
self: "MultiArgsAsyncTransformer[Unpack[Args], _Out]", *data: Unpack[Args]
) -> _Out:
return await _execute_async_flow(self._flow, data)

@overload
def __rshift__(
self, next_node: BaseTransformer[_Out, _NextOut]
) -> "MultiArgsAsyncTransformer[Unpack[Args], _NextOut]":
pass

@overload
def __rshift__(
self,
next_node: tuple[BaseTransformer[_Out, _NextOut], BaseTransformer[_Out, _O2]],
) -> "MultiArgsAsyncTransformer[Unpack[Args], tuple[_NextOut, _O2]]":
pass

@overload
def __rshift__(
self,
next_node: tuple[
BaseTransformer[_Out, _NextOut],
BaseTransformer[_Out, _O2],
BaseTransformer[_Out, _O3],
],
) -> "MultiArgsAsyncTransformer[Unpack[Args], tuple[_NextOut, _O2, _O3]]":
pass

@overload
def __rshift__(
self,
next_node: tuple[
BaseTransformer[_Out, _NextOut],
BaseTransformer[_Out, _O2],
BaseTransformer[_Out, _O3],
BaseTransformer[_Out, _O4],
],
) -> "MultiArgsAsyncTransformer[Unpack[Args], tuple[_NextOut, _O2, _O3, _O4]]":
pass

@overload
def __rshift__(
self,
next_node: tuple[
BaseTransformer[_Out, _NextOut],
BaseTransformer[_Out, _O2],
BaseTransformer[_Out, _O3],
BaseTransformer[_Out, _O4],
BaseTransformer[_Out, _O5],
],
) -> "MultiArgsAsyncTransformer[Unpack[Args], tuple[_NextOut, _O2, _O3, _O4, _O5]]":
pass

@overload
def __rshift__(
self,
next_node: tuple[
BaseTransformer[_Out, _NextOut],
BaseTransformer[_Out, _O2],
BaseTransformer[_Out, _O3],
BaseTransformer[_Out, _O4],
BaseTransformer[_Out, _O5],
BaseTransformer[_Out, _O6],
],
) -> """MultiArgsAsyncTransformer[
Unpack[Args], tuple[_NextOut, _O2, _O3, _O4, _O5, _O6]
]""":
pass

@overload
def __rshift__(
self,
next_node: tuple[
BaseTransformer[_Out, _NextOut],
BaseTransformer[_Out, _O2],
BaseTransformer[_Out, _O3],
BaseTransformer[_Out, _O4],
BaseTransformer[_Out, _O5],
BaseTransformer[_Out, _O6],
BaseTransformer[_Out, _O7],
],
) -> """MultiArgsAsyncTransformer[
Unpack[Args], tuple[_NextOut, _O2, _O3, _O4, _O5, _O6, _O7]
]""":
pass

def __rshift__(self, next_node): # pragma: no cover
pass
Loading
Loading