plainx-sentry 0.6.0__tar.gz → 0.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/PKG-INFO +2 -8
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/README.md +0 -6
- plainx_sentry-0.8.0/plainx/sentry/CHANGELOG.md +11 -0
- plainx_sentry-0.8.0/plainx/sentry/__init__.py +0 -0
- plainx_sentry-0.8.0/plainx/sentry/config.py +38 -0
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/plainx/sentry/templates.py +3 -2
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/pyproject.toml +5 -2
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/tests/settings.py +0 -1
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/tests/test_sentry.py +4 -3
- plainx_sentry-0.8.0/uv.lock +760 -0
- plainx_sentry-0.6.0/plainx/sentry/__init__.py +0 -3
- plainx_sentry-0.6.0/plainx/sentry/config.py +0 -20
- plainx_sentry-0.6.0/plainx/sentry/middleware.py +0 -156
- plainx_sentry-0.6.0/uv.lock +0 -257
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/.gitignore +0 -0
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/plainx/sentry/default_settings.py +0 -0
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/plainx/sentry/templates/sentry/js.html +0 -0
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/scripts/install +0 -0
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/scripts/release +0 -0
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/scripts/test +0 -0
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/tests/templates/index.html +0 -0
- {plainx_sentry-0.6.0 → plainx_sentry-0.8.0}/tests/urls.py +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plainx-sentry
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.0
|
|
4
4
|
Author-email: Dave Gaeddert <dave.gaeddert@gmail.com>
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
|
-
Requires-Dist: sentry-sdk>=2.24.0
|
|
6
|
+
Requires-Dist: sentry-sdk[opentelemetry]>=2.24.0
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
|
|
9
9
|
# plainx-sentry
|
|
@@ -20,12 +20,6 @@ INSTALLED_PACKAGES = [
|
|
|
20
20
|
# ...
|
|
21
21
|
"plainx.sentry",
|
|
22
22
|
]
|
|
23
|
-
|
|
24
|
-
MIDDLEWARE = [
|
|
25
|
-
# Put SentryMiddleware as early as possible in the middleware stack
|
|
26
|
-
"plainx.sentry.SentryMiddleware",
|
|
27
|
-
# ...
|
|
28
|
-
]
|
|
29
23
|
```
|
|
30
24
|
|
|
31
25
|
In your `base.html`, load `sentry` and include the `sentry_js` tag:
|
|
@@ -12,12 +12,6 @@ INSTALLED_PACKAGES = [
|
|
|
12
12
|
# ...
|
|
13
13
|
"plainx.sentry",
|
|
14
14
|
]
|
|
15
|
-
|
|
16
|
-
MIDDLEWARE = [
|
|
17
|
-
# Put SentryMiddleware as early as possible in the middleware stack
|
|
18
|
-
"plainx.sentry.SentryMiddleware",
|
|
19
|
-
# ...
|
|
20
|
-
]
|
|
21
15
|
```
|
|
22
16
|
|
|
23
17
|
In your `base.html`, load `sentry` and include the `sentry_js` tag:
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# plainx-sentry changelog
|
|
2
|
+
|
|
3
|
+
## [0.7.0](https://github.com/davegaeddert/plainx-sentry/releases/plainx-sentry@0.7.0) (2025-07-19)
|
|
4
|
+
|
|
5
|
+
### What's changed
|
|
6
|
+
|
|
7
|
+
- Middleware was removed in favor of using the OpenTelemetry integration and new otel instrumentation in Plain.
|
|
8
|
+
|
|
9
|
+
### Upgrade instructions
|
|
10
|
+
|
|
11
|
+
- Remove `SentryMiddleware` and `SentryWorkerMiddleware` from your `app/settings.py`.
|
|
File without changes
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import sentry_sdk
|
|
2
|
+
from opentelemetry import trace
|
|
3
|
+
from opentelemetry.propagate import set_global_textmap
|
|
4
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
5
|
+
from plain.packages import PackageConfig, register_config
|
|
6
|
+
from plain.runtime import settings
|
|
7
|
+
from sentry_sdk.integrations.opentelemetry import SentryPropagator, SentrySpanProcessor
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@register_config
|
|
11
|
+
class PlainxSentryConfig(PackageConfig):
|
|
12
|
+
label = "plainxsentry"
|
|
13
|
+
|
|
14
|
+
def ready(self):
|
|
15
|
+
if settings.SENTRY_DSN and settings.SENTRY_AUTO_INIT:
|
|
16
|
+
sentry_sdk.init(
|
|
17
|
+
settings.SENTRY_DSN,
|
|
18
|
+
release=settings.SENTRY_RELEASE,
|
|
19
|
+
environment=settings.SENTRY_ENVIRONMENT,
|
|
20
|
+
send_default_pii=settings.SENTRY_PII_ENABLED,
|
|
21
|
+
traces_sample_rate=settings.SENTRY_TRACES_SAMPLE_RATE,
|
|
22
|
+
profiles_sample_rate=settings.SENTRY_PROFILES_SAMPLE_RATE,
|
|
23
|
+
instrumenter="otel",
|
|
24
|
+
**settings.SENTRY_INIT_KWARGS,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
# Set up OpenTelemetry tracing with Sentry
|
|
28
|
+
if trace.get_tracer_provider() and not isinstance(
|
|
29
|
+
trace.get_tracer_provider(), trace.ProxyTracerProvider
|
|
30
|
+
):
|
|
31
|
+
raise RuntimeError(
|
|
32
|
+
"A tracer provider already exists. Sentry's OpenTelemetry integration requires a clean tracer provider."
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
provider = TracerProvider()
|
|
36
|
+
provider.add_span_processor(SentrySpanProcessor())
|
|
37
|
+
trace.set_tracer_provider(provider)
|
|
38
|
+
set_global_textmap(SentryPropagator())
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import sentry_sdk
|
|
2
|
+
from plain.auth import get_request_user
|
|
2
3
|
from plain.runtime import settings
|
|
3
4
|
from plain.templates import register_template_extension
|
|
4
5
|
from plain.templates.jinja.extensions import InclusionTagExtension
|
|
@@ -25,8 +26,8 @@ class SentryJSExtension(InclusionTagExtension):
|
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
if "request" in context:
|
|
28
|
-
#
|
|
29
|
-
user =
|
|
29
|
+
# Get the authenticated user from the request
|
|
30
|
+
user = get_request_user(context["request"])
|
|
30
31
|
else:
|
|
31
32
|
# Get user directly if no request (like in server error context)
|
|
32
33
|
user = context.get("user", None)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "plainx-sentry"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.8.0"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [
|
|
@@ -8,7 +8,7 @@ authors = [
|
|
|
8
8
|
]
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
10
|
dependencies = [
|
|
11
|
-
"sentry-sdk>=2.24.0",
|
|
11
|
+
"sentry-sdk[opentelemetry]>=2.24.0",
|
|
12
12
|
]
|
|
13
13
|
|
|
14
14
|
[dependency-groups]
|
|
@@ -22,6 +22,9 @@ dev = [
|
|
|
22
22
|
[tool.hatch.build.targets.wheel]
|
|
23
23
|
packages = ["plainx"]
|
|
24
24
|
|
|
25
|
+
|
|
26
|
+
[tool.plain.code.biome]
|
|
27
|
+
version = "2.1.2"
|
|
25
28
|
[build-system]
|
|
26
29
|
requires = ["hatchling"]
|
|
27
30
|
build-backend = "hatchling.build"
|
|
@@ -17,7 +17,6 @@ MIDDLEWARE = [
|
|
|
17
17
|
"plain.sessions.middleware.SessionMiddleware",
|
|
18
18
|
"plain.middleware.common.CommonMiddleware",
|
|
19
19
|
"plain.csrf.middleware.CsrfViewMiddleware",
|
|
20
|
-
"plain.auth.middleware.AuthenticationMiddleware",
|
|
21
20
|
"plain.middleware.clickjacking.XFrameOptionsMiddleware",
|
|
22
21
|
"plainx.sentry.middleware.SentryFeedbackMiddleware",
|
|
23
22
|
]
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import sentry_sdk
|
|
2
2
|
from plain.auth import get_user_model
|
|
3
|
+
from plain.auth.requests import set_request_user
|
|
3
4
|
from plain.views import TemplateView
|
|
4
5
|
|
|
5
6
|
from plainx.sentry.templatetags.sentry import sentry_js
|
|
@@ -39,7 +40,7 @@ def test_sentry_pii_enabled(settings, rf):
|
|
|
39
40
|
settings.SENTRY_PII_ENABLED = True
|
|
40
41
|
|
|
41
42
|
request = rf.get("/")
|
|
42
|
-
request
|
|
43
|
+
set_request_user(request, get_user_model()(id=1, email="test@example.com", username="test"))
|
|
43
44
|
|
|
44
45
|
assert sentry_js({"request": request}) == {
|
|
45
46
|
"sentry_js_enabled": True,
|
|
@@ -83,7 +84,7 @@ def test_sentry_pii_disabled(settings, rf):
|
|
|
83
84
|
settings.SENTRY_PII_ENABLED = False
|
|
84
85
|
|
|
85
86
|
request = rf.get("/")
|
|
86
|
-
request
|
|
87
|
+
set_request_user(request, get_user_model()(id=1, email="test@example.com", username="test"))
|
|
87
88
|
|
|
88
89
|
assert sentry_js({"request": request}) == {
|
|
89
90
|
"sentry_js_enabled": True,
|
|
@@ -104,7 +105,7 @@ def test_sentry_release_env(settings, rf):
|
|
|
104
105
|
settings.SENTRY_ENVIRONMENT = "production"
|
|
105
106
|
|
|
106
107
|
request = rf.get("/")
|
|
107
|
-
request
|
|
108
|
+
set_request_user(request, get_user_model()(id=1, email="test@example.com", username="test"))
|
|
108
109
|
|
|
109
110
|
assert sentry_js({"request": request}) == {
|
|
110
111
|
"sentry_js_enabled": True,
|