@@ -927,13 +927,12 @@ async def complete_async_iterator_value(
927927 recursively until all the results are completed.
928928 """
929929 is_awaitable = self .is_awaitable
930- complete_awaitable_value = self .complete_awaitable_value
931930 complete_list_item_value = self .complete_list_item_value
931+ complete_awaitable_list_item_value = self .complete_awaitable_list_item_value
932932 graphql_wrapped_result : GraphQLWrappedResult [list [Any ]] = ([], [])
933933 completed_results , incomplete_results = graphql_wrapped_result
934934 append_completed = completed_results .append
935935 append_incomplete = incomplete_results .append
936- extend_incomplete = incomplete_results .extend
937936 awaitable_indices : list [int ] = []
938937 append_awaitable = awaitable_indices .append
939938 stream_usage = self .get_stream_usage (field_group , path )
@@ -978,21 +977,18 @@ async def complete_async_iterator_value(
978977 ) from raw_error
979978
980979 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 ,
984984 item_type ,
985985 field_group ,
986986 info ,
987987 item_path ,
988- item ,
989988 incremental_context ,
990989 defer_map ,
991990 )
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+ )
996992 append_awaitable (index )
997993
998994 elif complete_list_item_value (
@@ -1065,13 +1061,12 @@ def complete_list_value(
10651061 # the list contains no coroutine objects by avoiding creating another coroutine
10661062 # object.
10671063 is_awaitable = self .is_awaitable
1068- complete_awaitable_value = self .complete_awaitable_value
10691064 complete_list_item_value = self .complete_list_item_value
1065+ complete_awaitable_list_item_value = self .complete_awaitable_list_item_value
10701066 graphql_wrapped_result : GraphQLWrappedResult [list [Any ]] = ([], [])
10711067 completed_results , incomplete_results = graphql_wrapped_result
10721068 append_completed = completed_results .append
10731069 append_incomplete = incomplete_results .append
1074- extend_incomplete = incomplete_results .extend
10751070 awaitable_indices : list [int ] = []
10761071 append_awaitable = awaitable_indices .append
10771072 stream_usage = self .get_stream_usage (field_group , path )
@@ -1102,21 +1097,18 @@ def complete_list_value(
11021097 item_path = path .add_key (index , None )
11031098
11041099 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 ,
11081104 item_type ,
11091105 field_group ,
11101106 info ,
11111107 item_path ,
1112- item ,
11131108 incremental_context ,
11141109 defer_map ,
11151110 )
1116- extend_incomplete (resolved [1 ])
1117- return resolved [0 ]
1118-
1119- append_completed (resolve_item (item , item_path ))
1111+ )
11201112 append_awaitable (index )
11211113
11221114 elif complete_list_item_value (
@@ -1220,6 +1212,44 @@ async def await_completed() -> Any:
12201212
12211213 return False
12221214
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+
12231253 @staticmethod
12241254 def complete_leaf_value (return_type : GraphQLLeafType , result : Any ) -> Any :
12251255 """Complete a leaf value.
0 commit comments