Strawberry
The Strawberry integration captures errors and operations from the Strawberry GraphQL library, which can then be viewed in Sentry.
Install
To get started, install sentry-sdk
from PyPI.
pip install --upgrade sentry-sdk
Configure
Add StrawberryIntegration()
to your integrations
list:
import sentry_sdk
from sentry_sdk.integrations.strawberry import StrawberryIntegration
sentry_sdk.init(
dsn="https://examplePublicKey@o0.ingest.sentry.io/0",
enable_tracing=True,
integrations=[
StrawberryIntegration(
# Set async_execution to True if you have
# at least one async resolver
async_execution=True
),
],
)
Verify
Make sure you have all the prerequisites installed:
pip install 'strawberry-graphql[debug-server]'
pip install fastapi
Create a schema.py
file with the below content:
import strawberry
sentry_sdk.init(...) # same as above
async def resolve_hello(root) -> str:
1 / 0
return "Hello world!"
@strawberry.type
class Query:
hello: str = strawberry.field(resolver=resolve_hello)
schema = strawberry.Schema(Query)
To start the web server, run:
strawberry server schema
Navigate to http://127.0.0.1:8000/graphql in your browser. You should see the GraphiQL graphical interface.
Type query HelloQuery { hello }
into the query input field then press the
"Execute query" button. Your web server will be queried, which should result in an
exception due to the ZeroDivisionError
we've snuck into the resolve_hello
resolver.
This will create a GraphQLError
in the Issues section as well as a transaction
in the Performance section of sentry.io. It will take a couple of moments for the data to appear in sentry.io.
Options
There are several options you will get to choose from:
Synchronous vs. Asynchronous Execution
Strawberry supports both synchronous and asynchronous execution of GraphQL
queries. If you have at least one async resolver, you should initialize
StrawberryIntegration
with async_execution=True
, otherwise set it to False
.
The SDK will make a best-effort guess if async_execution
is not provided,
based on installed web frameworks.
sentry_sdk.init(
# (...) other options
integrations=[
StrawberryIntegration(
async_execution=True # or False
),
],
)
Capturing Request and Response Bodies
The Strawberry integration can capture request and response bodies
for each GraphQL error that happens. Since these may contain sensitive data,
this is the default behavior. To enable capturing request and response bodies, the
SDK needs to be initialized with the
send_default_pii option set to True
.
sentry_sdk.init(
# same options as above
send_default_pii=True,
)
Note
Since send_default_pii
is a global SDK option, setting it to True
will affect all
integrations, not just Strawberry. Please make sure to
remove sensitive data
from events before enabling this option.
Notes
Strawberry comes with a (now deprecated) built-in Sentry tracing extension that this integration is built on. To prevent duplicate traces, the Sentry SDK integration will deactivate the built-in Strawberry extension if you happen to be using both.
Supported Versions
- strawberry-graphql: 0.209.5+
- Python: 3.8+
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) to suggesting an update ("yeah, this would be better").
- Package:
- pypi:sentry-sdk
- Version:
- 1.38.0
- Repository:
- https://github.com/getsentry/sentry-python
- API Documentation:
- https://getsentry.github.io/sentry-python/