# Buggy code
async def start_subscription(self, data, operation_id: str, websocket: WebSocket):
    query = data["query"]
    variables = data.get("variables")
    operation_name = data.get("operation_name")

    if self.debug:
        pretty_print_graphql_operation(operation_name, query, variables)

    context = {"websocket": websocket}

    data = await subscribe(
        self.schema,
        query,
        variable_values=variables,
        operation_name=operation_name,
        context_value=context,
    )

    try:
        async for result in data:
            payload = {"data": result.data}

            if result.errors:
                payload["errors"] = [format_graphql_error(err) for err in result.errors]
            await self._send_message(websocket, GQL_DATA, payload, operation_id)
    except Exception as error:
        if not isinstance(error, GraphQLError):
            error = GraphQLError(str(error), original_error=error)

        await self._send_message(
            websocket,
            GQL_DATA,
            {"data": None, "errors": [format_graphql_error(error)]},
            operation_id,
        )

    await self._send_message(websocket, GQL_COMPLETE, None, operation_id)

    if self._keep_alive_task:
        self._keep_alive_task.cancel()

    await websocket.close()


# Traceback (AttributeError)
Traceback (most recent call last):
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/graphql/type/definition.py", line 735, in fields
fields = resolve_thunk(self._fields)
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/graphql/type/definition.py", line 293, in resolve_thunk
return thunk() if callable(thunk) else thunk
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/strawberry/type.py", line 133, in <lambda>
lambda types_replacement_map=None: _get_fields(wrapped, types_replacement_map),
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/strawberry/type.py", line 76, in _get_fields
fields[field_name] = field(
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/strawberry/field.py", line 315, in field
return field(wrap)
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/strawberry/field.py", line 171, in __call__
setattr(wrap, IS_STRAWBERRY_FIELD, True)
AttributeError: 'method' object has no attribute '_is_strawberry_field'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/ignormies/.config/JetBrains/PyCharm2020.1/scratches/scratch_7.py", line 30, in <module>
schema = strawberry.Schema(query=Query)
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/strawberry/schema.py", line 25, in __init__
super().__init__(
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/graphql/type/schema.py", line 205, in __init__
collect_referenced_types(query)
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/graphql/type/schema.py", line 382, in collect_referenced_types
for field in named_type.fields.values():
File "/usr/lib/python3.8/functools.py", line 967, in __get__
val = self.func(instance)
File "/home/ignormies/.local/share/virtualenvs/gql-bf-XGX4szKA-py3.8/lib/python3.8/site-packages/graphql/type/definition.py", line 737, in fields
raise TypeError(f"{self.name} fields cannot be resolved. {error}")
TypeError: Query fields cannot be resolved. 'method' object has no attribute '_is_strawberry_field'

Process finished with exit code 1

# Fixed code
async def start_subscription(self, data, operation_id: str, websocket: WebSocket):
    query = data["query"]
    variables = data.get("variables")
    operation_name = data.get("operation_name")

    if self.debug:
        pretty_print_graphql_operation(operation_name, query, variables)

    context = {"websocket": websocket}

    data = await self.schema.subscribe(
        query,
        variable_values=variables,
        operation_name=operation_name,
        context_value=context,
    )

    try:
        async for result in data:
            payload = {"data": result.data}

            if result.errors:
                payload["errors"] = [format_graphql_error(err) for err in result.errors]
            await self._send_message(websocket, GQL_DATA, payload, operation_id)
    except Exception as error:
        if not isinstance(error, GraphQLError):
            error = GraphQLError(str(error), original_error=error)

        await self._send_message(
            websocket,
            GQL_DATA,
            {"data": None, "errors": [format_graphql_error(error)]},
            operation_id,
        )

    await self._send_message(websocket, GQL_COMPLETE, None, operation_id)

    if self._keep_alive_task:
        self._keep_alive_task.cancel()

    await websocket.close()