5
5
6
6
from graphql import execute , parse , GraphQLSchema , ExecutionResult
7
7
from graphql import subscribe
8
+ from graphql .pyutils import is_awaitable
8
9
9
10
from rsocket .frame_helpers import str_to_bytes
10
11
from rsocket .helpers import create_future
@@ -25,12 +26,11 @@ def graphql_handler(schema: GraphQLSchema, route: str,
25
26
async def graphql_query (payload : Payload ):
26
27
document , params = parse_payload (payload , json_deserialize )
27
28
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
34
34
35
35
rsocket_payload = graphql_to_rsocket_payload (execution_result , json_serialize )
36
36
@@ -41,11 +41,12 @@ async def graphql_subscription(payload: Payload):
41
41
async def generator () -> AsyncGenerator [Tuple [Payload , bool ], None ]:
42
42
document , params = parse_payload (payload , json_deserialize )
43
43
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 :
49
50
rsocket_payload = graphql_to_rsocket_payload (execution_result , json_serialize )
50
51
yield rsocket_payload , False
51
52
0 commit comments