Created
December 18, 2020 15:37
-
-
Save rendarz/b4d89e135bf2e7bbdcc4eb3d9c0e7cfb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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