@@ -1359,11 +1359,11 @@ def complete_list_item_value(
1359
1359
Returns True if the value is awaitable.
1360
1360
"""
1361
1361
is_awaitable = self .is_awaitable
1362
- try :
1363
- if is_awaitable (item ):
1364
- completed_item : Any
1365
1362
1366
- async def await_completed () -> Any :
1363
+ if is_awaitable (item ):
1364
+ # noinspection PyShadowingNames
1365
+ async def await_completed () -> Any :
1366
+ try :
1367
1367
completed = self .complete_value (
1368
1368
item_type ,
1369
1369
field_nodes ,
@@ -1373,21 +1373,28 @@ async def await_completed() -> Any:
1373
1373
async_payload_record ,
1374
1374
)
1375
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
1376
1381
1377
- completed_item = await_completed ()
1378
- else :
1379
- completed_item = self .complete_value (
1380
- item_type ,
1381
- field_nodes ,
1382
- info ,
1383
- item_path ,
1384
- item ,
1385
- async_payload_record ,
1386
- )
1382
+ complete_results .append (await_completed ())
1383
+ return True
1384
+
1385
+ try :
1386
+ completed_item = self .complete_value (
1387
+ item_type ,
1388
+ field_nodes ,
1389
+ info ,
1390
+ item_path ,
1391
+ item ,
1392
+ async_payload_record ,
1393
+ )
1387
1394
1388
1395
if is_awaitable (completed_item ):
1389
1396
# noinspection PyShadowingNames
1390
- async def catch_error () -> Any :
1397
+ async def await_completed () -> Any :
1391
1398
try :
1392
1399
return await completed_item
1393
1400
except Exception as raw_error :
@@ -1398,7 +1405,7 @@ async def catch_error() -> Any:
1398
1405
self .filter_subsequent_payloads (item_path , async_payload_record )
1399
1406
return None
1400
1407
1401
- complete_results .append (catch_error ())
1408
+ complete_results .append (await_completed ())
1402
1409
return True
1403
1410
1404
1411
complete_results .append (completed_item )
@@ -1728,15 +1735,17 @@ def execute_stream_field(
1728
1735
parent_context : Optional [AsyncPayloadRecord ] = None ,
1729
1736
) -> AsyncPayloadRecord :
1730
1737
"""Execute stream field."""
1738
+ is_awaitable = self .is_awaitable
1731
1739
async_payload_record = StreamRecord (
1732
1740
label , item_path , None , parent_context , self
1733
1741
)
1734
1742
completed_item : Any
1735
- try :
1736
- try :
1737
- if self .is_awaitable (item ):
1738
1743
1739
- async def await_completed_item () -> Any :
1744
+ if is_awaitable (item ):
1745
+ # noinspection PyShadowingNames
1746
+ async def await_completed_items () -> Optional [List [Any ]]:
1747
+ try :
1748
+ try :
1740
1749
completed = self .complete_value (
1741
1750
item_type ,
1742
1751
field_nodes ,
@@ -1745,76 +1754,79 @@ async def await_completed_item() -> Any:
1745
1754
await item ,
1746
1755
async_payload_record ,
1747
1756
)
1748
- return (
1757
+ return [
1749
1758
await completed
1750
1759
if self .is_awaitable (completed )
1751
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
1752
1768
)
1769
+ self .filter_subsequent_payloads (item_path , async_payload_record )
1770
+ return [None ]
1771
+ except GraphQLError as error :
1772
+ async_payload_record .errors .append (error )
1773
+ self .filter_subsequent_payloads (path , async_payload_record )
1774
+ return None
1753
1775
1754
- completed_item = await_completed_item ()
1776
+ async_payload_record .add_items (await_completed_items ())
1777
+ return async_payload_record
1755
1778
1756
- else :
1757
- completed_item = self .complete_value (
1758
- item_type ,
1759
- field_nodes ,
1760
- info ,
1761
- item_path ,
1762
- item ,
1763
- async_payload_record ,
1764
- )
1779
+ try :
1780
+ try :
1781
+ completed_item = self .complete_value (
1782
+ item_type ,
1783
+ field_nodes ,
1784
+ info ,
1785
+ item_path ,
1786
+ item ,
1787
+ async_payload_record ,
1788
+ )
1765
1789
1766
- if self . is_awaitable ( completed_item ):
1790
+ completed_items : Any
1767
1791
1768
- async def await_completed_item () -> Any :
1792
+ if is_awaitable (completed_item ):
1793
+ # noinspection PyShadowingNames
1794
+ async def await_completed_items () -> Optional [List [Any ]]:
1769
1795
# noinspection PyShadowingNames
1770
1796
try :
1771
- return await completed_item
1772
- except Exception as raw_error :
1773
- # noinspection PyShadowingNames
1774
- error = located_error (
1775
- raw_error , field_nodes , item_path .as_list ()
1776
- )
1777
- handle_field_error (
1778
- error , item_type , async_payload_record .errors
1779
- )
1780
- self .filter_subsequent_payloads (
1781
- item_path , async_payload_record
1782
- )
1797
+ try :
1798
+ return [await completed_item ]
1799
+ except Exception as raw_error : # pragma: no cover
1800
+ # noinspection PyShadowingNames
1801
+ error = located_error (
1802
+ raw_error , field_nodes , item_path .as_list ()
1803
+ )
1804
+ handle_field_error (
1805
+ error , item_type , async_payload_record .errors
1806
+ )
1807
+ self .filter_subsequent_payloads (
1808
+ item_path , async_payload_record
1809
+ )
1810
+ return [None ]
1811
+ except GraphQLError as error : # pragma: no cover
1812
+ async_payload_record .errors .append (error )
1813
+ self .filter_subsequent_payloads (path , async_payload_record )
1783
1814
return None
1784
1815
1785
- complete_item = await_completed_item ()
1786
-
1816
+ completed_items = await_completed_items ()
1787
1817
else :
1788
- complete_item = completed_item
1818
+ completed_items = [completed_item ]
1819
+
1789
1820
except Exception as raw_error :
1790
1821
error = located_error (raw_error , field_nodes , item_path .as_list ())
1791
1822
handle_field_error (error , item_type , async_payload_record .errors )
1792
- self .filter_subsequent_payloads ( # pragma: no cover
1793
- item_path , async_payload_record
1794
- )
1795
- complete_item = None # pragma: no cover
1823
+ self .filter_subsequent_payloads (item_path , async_payload_record )
1824
+ completed_items = [None ]
1796
1825
1797
1826
except GraphQLError as error :
1798
1827
async_payload_record .errors .append (error )
1799
1828
self .filter_subsequent_payloads (item_path , async_payload_record )
1800
- async_payload_record .add_items (None )
1801
- return async_payload_record
1802
-
1803
- completed_items : AwaitableOrValue [Optional [List [Any ]]]
1804
- if self .is_awaitable (complete_item ):
1805
-
1806
- async def await_completed_items () -> Optional [List [Any ]]:
1807
- # noinspection PyShadowingNames
1808
- try :
1809
- return [await complete_item ] # type: ignore
1810
- except GraphQLError as error :
1811
- async_payload_record .errors .append (error )
1812
- self .filter_subsequent_payloads (path , async_payload_record )
1813
- return None
1814
-
1815
- completed_items = await_completed_items ()
1816
- else :
1817
- completed_items = [complete_item ]
1829
+ completed_items = None
1818
1830
1819
1831
async_payload_record .add_items (completed_items )
1820
1832
return async_payload_record
0 commit comments