Skip to content

Commit facce87

Browse files
committed
polish: improve add_deferred_fragments readability
Replicates graphql/graphql-js@d32b99d
1 parent a070e41 commit facce87

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

src/graphql/execution/execute.py

+27-1
Original file line numberDiff line numberDiff line change
@@ -1925,15 +1925,38 @@ def add_new_deferred_fragments(
19251925
defer_map: RefMap[DeferUsage, DeferredFragmentRecord] | None = None,
19261926
path: Path | None = None,
19271927
) -> RefMap[DeferUsage, DeferredFragmentRecord]:
1928-
"""Add new deferred fragments to the defer map."""
1928+
"""Add new deferred fragments to the defer map.
1929+
1930+
Instantiates new DeferredFragmentRecords for the given path within an
1931+
incremental data record, returning an updated map of DeferUsage
1932+
objects to DeferredFragmentRecords.
1933+
1934+
Note: As defer directives may be used with operations returning lists,
1935+
a DeferUsage object may correspond to many DeferredFragmentRecords.
1936+
1937+
DeferredFragmentRecord creation includes the following steps:
1938+
1. The new DeferredFragmentRecord is instantiated at the given path.
1939+
2. The parent result record is calculated from the given incremental data record.
1940+
3. The IncrementalPublisher is notified that a new DeferredFragmentRecord
1941+
with the calculated parent has been added; the record will be released only
1942+
after the parent has completed.
1943+
"""
19291944
new_defer_map: RefMap[DeferUsage, DeferredFragmentRecord]
19301945
if not new_defer_usages:
1946+
# Given no DeferUsages, return the existing map, creating one if necessary.
19311947
return RefMap() if defer_map is None else defer_map
19321948
new_defer_map = RefMap() if defer_map is None else RefMap(defer_map.items())
1949+
# For each new DeferUsage object:
19331950
for defer_usage in new_defer_usages:
19341951
ancestors = defer_usage.ancestors
19351952
parent_defer_usage = ancestors[0] if ancestors else None
19361953

1954+
# If the parent target is defined, the parent target is a DeferUsage object
1955+
# and the parent result record is the DeferredFragmentRecord corresponding
1956+
# to that DeferUsage.
1957+
# If the parent target is not defined, the parent result record is either:
1958+
# - the InitialResultRecord, or
1959+
# - a StreamItemsRecord, as `@defer` may be nested under `@stream`.
19371960
parent = (
19381961
cast(Union[InitialResultRecord, StreamItemsRecord], incremental_data_record)
19391962
if parent_defer_usage is None
@@ -1942,12 +1965,15 @@ def add_new_deferred_fragments(
19421965
)
19431966
)
19441967

1968+
# Instantiate the new record.
19451969
deferred_fragment_record = DeferredFragmentRecord(path, defer_usage.label)
19461970

1971+
# Report the new record to the Incremental Publisher.
19471972
incremental_publisher.report_new_defer_fragment_record(
19481973
deferred_fragment_record, parent
19491974
)
19501975

1976+
# Update the map.
19511977
new_defer_map[defer_usage] = deferred_fragment_record
19521978

19531979
return new_defer_map

0 commit comments

Comments
 (0)