SimpleLazyObject raises RuntimeError if __class__ accessed while tracing execution
|Reported by:||Owned by:||nobody|
|Cc:||Triage Stage:||Ready for checkin|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
I found the issue while trying to profile a django application with pycallgraph. The issue is referenced there: https://github.com/gak/pycallgraph/issues/92
The issue is reproduced with the following code:
import sys from django.utils.functional import SimpleLazyObject def tracer(frame, event, arg): frame.f_locals['self'].__class__ sys.settrace(tracer) SimpleLazyObject(lambda x: x) sys.settrace(None)
I wrote a failing test in tests/regressiontests/utils/functional.py. The issue is solved by defining _wrapped=None in the LazyObject class in django/utils/functional.py and this does not seems to break anything, all tests still pass.
Do you prefer one commit for test + fix as it's a small issue or separate commits? Is the test written in the right place?
I can make a pull request once this ticket is created (as the commit guidelines specify I need a ticket number in the first place to commit & reference my code). Thanks for any comment about the issue or how to proceed.
Change History (7)
comment:1 Changed 4 years ago by
|Patch needs improvement:||unset|
comment:2 Changed 4 years ago by
|Triage Stage:||Unreviewed → Ready for checkin|
|Type:||Uncategorized → Bug|