2
2
3
3
from __future__ import annotations
4
4
5
- import sys
6
- from typing import TYPE_CHECKING , Dict , NamedTuple
5
+ from typing import NamedTuple
7
6
8
7
from ..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
13
9
14
10
try :
15
11
from typing import TypeAlias
18
14
19
15
__all__ = [
20
16
"DeferUsageSet" ,
21
- "FieldGroup" ,
22
17
"FieldPlan" ,
23
18
"GroupedFieldSet" ,
24
19
"build_field_plan" ,
28
23
DeferUsageSet : TypeAlias = RefSet [DeferUsage ]
29
24
30
25
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
-
48
26
class FieldPlan (NamedTuple ):
49
27
"""A plan for executing fields."""
50
28
@@ -53,7 +31,7 @@ class FieldPlan(NamedTuple):
53
31
54
32
55
33
def build_field_plan (
56
- fields : dict [ str , list [ FieldDetails ]] ,
34
+ original_grouped_field_set : GroupedFieldSet ,
57
35
parent_defer_usages : DeferUsageSet | None = None ,
58
36
) -> FieldPlan :
59
37
"""Build a plan for executing fields."""
@@ -64,12 +42,12 @@ def build_field_plan(
64
42
65
43
new_grouped_field_sets : RefMap [DeferUsageSet , GroupedFieldSet ] = RefMap ()
66
44
67
- map_ : dict [str , tuple [DeferUsageSet , list [ FieldDetails ] ]] = {}
45
+ map_ : dict [str , tuple [DeferUsageSet , FieldGroup ]] = {}
68
46
69
- for response_key , field_details_list in fields .items ():
47
+ for response_key , field_group in original_grouped_field_set .items ():
70
48
defer_usage_set : RefSet [DeferUsage ] = RefSet ()
71
49
in_original_result = False
72
- for field_details in field_details_list :
50
+ for field_details in field_group :
73
51
defer_usage = field_details .defer_usage
74
52
if defer_usage is None :
75
53
in_original_result = True
@@ -85,15 +63,11 @@ def build_field_plan(
85
63
ancestor in defer_usage_set for ancestor in defer_usage .ancestors
86
64
)
87
65
}
88
- map_ [response_key ] = (defer_usage_set , field_details_list )
66
+ map_ [response_key ] = (defer_usage_set , field_group )
89
67
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 ():
91
69
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
97
71
continue
98
72
99
73
for (
@@ -107,10 +81,6 @@ def build_field_plan(
107
81
new_grouped_field_set = {}
108
82
new_grouped_field_sets [defer_usage_set ] = new_grouped_field_set
109
83
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
115
85
116
86
return FieldPlan (grouped_field_set , new_grouped_field_sets )
0 commit comments