Pyramid
Learn about using Sentry with Pyramid.
The Pyramid integration adds support for the Pyramid Web Framework.
Install sentry-sdk
from PyPI:
pip install --upgrade sentry-sdk
If you have the pyramid
package in your dependencies, the Pyramid integration will be enabled automatically when you initialize the Sentry SDK.
Configuration should happen as early as possible in your application's lifecycle.
import sentry_sdk
sentry_sdk.init(
dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for tracing.
traces_sample_rate=1.0,
# Set profiles_sample_rate to 1.0 to profile 100%
# of sampled transactions.
# We recommend adjusting this value in production.
profiles_sample_rate=1.0,
)
from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response
sentry_sdk.init(...) # same as above
def hello_world(request):
1 / 0 # raises an error
return Response('Hello World!')
if __name__ == '__main__':
with Configurator() as config:
config.add_route('hello', '/')
config.add_view(hello_world, route_name='hello')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 6543, app)
server.serve_forever()
When you point your browser to http://localhost:6543/ an error event will be sent to sentry.io.
uWSGI and Sentry SDK
If you're using uWSGI, note that it doesn't support threads by default. This might lead to unexpected behavior when using the Sentry SDK, from features not working properly to uWSGI workers crashing.
To enable threading support in uWSGI, make sure you have both --enable-threads
and --py-call-uwsgi-fork-hooks
on.
The Sentry Python SDK will install the Pyramid integration for all of your apps. The integration hooks into Pyramid itself, not any of your apps specifically.
The SDK will report all exceptions leading to an Internal Server Error. These two kinds of exceptions are:
- exceptions that are not handled by any exception view
- exceptions whose exception view returns a status code of 500 (Pyramid version 1.9+ only)
Request data is attached to all events: HTTP method, URL, headers, form data, JSON payloads. Sentry excludes raw bodies and multipart file uploads. Sentry also excludes personally identifiable information (such as user ids, usernames, cookies, authorization headers, IP addresses) unless you set
send_default_pii
toTrue
.Each request has a separate scope. Changes to the scope within a view, for example setting a tag, will only apply to events sent as part of the request being handled.
Logging with any logger will create breadcrumbs when the Logging integration is enabled (done by default).
By adding PyramidIntegration
to your sentry_sdk.init()
call explicitly, you can set options for PyramidIntegration
to change its behavior:
import sentry_sdk
from sentry_sdk.integrations.pyramid import PyramidIntegration
sentry_sdk.init(
# ...
integrations=[
PyramidIntegration(
transaction_style="route_pattern",
)
]
)
You can pass the following keyword arguments to PyramidIntegration()
:
transaction_style
:Copiedconfig.add_route("myroute", "/myurl/{id}") config.add_view(myfunction, route_name="myroute")
In the above code, you can set the transaction to:
/myurl/{id}
if you settransaction_style="route_pattern"
myroute
if you settransaction_style="route_name"
The default is
"route_name"
.
- Pyramid: 1.6+
- Python: 3.6+
The versions above apply for Sentry Python SDK version 2.0+
, which drops support for some legacy Python and framework versions. If you're looking to use Sentry with older Python or framework versions, consider using an SDK version from the 1.x
major line of releases.
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").