20
20
from typing import TypedDict
21
21
except ImportError : # Python < 3.8
22
22
from typing_extensions import TypedDict
23
- try :
24
- from typing import TypeGuard
25
- except ImportError : # Python < 3.10
26
- pass
27
23
28
24
29
25
if TYPE_CHECKING :
@@ -377,11 +373,13 @@ def __init__(self) -> None:
377
373
self ._tasks : set [Awaitable ] = set ()
378
374
379
375
def has_next (self ) -> bool :
376
+ """Check whether there is a next incremental result."""
380
377
return bool (self ._pending )
381
378
382
379
async def subscribe (
383
380
self ,
384
381
) -> AsyncGenerator [SubsequentIncrementalExecutionResult , None ]:
382
+ """Subscribe to the incremental results."""
385
383
is_done = False
386
384
pending = self ._pending
387
385
@@ -422,6 +420,7 @@ def prepare_new_deferred_fragment_record(
422
420
path : Path | None ,
423
421
parent_context : IncrementalDataRecord | None ,
424
422
) -> DeferredFragmentRecord :
423
+ """Prepare a new deferred fragment record."""
425
424
deferred_fragment_record = DeferredFragmentRecord (label , path , parent_context )
426
425
427
426
context = parent_context or self ._initial_result
@@ -435,6 +434,7 @@ def prepare_new_stream_items_record(
435
434
parent_context : IncrementalDataRecord | None ,
436
435
async_iterator : AsyncIterator [Any ] | None = None ,
437
436
) -> StreamItemsRecord :
437
+ """Prepare a new stream items record."""
438
438
stream_items_record = StreamItemsRecord (
439
439
label , path , parent_context , async_iterator
440
440
)
@@ -448,6 +448,7 @@ def complete_deferred_fragment_record(
448
448
deferred_fragment_record : DeferredFragmentRecord ,
449
449
data : dict [str , Any ] | None ,
450
450
) -> None :
451
+ """Complete the given deferred fragment record."""
451
452
deferred_fragment_record .data = data
452
453
deferred_fragment_record .is_completed = True
453
454
self ._release (deferred_fragment_record )
@@ -457,21 +458,25 @@ def complete_stream_items_record(
457
458
stream_items_record : StreamItemsRecord ,
458
459
items : list [str ] | None ,
459
460
) -> None :
461
+ """Complete the given stream items record."""
460
462
stream_items_record .items = items
461
463
stream_items_record .is_completed = True
462
464
self ._release (stream_items_record )
463
465
464
466
def set_is_completed_async_iterator (
465
467
self , stream_items_record : StreamItemsRecord
466
468
) -> None :
469
+ """Mark async iterator for stream items as completed."""
467
470
stream_items_record .is_completed_async_iterator = True
468
471
469
472
def add_field_error (
470
473
self , incremental_data_record : IncrementalDataRecord , error : GraphQLError
471
474
) -> None :
475
+ """Add a field error to the given incremental data record."""
472
476
incremental_data_record .errors .append (error )
473
477
474
478
def publish_initial (self ) -> None :
479
+ """Publish the initial result."""
475
480
for child in self ._initial_result .children :
476
481
self ._publish (child )
477
482
@@ -480,6 +485,7 @@ def filter(
480
485
null_path : Path ,
481
486
erroring_incremental_data_record : IncrementalDataRecord | None ,
482
487
) -> None :
488
+ """Filter out the given erroring incremental data record."""
483
489
null_path_list = null_path .as_list ()
484
490
485
491
children = (erroring_incremental_data_record or self ._initial_result ).children
@@ -504,23 +510,28 @@ def filter(
504
510
self ._add_task (close_async_iterator )
505
511
506
512
def _trigger (self ) -> None :
513
+ """Trigger the resolve event."""
507
514
self ._resolve .set ()
508
515
self ._resolve = Event ()
509
516
510
517
def _introduce (self , item : IncrementalDataRecord ) -> None :
518
+ """Introduce a new IncrementalDataRecord."""
511
519
self ._pending [item ] = None
512
520
513
521
def _release (self , item : IncrementalDataRecord ) -> None :
522
+ """Release the given IncrementalDataRecord."""
514
523
if item in self ._pending :
515
524
self ._released [item ] = None
516
525
self ._trigger ()
517
526
518
527
def _push (self , item : IncrementalDataRecord ) -> None :
528
+ """Push the given IncrementalDataRecord."""
519
529
self ._released [item ] = None
520
530
self ._pending [item ] = None
521
531
self ._trigger ()
522
532
523
533
def _delete (self , item : IncrementalDataRecord ) -> None :
534
+ """Delete the given IncrementalDataRecord."""
524
535
with suppress_key_error :
525
536
del self ._released [item ]
526
537
with suppress_key_error :
@@ -530,6 +541,7 @@ def _delete(self, item: IncrementalDataRecord) -> None:
530
541
def _get_incremental_result (
531
542
self , completed_records : Collection [IncrementalDataRecord ]
532
543
) -> SubsequentIncrementalExecutionResult | None :
544
+ """Get the incremental result with the completed records."""
533
545
incremental_results : list [IncrementalResult ] = []
534
546
encountered_completed_async_iterator = False
535
547
append_result = incremental_results .append
@@ -572,6 +584,7 @@ def _get_incremental_result(
572
584
return None
573
585
574
586
def _publish (self , incremental_data_record : IncrementalDataRecord ) -> None :
587
+ """Publish the given incremental data record."""
575
588
if incremental_data_record .is_completed :
576
589
self ._push (incremental_data_record )
577
590
else :
@@ -582,6 +595,7 @@ def _get_descendants(
582
595
children : dict [IncrementalDataRecord , None ],
583
596
descendants : dict [IncrementalDataRecord , None ] | None = None ,
584
597
) -> dict [IncrementalDataRecord , None ]:
598
+ """Get the descendants of the given children."""
585
599
if descendants is None :
586
600
descendants = {}
587
601
for child in children :
@@ -592,9 +606,11 @@ def _get_descendants(
592
606
def _matches_path (
593
607
self , test_path : list [str | int ], base_path : list [str | int ]
594
608
) -> bool :
609
+ """Get whether the given test path matches the base path."""
595
610
return all (item == test_path [i ] for i , item in enumerate (base_path ))
596
611
597
612
def _add_task (self , awaitable : Awaitable [Any ]) -> None :
613
+ """Add the given task to the tasks set for later execution."""
598
614
tasks = self ._tasks
599
615
task = ensure_future (awaitable )
600
616
tasks .add (task )
0 commit comments