Skip to content

Commit dc51e98

Browse files
committed
Improved experimental executor resolvers
1 parent 53a7932 commit dc51e98

File tree

1 file changed

+13
-16
lines changed

1 file changed

+13
-16
lines changed

graphql/execution/experimental/resolver.py

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,10 @@
1616
def on_complete_resolver(on_error, __func, exe_context, info, __resolver, *args, **kwargs):
1717
try:
1818
result = __resolver(*args, **kwargs)
19-
if isinstance(result, Exception):
20-
return on_error(result)
21-
# return Promise.resolve(result).then(__func).catch(on_error)
2219
if is_thenable(result):
23-
# TODO: Remove this, if a promise is resolved with an Exception,
24-
# it should raise by default. This is fixing an old behavior
25-
# in the Promise package
26-
def on_resolve(value):
27-
if isinstance(value, Exception):
28-
return on_error(value)
29-
return value
30-
return result.then(on_resolve).then(__func).catch(on_error)
20+
return Promise.resolve(result).then(__func).catch(on_error)
21+
elif isinstance(result, Exception):
22+
return on_error(result)
3123
return __func(result)
3224
except Exception as e:
3325
return on_error(e)
@@ -52,7 +44,8 @@ def complete_list_value(inner_resolver, exe_context, info, on_error, result):
5244
def complete_nonnull_value(exe_context, info, result):
5345
if result is None:
5446
raise GraphQLError(
55-
'Cannot return null for non-nullable field {}.{}.'.format(info.parent_type, info.field_name),
47+
'Cannot return null for non-nullable field {}.{}.'.format(
48+
info.parent_type, info.field_name),
5649
info.field_asts
5750
)
5851
return result
@@ -130,8 +123,10 @@ def type_resolver_fragment(return_type, resolver, fragment, exe_context, info, c
130123
return partial(on_complete_resolver, on_resolve_error, complete_object_value_resolve, exe_context, info, resolver)
131124

132125

133-
def type_resolver_non_null(return_type, resolver, fragment, exe_context, info): # no catch_error
134-
resolver = type_resolver(return_type.of_type, resolver, fragment, exe_context, info)
126+
# no catch_error
127+
def type_resolver_non_null(return_type, resolver, fragment, exe_context, info):
128+
resolver = type_resolver(
129+
return_type.of_type, resolver, fragment, exe_context, info)
135130
nonnull_complete = partial(complete_nonnull_value, exe_context, info)
136131
on_resolve_error = partial(on_error, exe_context, info, False)
137132
return partial(on_complete_resolver, on_resolve_error, nonnull_complete, exe_context, info, resolver)
@@ -145,7 +140,9 @@ def type_resolver_leaf(return_type, resolver, exe_context, info, catch_error):
145140

146141
def type_resolver_list(return_type, resolver, fragment, exe_context, info, catch_error):
147142
item_type = return_type.of_type
148-
inner_resolver = type_resolver(item_type, lambda item: item, fragment, exe_context, info, catch_error=True)
143+
inner_resolver = type_resolver(
144+
item_type, lambda item: item, fragment, exe_context, info, catch_error=True)
149145
on_resolve_error = partial(on_error, exe_context, info, catch_error)
150-
list_complete = partial(complete_list_value, inner_resolver, exe_context, info, on_resolve_error)
146+
list_complete = partial(
147+
complete_list_value, inner_resolver, exe_context, info, on_resolve_error)
151148
return partial(on_complete_resolver, on_resolve_error, list_complete, exe_context, info, resolver)

0 commit comments

Comments
 (0)