Repository navigation
feat(flask): add error tracking integration - #1038
Merged
Merged
Conversation
Contributor
posthog-python Compliance ReportDate: 2026-10-08T14:25:13.577450+00:00 ✅ All Tests Passed!121/121 tests passed Capture_V1 Tests✅ 95/95 tests passed View Details
Capture_Ai Tests✅ 5/5 tests passed View Details
Feature_Flags Tests✅ 17/17 tests passed View Details
Feature_Flags_Local_Evaluation Tests✅ 4/4 tests passed View Details
|
hpouillot
force-pushed
the
cockpit-3e09dc1306ad42b6b06a3d0b39778a60
branch
from
October 8, 2026 10:22
88e4ef9 to
0de9930
Compare
hpouillot
force-pushed
the
cockpit-3e09dc1306ad42b6b06a3d0b39778a60
branch
from
October 8, 2026 10:31
0de9930 to
1c4a8c9
Compare
PR overviewAll previously flagged issues have been addressed. No open security concerns remain on this pull request. Security reviewNo open security issues remain on this pull request. Fixed/addressed: 1 · PR risk: 0/10 |
ablaszkiewicz
approved these changes
Oct 8, 2026
3 of 5 tasks
3 of 5 tasks
eli-r-ph
pushed a commit
that referenced
this pull request
Oct 10, 2026
* feat(flask): add error tracking integration * fix(flask): use canonical exception metadata * chore(flask): type exception capture metadata * refactor(flask): expose request properties terminology * fix(flask): preserve exception privacy settings (cherry picked from commit 292855d)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
💡 Motivation and Context
Flask catches application exceptions before Python's global exception hooks can observe them, so users currently need to write explicit error handlers. This adds an idiomatic Flask extension that creates an isolated PostHog context for each request and captures unhandled exceptions through Flask's native signal without changing propagation or response behavior.
The integration keeps Flask optional, supports both direct and application-factory initialization, accepts a custom client, request filter, and extra properties, and records only bounded request metadata. Query strings, bodies, cookies, authorization, and arbitrary headers are not captured.
The integration uses the standardized internal exception metadata channel now available on
main. The canonical exception-event-metadata spec was reviewed: the Flask signal is represented as sourceflask.got_request_exception, mechanism typemiddleware, handledfalse, and levelerror.💚 How did you test it?
uv run --extra test pytest -q --timeout=30 posthog/test/integrations/test_flask_integration.py— 8 passed (post-rebase)uv run ruff format --check posthog/integrations/flask.py posthog/test/integrations/test_flask_integration.pyuv run ruff check .uv run mypy --no-site-packages --config-file mypy.ini posthog/integrations/flask.py posthog/test/integrations/test_flask_integration.py | uv run mypy-baseline filteruv run python -W error -c "import posthog; import posthog.integrations.flask"uv run make public_api_check📝 Checklist
If releasing new changes
sampo addto generate a changeset file🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Implemented with the Pi coding agent in Cockpit session
3e09dc13-06ad-42b6-b06a-3d0b39778a60. The integration uses Flask'sgot_request_exceptionsignal instead of replacing application error handlers, and disables context-manager exception capture so each unhandled exception is reported once. Canonical source, mechanism type, handled state, and level are asserted directly in tests. Flask is included only in the test extra and imported lazily at runtime.