Better error when calling len() on a reactive expression #1033
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #954
The suggestion in the issue was:
I am not in favor of emitting a warning and returning the non-reactive length as this sets a bit of a weird precedent (we could do the same for other parts of the Python data model we can't proxy). Instead with this PR a
TypeErroris raised with a more explicit message. Note that if in the future we decide to warn and return the non-reactive length, that PR makes it still possible.After implementing that, this test started to fail:
It turns out that:
assert l.rx.value == 2.l == 2returns a reactive expression that is truthy__bool__first and__len__second. Sincerxdid not implement__bool__and this PR added__len__with a TypeError, callingbool(<rx_obj>)(orif <rx_obj>: ...) started to emit an error.This PR resolves that by:
rx.__bool__that always returnsTruelike it used to before the PR.