strawberry
strawberry copied to clipboard
`connection_init_timeout` - "task destroyed but it is pending!"
Describe the Bug
If a gql_transport_ws connection ended before connection_init_timeout
asncio will warn:
(if there were no event loops after the task was closed)
Task was destroyed but it is pending!
task: <Task pending name='Task-5' coro=<BaseGraphQLTransportWSHandler.handle_connection_init_timeout() running at /home/nir/Desktop/opensource/forks/strawberry/strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py:75> wait_for=<Future pending cb=[Task.task_wakeup()]>>
Very annoying for tests.
repro:
async def test_connection_init_timeout():
client = WebsocketCommunicator(
GraphQLWSConsumer.as_asgi(
schema=schema,
# uncomment this and no warning will occure
# connection_init_wait_timeout=timedelta(seconds=0),
subscription_protocols=(GRAPHQL_TRANSPORT_WS_PROTOCOL,),
),
"/graphql",
subprotocols=[
GRAPHQL_TRANSPORT_WS_PROTOCOL,
],
)
await asyncio.sleep(0.1)
# Hope that the connection init timeout expired
res = await client.connect()
assert res == (True, GRAPHQL_TRANSPORT_WS_PROTOCOL)
data = await client.receive_output()
assert data["type"] == "websocket.close"
assert data["code"] == 4408
System Information
- Operating system: ubuntu 22.0.4
- Strawberry version (if applicable): 0.154.0
- Python: 3.10
Additional Context
Upvote & Fund
- We're using Polar.sh so you can upvote and help fund this issue.
- We receive the funding once the issue is completed & confirmed by you.
- Thank you in advance for helping prioritize & fund our backlog.