@@ -969,26 +969,9 @@ def execute_field(
969969 result = resolve_fn (source , info , ** args )
970970
971971 if self .is_awaitable (result ):
972- # noinspection PyShadowingNames
973- async def await_result () -> Any :
974- try :
975- completed = self .complete_value (
976- return_type ,
977- field_nodes ,
978- info ,
979- path ,
980- await result ,
981- async_payload_record ,
982- )
983- if self .is_awaitable (completed ):
984- return await completed
985- except Exception as raw_error :
986- error = located_error (raw_error , field_nodes , path .as_list ())
987- handle_field_error (error , return_type , errors )
988- return None
989- return completed
990-
991- return await_result ()
972+ return self .complete_awaitable_value (
973+ return_type , field_nodes , info , path , result , async_payload_record
974+ )
992975
993976 completed = self .complete_value (
994977 return_type , field_nodes , info , path , result , async_payload_record
@@ -1131,6 +1114,37 @@ def complete_value(
11311114 ) # pragma: no cover
11321115 raise TypeError (msg ) # pragma: no cover
11331116
1117+ async def complete_awaitable_value (
1118+ self ,
1119+ return_type : GraphQLOutputType ,
1120+ field_nodes : List [FieldNode ],
1121+ info : GraphQLResolveInfo ,
1122+ path : Path ,
1123+ result : Any ,
1124+ async_payload_record : Optional [AsyncPayloadRecord ] = None ,
1125+ ) -> Any :
1126+ """Complete an awaitable value."""
1127+ try :
1128+ resolved = await result
1129+ completed = self .complete_value (
1130+ return_type ,
1131+ field_nodes ,
1132+ info ,
1133+ path ,
1134+ resolved ,
1135+ async_payload_record ,
1136+ )
1137+ if self .is_awaitable (completed ):
1138+ completed = await completed
1139+ except Exception as raw_error :
1140+ errors = (
1141+ async_payload_record .errors if async_payload_record else self .errors
1142+ )
1143+ error = located_error (raw_error , field_nodes , path .as_list ())
1144+ handle_field_error (error , return_type , errors )
1145+ completed = None
1146+ return completed
1147+
11341148 def get_stream_values (
11351149 self , field_nodes : List [FieldNode ], path : Path
11361150 ) -> Optional [StreamArguments ]:
@@ -1361,25 +1375,11 @@ def complete_list_item_value(
13611375 is_awaitable = self .is_awaitable
13621376
13631377 if is_awaitable (item ):
1364- # noinspection PyShadowingNames
1365- async def await_completed () -> Any :
1366- try :
1367- completed = self .complete_value (
1368- item_type ,
1369- field_nodes ,
1370- info ,
1371- item_path ,
1372- await item ,
1373- async_payload_record ,
1374- )
1375- return await completed if is_awaitable (completed ) else completed
1376- except Exception as raw_error :
1377- error = located_error (raw_error , field_nodes , item_path .as_list ())
1378- handle_field_error (error , item_type , errors )
1379- self .filter_subsequent_payloads (item_path , async_payload_record )
1380- return None
1381-
1382- complete_results .append (await_completed ())
1378+ complete_results .append (
1379+ self .complete_awaitable_value (
1380+ item_type , field_nodes , info , item_path , item , async_payload_record
1381+ )
1382+ )
13831383 return True
13841384
13851385 try :
@@ -1745,29 +1745,16 @@ def execute_stream_field(
17451745 # noinspection PyShadowingNames
17461746 async def await_completed_items () -> Optional [List [Any ]]:
17471747 try :
1748- try :
1749- completed = self .complete_value (
1748+ return [
1749+ await self .complete_awaitable_value (
17501750 item_type ,
17511751 field_nodes ,
17521752 info ,
17531753 item_path ,
1754- await item ,
1754+ item ,
17551755 async_payload_record ,
17561756 )
1757- return [
1758- await completed
1759- if self .is_awaitable (completed )
1760- else completed
1761- ]
1762- except Exception as raw_error :
1763- error = located_error (
1764- raw_error , field_nodes , item_path .as_list ()
1765- )
1766- handle_field_error (
1767- error , item_type , async_payload_record .errors
1768- )
1769- self .filter_subsequent_payloads (item_path , async_payload_record )
1770- return [None ]
1757+ ]
17711758 except GraphQLError as error :
17721759 async_payload_record .errors .append (error )
17731760 self .filter_subsequent_payloads (path , async_payload_record )
0 commit comments