Skip to content

Instantly share code, notes, and snippets.

@rendarz
Created December 18, 2020 15:37
Show Gist options
  • Save rendarz/b4d89e135bf2e7bbdcc4eb3d9c0e7cfb to your computer and use it in GitHub Desktop.
Save rendarz/b4d89e135bf2e7bbdcc4eb3d9c0e7cfb to your computer and use it in GitHub Desktop.
class WrapperBase(abc.ABC):
def __init__(self, receiver_weak):
self.receiverWeak = receiver_weak
def __repr__(self):
return "<Wrapper: {receiver_weak}>".format(receiver_weak=self.receiverWeak)
def call(self, *args, **kwargs):
receiver = self.receiverWeak()
if receiver is not None:
result = receiver(*args, **kwargs)
return (True, result)
return (False, None)
def isAlive(self):
return self.receiverWeak() is not None
@abc.abstractmethod
def emit(self, *args, **kwargs):
pass
class WrapperBase_Method(WrapperBase):
def __init__(self, receiver_weak, method_name:str):
super().__init__(receiver_weak=receiver_weak)
self.methodName = method_name
def __repr__(self):
return "<WrapperMethod/{method_name}: {receiver_weak}>" \
.format(method_name=self.methodName, receiver_weak=self.receiverWeak)
def call(self, *args, **kwargs):
receiver = self.receiverWeak()
if receiver is not None:
method = getattr(receiver, self.methodName)
if method is not None and callable(method):
result = method(*args, **kwargs)
return (True, result)
return (False, None)
class WrapperNoInfo(WrapperBase):
def __init__(self, receiver_weak):
super().__init__(receiver_weak=receiver_weak)
def emit(self, *args, **kwargs):
return self.call(*args, **kwargs)
class WrapperWithInfo(WrapperBase):
def __init__(self, receiver_weak, info):
super().__init__(receiver_weak=receiver_weak)
self.info = info
def emit(self, *args, **kwargs):
return self.call(self.info, *args, **kwargs)
class WrapperZero(WrapperBase):
def __init__(self, receiver_weak):
super().__init__(receiver_weak=receiver_weak)
def emit(self, *args, **kwargs):
return self.call()
#=============
class WrapperNoInfo_Method(WrapperBase_Method):
def __init__(self, receiver_weak, method_name):
super().__init__(receiver_weak=receiver_weak, method_name=method_name)
def emit(self, *args, **kwargs):
return self.call(*args, **kwargs)
class WrapperWithInfo_Method(WrapperBase_Method):
def __init__(self, receiver_weak, method_name, info):
super().__init__(receiver_weak=receiver_weak, method_name=method_name)
self.info = info
def emit(self, *args, **kwargs):
return self.call(self.info, *args, **kwargs)
class WrapperZero_Method(WrapperBase_Method):
def __init__(self, receiver_weak, method_name):
super().__init__(receiver_weak=receiver_weak, method_name=method_name)
def emit(self, *args, **kwargs):
return self.call()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment