Skip to content

Add Python integration docs for Strawberry #8085

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 22 commits into from
Oct 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
0f4b090
add to table
sentrivana Sep 29, 2023
3c72a35
fixes
sentrivana Sep 29, 2023
1226907
wording
sentrivana Sep 29, 2023
21b7c80
style(lint): Auto commit lint changes
getsantry[bot] Sep 29, 2023
a3a61cc
Update src/platforms/python/common/integrations/index.mdx
lizokm Oct 2, 2023
d99e1be
style(lint): Auto commit lint changes
getsantry[bot] Oct 2, 2023
4f8c3c7
Update src/platforms/python/common/integrations/strawberry/index.mdx
lizokm Oct 2, 2023
a147ac1
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 3, 2023
f28210d
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 3, 2023
91a60ca
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 3, 2023
f1765b7
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 3, 2023
7cecd4a
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 3, 2023
8e8092d
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 3, 2023
cd42036
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 3, 2023
911a6ec
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 3, 2023
8312897
update
sentrivana Oct 3, 2023
c03d01f
merge integrations/index
sentrivana Oct 3, 2023
6be14ae
style(lint): Auto commit lint changes
getsantry[bot] Oct 3, 2023
40845be
merge
sentrivana Oct 3, 2023
7eb8072
typo
sentrivana Oct 3, 2023
4a61527
Update src/platforms/python/common/integrations/strawberry/index.mdx
sentrivana Oct 4, 2023
9d61090
apply feedback
sentrivana Oct 4, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions src/platforms/python/common/integrations/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,12 @@ The Sentry SDK uses Integrations to hook into the functionality of popular libra

## GraphQL

| | **Auto enabled** |
| ----------------------------------------------------------------------------------------------------------------- | :--------------: |
| <linkWithPlatformIcon platform="python.graphql" label="Ariadne" url="/platforms/python/integrations/ariadne" /> | |
| <linkWithPlatformIcon platform="python.graphql" label="GQL" url="/platforms/python/integrations/gql" /> | |
| <linkWithPlatformIcon platform="python.graphql" label="Graphene" url="/platforms/python/integrations/graphene" /> | |
| | **Auto enabled** |
| ---------------------------------------------------------------------------------------------------------------------- | :--------------: |
| <linkWithPlatformIcon platform="python.graphql" label="Ariadne" url="/platforms/python/integrations/ariadne" /> | |
| <linkWithPlatformIcon platform="python.graphql" label="GQL" url="/platforms/python/integrations/gql" /> | |
| <linkWithPlatformIcon platform="python.graphql" label="Graphene" url="/platforms/python/integrations/graphene" /> | |
| <linkWithPlatformIcon platform="python.graphql" label="Strawberry" url="/platforms/python/integrations/strawberry/" /> | |

## RPC

Expand Down
139 changes: 139 additions & 0 deletions src/platforms/python/common/integrations/strawberry/index.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
---
title: Strawberry
description: "Learn how to import the Strawberry GraphQL integration and how it captures GraphQL errors and spans."
---

The Strawberry integration captures errors and operations from the
[Strawberry GraphQL library](https://strawberry.rocks/), which can then be viewed
in [Sentry](https://sentry.io).

## Install

To get started, install `sentry-sdk` from PyPI.

```bash
pip install --upgrade sentry-sdk
```

## Configure

Add `StrawberryIntegration()` to your `integrations` list:

<SignInNote />

```python
import sentry_sdk
from sentry_sdk.integrations.strawberry import StrawberryIntegration

sentry_sdk.init(
dsn="___PUBLIC_DSN___",
# Set traces_sample_rate to 1.0 to capture 100%
# of transactions for performance monitoring.
traces_sample_rate=1.0,
integrations=[
# Set async_execution to True if you have at least one async resolver
StrawberryIntegration(async_execution=True),
],
)
```

## Verify

Make sure you have all the prerequisites installed:

```bash
pip install 'strawberry-graphql[debug-server]'
pip install fastapi
```

Create a `schema.py` file with the below content:

```python
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:

```bash
strawberry server schema
```

Navigate to [http://127.0.0.1:8000/graphql](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](https://sentry.io). It will take a couple of moments for the data to appear in [sentry.io](https://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.

```python
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](https://docs.sentry.io/platforms/python/configuration/options/#send-default-pii) option set to `True`.

```python
sentry_sdk.init(
# same options as above
send_default_pii=True,
)
```

<Alert level="warning" title="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](/platforms/python/data-management/sensitive-data/)
from events before enabling this option.

</Alert>

## Notes

Strawberry comes with a (now deprecated) built-in
[Sentry tracing extension](https://strawberry.rocks/docs/extensions/sentry-tracing)
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+