Skip to content

Commit cea224a

Browse files
committed
Improved return_promise behavior
1 parent 6f72b86 commit cea224a

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

graphql/execution/executor.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323

2424

2525
def execute(schema, document_ast, root_value=None, context_value=None,
26-
variable_values=None, operation_name=None, executor=None, middleware=None):
26+
variable_values=None, operation_name=None, executor=None,
27+
return_promise=False, middleware=None):
2728
assert schema, 'Must provide schema'
2829
assert isinstance(schema, GraphQLSchema), (
2930
'Schema must be an instance of GraphQLSchema. Also ensure that there are ' +
@@ -64,7 +65,14 @@ def on_resolve(data):
6465
return ExecutionResult(data=data)
6566
return ExecutionResult(data=data, errors=context.errors)
6667

67-
return Promise.resolve(None).then(executor).catch(on_rejected).then(on_resolve)
68+
promise = Promise.resolve(None).then(
69+
executor).catch(on_rejected).then(on_resolve)
70+
71+
if not return_promise:
72+
context.executor.wait_until_finished()
73+
return promise.get()
74+
75+
return promise
6876

6977

7078
def execute_operation(exe_context, operation, root_value):

graphql/graphql.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,19 @@
3030
# one operation.
3131

3232

33+
def graphql(*args, **kwargs):
34+
return_promise = kwargs.get('return_promise', False)
35+
promise_result = graphql_impl(*args, **kwargs)
36+
if not return_promise:
37+
return promise_result.get()
38+
39+
return promise_result
40+
41+
3342
@promisify
34-
def graphql(schema, request_string='', root_value=None, context_value=None,
35-
variable_values=None, operation_name=None, executor=None,
36-
middleware=None):
43+
def graphql_impl(schema, request_string='', root_value=None, context_value=None,
44+
variable_values=None, operation_name=None, executor=None,
45+
return_promise=False, middleware=None):
3746
try:
3847
if isinstance(request_string, Document):
3948
ast = request_string
@@ -55,6 +64,7 @@ def graphql(schema, request_string='', root_value=None, context_value=None,
5564
variable_values=variable_values or {},
5665
executor=executor,
5766
middleware=middleware,
67+
return_promise=return_promise
5868
)
5969
except Exception as e:
6070
return ExecutionResult(

0 commit comments

Comments
 (0)