1
+ import itertools
1
2
import sys
2
3
import traceback
3
4
import collections
@@ -19,15 +20,13 @@ def is_promise(value):
19
20
20
21
def on_complete_resolver (on_error , __func , exe_context , info , __resolver , * args , ** kwargs ):
21
22
try :
22
- # print 'on_complete_resolver'
23
23
result = __resolver (* args , ** kwargs )
24
- # print 'result', result
24
+ if is_promise (result ):
25
+ return result .then (__func ).catch (on_error )
26
+ return __func (result )
25
27
except Exception , e :
26
28
return on_error (e )
27
29
28
- if is_promise (result ):
29
- return result .then (__func , on_error )
30
- return __func (result )
31
30
32
31
33
32
def complete_list_value (inner_resolver , exe_context , info , on_error , result ):
@@ -38,19 +37,12 @@ def complete_list_value(inner_resolver, exe_context, info, on_error, result):
38
37
('User Error: expected iterable, but did not find one ' +
39
38
'for field {}.{}.' ).format (info .parent_type , info .field_name )
40
39
41
- completed_results = []
42
- contains_promise = False
43
- try :
44
- for item in result :
45
- completed_item = inner_resolver (item )
46
- if not contains_promise and is_promise (completed_item ):
47
- contains_promise = True
40
+ completed_results = map (inner_resolver , result )
48
41
49
- completed_results .append (completed_item )
42
+ if not any (itertools .imap (is_promise , completed_results )):
43
+ return completed_results
50
44
51
- return Promise .all (completed_results ).catch (on_error ) if contains_promise else completed_results
52
- except Exception , e :
53
- on_error (e )
45
+ return Promise .all (completed_results ).catch (on_error )
54
46
55
47
56
48
def complete_nonnull_value (exe_context , info , result ):
@@ -71,24 +63,15 @@ def complete_leaf_value(serialize, result):
71
63
def complete_object_value (fragment_resolve , exe_context , on_error , result ):
72
64
if result is None :
73
65
return None
74
- try :
75
- result = fragment_resolve (result )
76
- if is_promise (result ):
77
- return result .catch (on_error )
78
- return result
79
- except Exception , e :
80
- on_error (e )
66
+
67
+ result = fragment_resolve (result )
68
+ if is_promise (result ):
69
+ return result .catch (on_error )
70
+ return result
81
71
82
72
83
73
def field_resolver (field , fragment = None , exe_context = None , info = None ):
84
74
return type_resolver (field .type , field .resolver or default_resolve_fn , fragment , exe_context , info , catch_error = True )
85
- # def new_resolver(*args, **kwargs):
86
- # try:
87
- # result = resolver(*args, **kwargs)
88
- # except Exception, e:
89
- # exe_context.errors.append(e)
90
-
91
- # return new_resolver
92
75
93
76
94
77
def type_resolver (return_type , resolver , fragment = None , exe_context = None , info = None , catch_error = False ):
0 commit comments