As discussed in DiamondLightSource/aioca#45 it would appear that allowing a ca_nothing value to return False to a boolean test triggers unexpected behaviour: it turns out that Exception subclasses are expected by core Python libraries to return True when tested with __bool__.
The obvious fix is to delete the implementation of ca_nothing.__bool__ here:
|
def __bool__(self): |
|
return self.ok |
|
__nonzero__ = __bool__ # For python 2 |
but unfortunately this is a breaking change for any code which is testing
bool(value) rather than
value.ok. The only reasonable solution is probably to raise a one-shot deprecation warning when this function is called.
Fortunately I don't think the boolean test feature of ca_nothing is documented, but this still needs to be flagged as a breaking change.
As discussed in DiamondLightSource/aioca#45 it would appear that allowing a
ca_nothingvalue to returnFalseto a boolean test triggers unexpected behaviour: it turns out thatExceptionsubclasses are expected by core Python libraries to returnTruewhen tested with__bool__.The obvious fix is to delete the implementation of
ca_nothing.__bool__here:cothread/src/cothread/catools.py
Lines 103 to 105 in bb62450
bool(value)rather thanvalue.ok. The only reasonable solution is probably to raise a one-shot deprecation warning when this function is called.Fortunately I don't think the boolean test feature of
ca_nothingis documented, but this still needs to be flagged as a breaking change.