blob: f611a258160bb4549bd5f30b10309b01fcd6991d [file] [log] [blame]
from typing import ( Iterable, Callable )
class Channel:
def __init__(self):
pass
def getchannel(self) -> 'Channel':
return self
def gettype(self):
return type(self)
class ChannelDescriptor:
def __init__(self, channelType: type, isReusable: bool, isSuitableForBreakpoint: bool):
self.channelType = channelType
self.isReusable = isReusable
self.isSuitableForBreakpoint = isSuitableForBreakpoint
def create_instance(self) -> Channel:
return self.channelType()
class PyIteratorChannel(Channel):
iterable : Iterable
def __init__(self):
Channel.__init__(self)
def provide_iterable(self) -> Iterable:
return self.iterable
def accept_iterable(self, iterable) -> 'PyIteratorChannel':
self.iterable = iterable
return self
class PyCallableChannel(Channel):
udf : Callable
def __init__(self):
Channel.__init__(self)
def provide_callable(self) -> Callable:
return self.udf
def accept_callable(self, udf: Callable) -> 'PyCallableChannel':
self.udf = udf
return self
@staticmethod
def concatenate(function_a: Callable, function_b: Callable):
def executable(iterable):
return function_a(function_b(iterable))
return executable
PyIteratorChannelDescriptor = ChannelDescriptor(type(PyIteratorChannel()), False, False)
PyCallableChannelDescriptor = ChannelDescriptor(type(PyCallableChannel()), False, False)