22
33from __future__ import annotations
44
5- import sys
6- from typing import TYPE_CHECKING , Dict , NamedTuple
5+ from typing import NamedTuple
76
87from ..pyutils import RefMap , RefSet
9- from .collect_fields import DeferUsage , FieldDetails
10-
11- if TYPE_CHECKING :
12- from ..language import FieldNode
8+ from .collect_fields import DeferUsage , FieldGroup , GroupedFieldSet
139
1410try :
1511 from typing import TypeAlias
1814
1915__all__ = [
2016 "DeferUsageSet" ,
21- "FieldGroup" ,
2217 "FieldPlan" ,
2318 "GroupedFieldSet" ,
2419 "build_field_plan" ,
2823DeferUsageSet : TypeAlias = RefSet [DeferUsage ]
2924
3025
31- class FieldGroup (NamedTuple ):
32- """A group of fields with defer usages."""
33-
34- fields : list [FieldDetails ]
35- defer_usages : DeferUsageSet | None = None
36-
37- def to_nodes (self ) -> list [FieldNode ]:
38- """Return the field nodes in this group."""
39- return [field_details .node for field_details in self .fields ]
40-
41-
42- if sys .version_info < (3 , 9 ):
43- GroupedFieldSet : TypeAlias = Dict [str , FieldGroup ]
44- else : # Python >= 3.9
45- GroupedFieldSet : TypeAlias = dict [str , FieldGroup ]
46-
47-
4826class FieldPlan (NamedTuple ):
4927 """A plan for executing fields."""
5028
@@ -53,7 +31,7 @@ class FieldPlan(NamedTuple):
5331
5432
5533def build_field_plan (
56- fields : dict [ str , list [ FieldDetails ]] ,
34+ original_grouped_field_set : GroupedFieldSet ,
5735 parent_defer_usages : DeferUsageSet | None = None ,
5836) -> FieldPlan :
5937 """Build a plan for executing fields."""
@@ -64,12 +42,12 @@ def build_field_plan(
6442
6543 new_grouped_field_sets : RefMap [DeferUsageSet , GroupedFieldSet ] = RefMap ()
6644
67- map_ : dict [str , tuple [DeferUsageSet , list [ FieldDetails ] ]] = {}
45+ map_ : dict [str , tuple [DeferUsageSet , FieldGroup ]] = {}
6846
69- for response_key , field_details_list in fields .items ():
47+ for response_key , field_group in original_grouped_field_set .items ():
7048 defer_usage_set : RefSet [DeferUsage ] = RefSet ()
7149 in_original_result = False
72- for field_details in field_details_list :
50+ for field_details in field_group :
7351 defer_usage = field_details .defer_usage
7452 if defer_usage is None :
7553 in_original_result = True
@@ -85,15 +63,11 @@ def build_field_plan(
8563 ancestor in defer_usage_set for ancestor in defer_usage .ancestors
8664 )
8765 }
88- map_ [response_key ] = (defer_usage_set , field_details_list )
66+ map_ [response_key ] = (defer_usage_set , field_group )
8967
90- for response_key , [defer_usage_set , field_details_list ] in map_ .items ():
68+ for response_key , [defer_usage_set , field_group ] in map_ .items ():
9169 if defer_usage_set == parent_defer_usages :
92- field_group = grouped_field_set .get (response_key )
93- if field_group is None : # pragma: no cover else
94- field_group = FieldGroup ([], defer_usage_set )
95- grouped_field_set [response_key ] = field_group
96- field_group .fields .extend (field_details_list )
70+ grouped_field_set [response_key ] = field_group
9771 continue
9872
9973 for (
@@ -107,10 +81,6 @@ def build_field_plan(
10781 new_grouped_field_set = {}
10882 new_grouped_field_sets [defer_usage_set ] = new_grouped_field_set
10983
110- field_group = new_grouped_field_set .get (response_key )
111- if field_group is None : # pragma: no cover else
112- field_group = FieldGroup ([], defer_usage_set )
113- new_grouped_field_set [response_key ] = field_group
114- field_group .fields .extend (field_details_list )
84+ new_grouped_field_set [response_key ] = field_group
11585
11686 return FieldPlan (grouped_field_set , new_grouped_field_sets )
0 commit comments