Skip to content

Commit 5767280

Browse files
committed
incremental: introduce GraphQLWrappedResult to avoid filtering
Replicates graphql/graphql-js@05e7a29
1 parent 55efd7c commit 5767280

File tree

13 files changed

+1562
-1394
lines changed

13 files changed

+1562
-1394
lines changed

docs/conf.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,11 @@
147147
"TContext",
148148
"Enum",
149149
"traceback",
150-
"types.TracebackType",
151150
"TypeMap",
152151
"AwaitableOrValue",
153152
"DeferredFragmentRecord",
153+
"DeferredGroupedFieldSetRecord",
154+
"DeferredGroupedFieldSetResult",
154155
"DeferUsage",
155156
"EnterLeaveVisitor",
156157
"ExperimentalIncrementalExecutionResults",
@@ -167,15 +168,18 @@
167168
"GraphQLNullableType",
168169
"GraphQLOutputType",
169170
"GraphQLTypeResolver",
171+
"GraphQLWrappedResult",
170172
"GroupedFieldSet",
171173
"IncrementalDataRecord",
172174
"IncrementalResult",
173-
"InitialResultRecord",
174175
"Middleware",
175176
"PendingResult",
176177
"StreamItemsRecord",
178+
"StreamItemsResult",
177179
"StreamRecord",
178180
"SubsequentDataRecord",
181+
"SubsequentResultRecord",
182+
"UndefinedType",
179183
"asyncio.events.AbstractEventLoop",
180184
"collections.abc.MutableMapping",
181185
"collections.abc.MutableSet",
@@ -187,16 +191,23 @@
187191
"graphql.execution.execute.SubFieldPlan",
188192
"graphql.execution.execute.StreamUsage",
189193
"graphql.execution.map_async_iterable.map_async_iterable",
194+
"graphql.execution.incremental_publisher.BareDeferredGroupedFieldSetResult",
195+
"graphql.execution.incremental_publisher.BareStreamItemsResult",
196+
"graphql.execution.incremental_publisher.CancellableStreamRecord",
190197
"graphql.execution.incremental_publisher.CompletedResult",
191198
"graphql.execution.incremental_publisher.DeferredFragmentRecord",
192199
"graphql.execution.incremental_publisher.DeferredGroupedFieldSetRecord",
193200
"graphql.execution.incremental_publisher.FormattedCompletedResult",
194201
"graphql.execution.incremental_publisher.FormattedPendingResult",
195202
"graphql.execution.incremental_publisher.IncrementalPublisher",
196-
"graphql.execution.incremental_publisher.InitialResultRecord",
203+
"graphql.execution.incremental_publisher.IncrementalPublisherContext",
204+
"graphql.execution.incremental_publisher.NonReconcilableStreamItemsResult",
197205
"graphql.execution.incremental_publisher.PendingResult",
206+
"graphql.execution.incremental_publisher.ReconcilableStreamItemsResult",
198207
"graphql.execution.incremental_publisher.StreamItemsRecord",
199208
"graphql.execution.incremental_publisher.StreamRecord",
209+
"graphql.execution.incremental_publisher.SubsequentResultRecord",
210+
"graphql.execution.incremental_publisher.TerminatingStreamItemsResult",
200211
"graphql.execution.Middleware",
201212
"graphql.language.lexer.EscapeSequence",
202213
"graphql.language.visitor.EnterLeaveVisitor",

pyproject.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,10 @@ module = [
288288
disallow_untyped_defs = false
289289

290290
[tool.pyright]
291+
# silence pyright since we're using mypy already
292+
reportArgumentType = false
291293
reportIncompatibleVariableOverride = false
294+
reportMissingModuleSource = false
292295
reportMissingTypeArgument = false
293296
reportReturnType = false
294297
reportUnknownArgumentType = false

src/graphql/execution/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
"""
66

77
from .execute import (
8-
ASYNC_DELAY,
98
create_source_event_stream,
109
execute,
1110
experimental_execute_incrementally,
@@ -36,7 +35,6 @@
3635
from .values import get_argument_values, get_directive_values, get_variable_values
3736

3837
__all__ = [
39-
"ASYNC_DELAY",
4038
"ExecutionContext",
4139
"ExecutionResult",
4240
"ExperimentalIncrementalExecutionResults",

src/graphql/execution/build_field_plan.py

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
"FieldGroup",
2222
"FieldPlan",
2323
"GroupedFieldSet",
24-
"NewGroupedFieldSetDetails",
2524
"build_field_plan",
2625
]
2726

@@ -46,18 +45,11 @@ def to_nodes(self) -> list[FieldNode]:
4645
GroupedFieldSet: TypeAlias = dict[str, FieldGroup]
4746

4847

49-
class NewGroupedFieldSetDetails(NamedTuple):
50-
"""Details of a new grouped field set."""
51-
52-
grouped_field_set: GroupedFieldSet
53-
should_initiate_defer: bool
54-
55-
5648
class FieldPlan(NamedTuple):
5749
"""A plan for executing fields."""
5850

5951
grouped_field_set: GroupedFieldSet
60-
new_grouped_field_set_details_map: RefMap[DeferUsageSet, NewGroupedFieldSetDetails]
52+
new_grouped_field_sets: RefMap[DeferUsageSet, GroupedFieldSet]
6153

6254

6355
def build_field_plan(
@@ -70,9 +62,7 @@ def build_field_plan(
7062

7163
grouped_field_set: GroupedFieldSet = {}
7264

73-
new_grouped_field_set_details_map: RefMap[
74-
DeferUsageSet, NewGroupedFieldSetDetails
75-
] = RefMap()
65+
new_grouped_field_sets: RefMap[DeferUsageSet, GroupedFieldSet] = RefMap()
7666

7767
map_: dict[str, tuple[DeferUsageSet, list[FieldDetails]]] = {}
7868

@@ -108,28 +98,19 @@ def build_field_plan(
10898

10999
for (
110100
new_grouped_field_set_defer_usage_set,
111-
new_grouped_field_set_details,
112-
) in new_grouped_field_set_details_map.items():
101+
new_grouped_field_set_field_group,
102+
) in new_grouped_field_sets.items():
113103
if new_grouped_field_set_defer_usage_set == defer_usage_set:
114-
new_grouped_field_set = new_grouped_field_set_details.grouped_field_set
104+
new_grouped_field_set = new_grouped_field_set_field_group
115105
break
116106
else:
117107
new_grouped_field_set = {}
118-
new_grouped_field_set_details = NewGroupedFieldSetDetails(
119-
new_grouped_field_set,
120-
any(
121-
defer_usage not in parent_defer_usages
122-
for defer_usage in defer_usage_set
123-
),
124-
)
125-
new_grouped_field_set_details_map[defer_usage_set] = (
126-
new_grouped_field_set_details
127-
)
108+
new_grouped_field_sets[defer_usage_set] = new_grouped_field_set
128109

129110
field_group = new_grouped_field_set.get(response_key)
130111
if field_group is None: # pragma: no cover else
131112
field_group = FieldGroup([], defer_usage_set)
132113
new_grouped_field_set[response_key] = field_group
133114
field_group.fields.extend(field_details_list)
134115

135-
return FieldPlan(grouped_field_set, new_grouped_field_set_details_map)
116+
return FieldPlan(grouped_field_set, new_grouped_field_sets)

0 commit comments

Comments
 (0)