8000 fix: Django template frame in correct position, fix #281 · etherscan-io/sentry-python@4cbc1cf · GitHub
[go: up one dir, main page]

Skip to content

Commit 4cbc1cf

Browse files
committed
fix: Django template frame in correct position, fix getsentry#281
1 parent abff4eb commit 4cbc1cf

File tree

3 files changed

+25
-4
lines changed

3 files changed

+25
-4
lines changed

sentry_sdk/integrations/django/__init__.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,20 @@ def process_django_templates(event, hint):
157157
):
158158
frame = get_template_frame_from_exception(exc_value)
159159
if frame is not None:
160-
frames = exception.setdefault("stacktrace", {}).setdefault(
161-
"frames", []
162-
)
163-
frames.append(frame)
160+
frames = exception.get("stacktrace", {}).get("frames", [])
161+
162+
for i in reversed(range(len(frames))):
163+
f = frames[i]
164+
if (
165+
f.get("function") in ("parse", "render")
166+
and f.get("module") == "django.template.base"
167+
):
168+
i += 1
169+
break
170+
else:
171+
i = len(frames)
172+
173+
frames.insert(i, frame)
164174

165175
return event
166176

sentry_sdk/integrations/django/templates.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def _get_template_frame_from_debug(debug):
6464
"pre_context": pre_context[-5:],
6565
"post_context": post_context[:5],
6666
"context_line": context_line,
67+
"in_app": True,
6768
}
6869

6970

tests/integrations/django/test_basic.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,3 +334,13 @@ def test_template_exception(sentry_init, client, capture_events):
334334
assert template_frame["lineno"] == 10
335335
assert template_frame["in_app"]
336336
assert template_frame["filename"].endswith("error.html")
337+
338+
filenames = [
339+
(f.get("function"), f.get("module")) for f in exception["stacktrace"]["frames"]
340+
]
341+
assert filenames[1] == (u"template_exc", u"tests.integrations.django.myapp.views")
342+
assert filenames[-3:] == [
343+
(u"parse", u"django.template.base"),
344+
(None, None),
345+
(u"invalid_block_tag", u"django.template.base"),
346+
]

0 commit comments

Comments
 (0)
0