From: Scott Gasch Date: Tue, 18 Oct 2022 06:03:38 +0000 (-0700) Subject: Make DeferredOperand handle sets, dirs, dels transparently by passing X-Git-Url: https://wannabe.guru.org/gitweb/?a=commitdiff_plain;h=45a6e3537bfe25b25aac96143ebc1e1fdf822970;p=pyutils.git Make DeferredOperand handle sets, dirs, dels transparently by passing them along to the wrapped result. --- diff --git a/src/pyutils/parallelize/deferred_operand.py b/src/pyutils/parallelize/deferred_operand.py index 8d5c30c..5bb823f 100644 --- a/src/pyutils/parallelize/deferred_operand.py +++ b/src/pyutils/parallelize/deferred_operand.py @@ -181,5 +181,20 @@ class DeferredOperand(ABC, Generic[T]): def __float__(self) -> float: return float(DeferredOperand.resolve(self)) - def __getattr__(self, method_name): - return getattr(DeferredOperand.resolve(self), method_name) + def __getattr__(self, name): + return getattr(DeferredOperand.resolve(self), name) + + def __setattr__(self, name, value): + # subclass setting its own properties + if name in set(['id', 'wrapped_future']): + object.__setattr__(self, name, value) + return + + # otherwise operate on the wrapped result + DeferredOperand.resolve(self).__setattr__(name, value) + + def __delattr__(self, name): + return delattr(DeferredOperand.resolve(self), name) + + def __dir__(self): + return dir(DeferredOperand.resolve(self))