@@ -927,13 +927,12 @@ async def complete_async_iterator_value(
927
927
recursively until all the results are completed.
928
928
"""
929
929
is_awaitable = self .is_awaitable
930
- complete_awaitable_value = self .complete_awaitable_value
931
930
complete_list_item_value = self .complete_list_item_value
931
+ complete_awaitable_list_item_value = self .complete_awaitable_list_item_value
932
932
graphql_wrapped_result : GraphQLWrappedResult [list [Any ]] = ([], [])
933
933
completed_results , incomplete_results = graphql_wrapped_result
934
934
append_completed = completed_results .append
935
935
append_incomplete = incomplete_results .append
936
- extend_incomplete = incomplete_results .extend
937
936
awaitable_indices : list [int ] = []
938
937
append_awaitable = awaitable_indices .append
939
938
stream_usage = self .get_stream_usage (field_group , path )
@@ -978,21 +977,18 @@ async def complete_async_iterator_value(
978
977
) from raw_error
979
978
980
979
if is_awaitable (item ):
981
-
982
- async def resolve_item (item : Any , item_path : Path ) -> Any :
983
- resolved = await complete_awaitable_value (
980
+ append_completed (
981
+ complete_awaitable_list_item_value (
982
+ item ,
983
+ graphql_wrapped_result ,
984
984
item_type ,
985
985
field_group ,
986
986
info ,
987
987
item_path ,
988
- item ,
989
988
incremental_context ,
990
989
defer_map ,
991
990
)
992
- extend_incomplete (resolved [1 ]) # pragma: no cover
993
- return resolved [0 ] # pragma: no cover
994
-
995
- append_completed (resolve_item (item , item_path ))
991
+ )
996
992
append_awaitable (index )
997
993
998
994
elif complete_list_item_value (
@@ -1065,13 +1061,12 @@ def complete_list_value(
1065
1061
# the list contains no coroutine objects by avoiding creating another coroutine
1066
1062
# object.
1067
1063
is_awaitable = self .is_awaitable
1068
- complete_awaitable_value = self .complete_awaitable_value
1069
1064
complete_list_item_value = self .complete_list_item_value
1065
+ complete_awaitable_list_item_value = self .complete_awaitable_list_item_value
1070
1066
graphql_wrapped_result : GraphQLWrappedResult [list [Any ]] = ([], [])
1071
1067
completed_results , incomplete_results = graphql_wrapped_result
1072
1068
append_completed = completed_results .append
1073
1069
append_incomplete = incomplete_results .append
1074
- extend_incomplete = incomplete_results .extend
1075
1070
awaitable_indices : list [int ] = []
1076
1071
append_awaitable = awaitable_indices .append
1077
1072
stream_usage = self .get_stream_usage (field_group , path )
@@ -1102,21 +1097,18 @@ def complete_list_value(
1102
1097
item_path = path .add_key (index , None )
1103
1098
1104
1099
if is_awaitable (item ):
1105
-
1106
- async def resolve_item (item : Any , item_path : Path ) -> Any :
1107
- resolved = await complete_awaitable_value (
1100
+ append_completed (
1101
+ complete_awaitable_list_item_value (
1102
+ item ,
1103
+ graphql_wrapped_result ,
1108
1104
item_type ,
1109
1105
field_group ,
1110
1106
info ,
1111
1107
item_path ,
1112
- item ,
1113
1108
incremental_context ,
1114
1109
defer_map ,
1115
1110
)
1116
- extend_incomplete (resolved [1 ])
1117
- return resolved [0 ]
1118
-
1119
- append_completed (resolve_item (item , item_path ))
1111
+ )
1120
1112
append_awaitable (index )
1121
1113
1122
1114
elif complete_list_item_value (
@@ -1220,6 +1212,44 @@ async def await_completed() -> Any:
1220
1212
1221
1213
return False
1222
1214
1215
+ async def complete_awaitable_list_item_value (
1216
+ self ,
1217
+ item : Any ,
1218
+ parent : GraphQLWrappedResult [list [Any ]],
1219
+ item_type : GraphQLOutputType ,
1220
+ field_group : FieldGroup ,
1221
+ info : GraphQLResolveInfo ,
1222
+ item_path : Path ,
1223
+ incremental_context : IncrementalContext | None ,
1224
+ defer_map : RefMap [DeferUsage , DeferredFragmentRecord ] | None ,
1225
+ ) -> Any :
1226
+ """Complete an awaitable list item value."""
1227
+ try :
1228
+ resolved = await item
1229
+ completed = self .complete_value (
1230
+ item_type ,
1231
+ field_group ,
1232
+ info ,
1233
+ item_path ,
1234
+ resolved ,
1235
+ incremental_context ,
1236
+ defer_map ,
1237
+ )
1238
+ if self .is_awaitable (completed ):
1239
+ completed = await completed # type: ignore
1240
+ parent [1 ].extend (completed [1 ]) # type: ignore
1241
+ return completed [0 ] # type: ignore
1242
+ except Exception as raw_error :
1243
+ errors = (incremental_context or self ).errors
1244
+ self .handle_field_error (
1245
+ raw_error ,
1246
+ item_type ,
1247
+ field_group ,
1248
+ item_path ,
1249
+ errors ,
1250
+ )
1251
+ return None
1252
+
1223
1253
@staticmethod
1224
1254
def complete_leaf_value (return_type : GraphQLLeafType , result : Any ) -> Any :
1225
1255
"""Complete a leaf value.
0 commit comments