Pyramid

Learn about using Sentry with Pyramid.

The Pyramid integration adds support for the Pyramid Web Framework.

Install sentry-sdk from PyPI:

Copied
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.

Copied
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,
)

Copied
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.

  • 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 to True.

  • 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:

Copied
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:

    Copied
    config.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 set transaction_style="route_pattern"
    • myroute if you set transaction_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.

Help improve this content
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").