Skip to content

Commit 02e7331

Browse files
committed
Add tests for concurrent executor as well.
1 parent 34c39a6 commit 02e7331

File tree

5 files changed

+57
-21
lines changed

5 files changed

+57
-21
lines changed

graphql/core/execution/executor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def collect_result(resolved_result):
116116
return results
117117

118118
if isinstance(result, Deferred):
119-
return result.add_callback(collect_result)
119+
return succeed(result).add_callback(collect_result)
120120

121121
else:
122122
return collect_result(result)

graphql/core/pyutils/defer.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -472,13 +472,13 @@ def _schedule_callbacks(self, items, result, objects_remaining_to_resolve=None,
472472
self._result = result
473473
for key, value in items:
474474
if isinstance(value, Deferred):
475-
value.add_callbacks(self._cb_deferred, self._cb_deferred,
476-
callback_args=(key, True),
477-
errback_args=(key, False))
478-
479475
# We will place a value in place of the resolved key, so that insert order is preserved.
480476
if preserve_insert_ordering:
481477
result[key] = None
478+
479+
value.add_callbacks(self._cb_deferred, self._cb_deferred,
480+
callback_args=(key, True),
481+
errback_args=(key, False))
482482
else:
483483
self.objects_remaining_to_resolve -= 1
484484
result[key] = value

graphql/core/utils/build_ast_schema.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ def build_ast_schema(document, query_type_name, mutation_type_name=None):
6868

6969
def produce_type_def(type_ast):
7070
type_name = _get_inner_type_name(type_ast)
71-
print('ptd', type_name)
7271
if type_name in inner_type_map:
7372
return _build_wrapped_type(inner_type_map[type_name], type_ast)
7473

tests/core_execution/test_concurrent_executor.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from collections import OrderedDict
12
from graphql.core.error import format_error
23
from graphql.core.execution import Executor
34
from graphql.core.execution.middlewares.sync import SynchronousExecutionMiddleware
@@ -233,3 +234,36 @@ def promise(self):
233234
assert not isinstance(result, Deferred)
234235
assert result.data == {"promise": 'I should work'}
235236
assert not result.errors
237+
238+
239+
def test_executor_can_enforce_strict_ordering():
240+
Type = GraphQLObjectType('Type', lambda: {
241+
'a': GraphQLField(GraphQLString,
242+
resolver=lambda *_: succeed('Apple')),
243+
'b': GraphQLField(GraphQLString,
244+
resolver=lambda *_: succeed('Banana')),
245+
'c': GraphQLField(GraphQLString,
246+
resolver=lambda *_: succeed('Cherry')),
247+
'deep': GraphQLField(Type, resolver=lambda *_: succeed({})),
248+
})
249+
schema = GraphQLSchema(query=Type)
250+
executor = Executor(map_type=OrderedDict)
251+
252+
query = '{ a b c aa: c cc: c bb: b aaz: a bbz: b deep { b a c deeper: deep { c a b } } ' \
253+
'ccz: c zzz: c aaa: a }'
254+
255+
def handle_results(result):
256+
assert not result.errors
257+
258+
data = result.data
259+
assert isinstance(data, OrderedDict)
260+
assert list(data.keys()) == ['a', 'b', 'c', 'aa', 'cc', 'bb', 'aaz', 'bbz', 'deep', 'ccz', 'zzz', 'aaa']
261+
deep = data['deep']
262+
assert isinstance(deep, OrderedDict)
263+
assert list(deep.keys()) == ['b', 'a', 'c', 'deeper']
264+
deeper = deep['deeper']
265+
assert isinstance(deeper, OrderedDict)
266+
assert list(deeper.keys()) == ['c', 'a', 'b']
267+
268+
raise_callback_results(executor.execute(schema, query), handle_results)
269+
raise_callback_results(executor.execute(schema, query, execute_serially=True), handle_results)

tests/core_execution/test_executor.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -466,18 +466,21 @@ def test_executor_can_enforce_strict_ordering():
466466
})
467467
schema = GraphQLSchema(query=Type)
468468
executor = Executor(execution_middlewares=[SynchronousExecutionMiddleware], map_type=OrderedDict)
469-
470-
result = executor.execute(schema, '{ a b c aa: c cc: c bb: b aaz: a bbz: b deep { b a c deeper: deep { c a b } } '
471-
'ccz: c zzz: c aaa: a }')
472-
473-
assert not result.errors
474-
475-
data = result.data
476-
assert isinstance(data, OrderedDict)
477-
assert list(data.keys()) == ['a', 'b', 'c', 'aa', 'cc', 'bb', 'aaz', 'bbz', 'deep', 'ccz', 'zzz', 'aaa']
478-
deep = data['deep']
479-
assert isinstance(deep, OrderedDict)
480-
assert list(deep.keys()) == ['b', 'a', 'c', 'deeper']
481-
deeper = deep['deeper']
482-
assert isinstance(deeper, OrderedDict)
483-
assert list(deeper.keys()) == ['c', 'a', 'b']
469+
query = '{ a b c aa: c cc: c bb: b aaz: a bbz: b deep { b a c deeper: deep { c a b } } ' \
470+
'ccz: c zzz: c aaa: a }'
471+
472+
def check_result(result):
473+
assert not result.errors
474+
475+
data = result.data
476+
assert isinstance(data, OrderedDict)
477+
assert list(data.keys()) == ['a', 'b', 'c', 'aa', 'cc', 'bb', 'aaz', 'bbz', 'deep', 'ccz', 'zzz', 'aaa']
478+
deep = data['deep']
479+
assert isinstance(deep, OrderedDict)
480+
assert list(deep.keys()) == ['b', 'a', 'c', 'deeper']
481+
deeper = deep['deeper']
482+
assert isinstance(deeper, OrderedDict)
483+
assert list(deeper.keys()) == ['c', 'a', 'b']
484+
485+
check_result(executor.execute(schema, query))
486+
check_result(executor.execute(schema, query, execute_serially=True))

0 commit comments

Comments
 (0)