laike9m / Cyberbrain

Python debugging, redefined.
http://bit.ly/cyberbrain-features
MIT License
2.51k stars 159 forks source link

Prevent iterators from being exhausted when recorded #129

Closed victorjzsun closed 3 years ago

victorjzsun commented 3 years ago

If we bind a variable to a generator, we parse the value from the frame using jsonencode. Just like how it serializes a list, it will exhaust the generator to serialize its values. However, the generator is the same one being used in the frame/actual execution, so when it is used after we serialize, we get a StopIteration error, since the generator has already been exhausted. You can see the StopIteration error if you run the new test on master.

My solution is to check if the value is an iterator type and if it is, just skip jsonencode and return get_repr instead, as we do for non-serializable types

laike9m commented 3 years ago

Generally LGTM. Thanks for spotting this. Waiting for tests to be fixed.

victorjzsun commented 3 years ago

Tests failing due to generators having different length reprs for different operating systems (https://github.com/alexmojaki/cheap_repr/issues/20)

laike9m commented 3 years ago

Thanks for the heads up. Alex is usually responsive, so we can wait for him to fix the issue.

sourcery-ai[bot] commented 3 years ago

Sourcery Code Quality Report

❌  Merging this PR will decrease code quality in the affected files by 0.49%.

Quality metrics Before After Change
Complexity 2.61 ⭐ 2.68 ⭐ 0.07 👎
Method Length 31.14 ⭐ 32.00 ⭐ 0.86 👎
Working memory 4.95 ⭐ 5.00 ⭐ 0.05 👎
Quality 87.00% 86.51% -0.49% 👎
Other metrics Before After Change
Lines 235 242 7
Changed files Quality Before Quality After Quality Change
cyberbrain/utils.py 87.00% ⭐ 86.51% ⭐ -0.49% 👎

Here are some functions in these files that still need a tune-up:

File Function Complexity Length Working Memory Quality Recommendation

Legend and Explanation

The emojis denote the absolute quality of the code:

The 👍 and 👎 indicate whether the quality has improved or gotten worse with this pull request.


Please see our documentation here for details on how these metrics are calculated.

We are actively working on this report - lots more documentation and extra metrics to come!

Help us improve this quality report!