55
66from graphql import execute , parse , GraphQLSchema , ExecutionResult
77from graphql import subscribe
8+ from graphql .pyutils import is_awaitable
89
910from rsocket .frame_helpers import str_to_bytes
1011from rsocket .helpers import create_future
@@ -25,12 +26,11 @@ def graphql_handler(schema: GraphQLSchema, route: str,
2526 async def graphql_query (payload : Payload ):
2627 document , params = parse_payload (payload , json_deserialize )
2728
28- execution_result = await execute (
29- schema ,
30- document ,
31- variable_values = params .variables ,
32- operation_name = params .operation_name
33- )
29+ execution_result = execute (schema , document , variable_values = params .variables ,
30+ operation_name = params .operation_name )
31+
32+ if is_awaitable (execution_result ):
33+ execution_result = await execution_result
3434
3535 rsocket_payload = graphql_to_rsocket_payload (execution_result , json_serialize )
3636
@@ -41,11 +41,12 @@ async def graphql_subscription(payload: Payload):
4141 async def generator () -> AsyncGenerator [Tuple [Payload , bool ], None ]:
4242 document , params = parse_payload (payload , json_deserialize )
4343
44- async for execution_result in await subscribe (
45- schema ,
46- document ,
47- operation_name = params .operation_name
48- ):
44+ subscription = subscribe (schema , document , operation_name = params .operation_name )
45+
46+ if is_awaitable (subscription ):
47+ subscription = await subscription
48+
49+ async for execution_result in subscription :
4950 rsocket_payload = graphql_to_rsocket_payload (execution_result , json_serialize )
5051 yield rsocket_payload , False
5152
0 commit comments