Switch usage to skip_file_prefixes instead of stacklevel when it makes sense
In most of our usages of warnings.warn (and almost every usage that relates to deprecation warnings) we want them to be associated to the first out-of-as that's the most likely location that can be adjusted to avoid the warning.
In order to achieve this goal we've historically attempted to pass a fixed stacklevel to warnings.warn which can sometimes be tricky and error prone depending on how nested and convoluted the user or third-party app offending call site might be. In other cases we've opted not to provide a stacklevel at all as determining the offending call site under all circumstances is impossible.
Well it appears that this is a problem that Python 3.12 allows frameworks to address in a better way with the introduction of warnings.warn(skip_file_prefixes: tuple[str] | None). This new feature would allow us to ensure that the proper offending call site is referenced when emitting from a deeply nested call site where stacklevel is inappropriate.
Since this is a Python 3.12+ feature I'd suggest we introduce a get_non_django_stacklevel() -> int (better name welcome) function that could be used to pass to warnings.warn(stacklevel) until we drop support for Python 3.11.
Change History
(20)
| Summary: |
Switch warnings.warn usage to skip_file_prefixes instead of stacklevel → Switch usage to skip_file_prefixes instead of stacklevel when it makes sense
|
| Keywords: |
deprecation stacklevel added
|
| Triage Stage: |
Unreviewed → Accepted
|
| Version: |
5.1 → dev
|
| Owner: |
set to Jae Hyuck Sa
|
| Status: |
new → assigned
|
| Patch needs improvement: |
set
|
| Owner: |
changed from Jae Hyuck Sa to JaeHyuckSa
|
| Owner: |
JaeHyuckSa removed
|
| Status: |
assigned → new
|
| Owner: |
set to Luna
|
| Status: |
new → assigned
|
| Owner: |
Luna removed
|
| Status: |
assigned → new
|
| Owner: |
set to VIZZARD-X
|
| Status: |
new → assigned
|
Hello Simon, as always thank you for your detailed and thorough report.
I agree with your proposal, I think this would help reducing the mistakes and overall improve the contributing experience. I'm setting this version to
devsince this new feature should target5.2at this point.