@@ -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