strawberry-graphql 0.266.1__py3-none-any.whl → 0.267.0.dev1746643548__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
strawberry/__init__.py CHANGED
@@ -11,6 +11,7 @@ from .permission import BasePermission
11
11
  from .scalars import ID
12
12
  from .schema import Schema
13
13
  from .schema_directive import schema_directive
14
+ from .streamable import Streamable
14
15
  from .types.arguments import argument
15
16
  from .types.auto import auto
16
17
  from .types.cast import cast
@@ -37,6 +38,7 @@ __all__ = [
37
38
  "Private",
38
39
  "Schema",
39
40
  "Some",
41
+ "Streamable",
40
42
  "argument",
41
43
  "asdict",
42
44
  "auto",
strawberry/annotation.py CHANGED
@@ -17,6 +17,7 @@ from typing import (
17
17
  )
18
18
  from typing_extensions import Self, get_args, get_origin
19
19
 
20
+ from strawberry.streamable import StrawberryStreamable
20
21
  from strawberry.types.base import (
21
22
  StrawberryList,
22
23
  StrawberryMaybe,
@@ -143,6 +144,8 @@ class StrawberryAnnotation:
143
144
 
144
145
  if self._is_lazy_type(evaled_type):
145
146
  return evaled_type
147
+ if self._is_streamable(evaled_type, args):
148
+ return self.create_list(list[evaled_type])
146
149
  if self._is_list(evaled_type):
147
150
  return self.create_list(evaled_type)
148
151
  if type_of := self._get_maybe_type(evaled_type):
@@ -323,6 +326,10 @@ class StrawberryAnnotation:
323
326
  def _get_maybe_type(cls, annotation: Any) -> type | None:
324
327
  return get_args(annotation)[0] if _annotation_is_maybe(annotation) else None
325
328
 
329
+ @classmethod
330
+ def _is_streamable(cls, annotation: Any, args: list[Any]) -> bool:
331
+ return any(isinstance(arg, StrawberryStreamable) for arg in args)
332
+
326
333
  @classmethod
327
334
  def _is_strawberry_type(cls, evaled_type: Any) -> bool:
328
335
  # Prevent import cycles
@@ -1,11 +1,13 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import TYPE_CHECKING, Any, Optional
4
+ from typing import Any, Optional
5
5
  from typing_extensions import Literal, TypedDict
6
6
 
7
- if TYPE_CHECKING:
8
- from strawberry.types import ExecutionResult
7
+ from strawberry.schema._graphql_core import (
8
+ GraphQLIncrementalExecutionResults,
9
+ ResultType,
10
+ )
9
11
 
10
12
 
11
13
  class GraphQLHTTPResponse(TypedDict, total=False):
@@ -14,13 +16,16 @@ class GraphQLHTTPResponse(TypedDict, total=False):
14
16
  extensions: Optional[dict[str, object]]
15
17
 
16
18
 
17
- def process_result(result: ExecutionResult) -> GraphQLHTTPResponse:
18
- data: GraphQLHTTPResponse = {"data": result.data}
19
+ def process_result(result: ResultType) -> GraphQLHTTPResponse:
20
+ if isinstance(result, GraphQLIncrementalExecutionResults):
21
+ return result
19
22
 
20
- if result.errors:
21
- data["errors"] = [err.formatted for err in result.errors]
22
- if result.extensions:
23
- data["extensions"] = result.extensions
23
+ errors, extensions = result.errors, result.extensions
24
+ data: GraphQLHTTPResponse = {
25
+ "data": result.data,
26
+ **({"errors": [err.formatted for err in errors]} if errors else {}),
27
+ **({"extensions": extensions} if extensions else {}),
28
+ }
24
29
 
25
30
  return data
26
31
 
@@ -25,6 +25,9 @@ from strawberry.http import (
25
25
  process_result,
26
26
  )
27
27
  from strawberry.http.ides import GraphQL_IDE
28
+ from strawberry.schema._graphql_core import (
29
+ GraphQLIncrementalExecutionResults,
30
+ )
28
31
  from strawberry.schema.base import BaseSchema
29
32
  from strawberry.schema.exceptions import InvalidOperationTypeError
30
33
  from strawberry.subscriptions import GRAPHQL_TRANSPORT_WS_PROTOCOL, GRAPHQL_WS_PROTOCOL
@@ -258,7 +261,7 @@ class AsyncBaseHTTPView(
258
261
  root_value: Optional[RootValue] = UNSET,
259
262
  ) -> WebSocketResponse: ...
260
263
 
261
- async def run(
264
+ async def run( # noqa: PLR0915
262
265
  self,
263
266
  request: Union[Request, WebSocketRequest],
264
267
  context: Optional[Context] = UNSET,
@@ -349,6 +352,75 @@ class AsyncBaseHTTPView(
349
352
  "Content-Type": "multipart/mixed;boundary=graphql;subscriptionSpec=1.0,application/json",
350
353
  },
351
354
  )
355
+ if isinstance(result, GraphQLIncrementalExecutionResults):
356
+
357
+ async def stream() -> AsyncGenerator[str, None]:
358
+ yield "---"
359
+
360
+ response = await self.process_result(request, result.initial_result)
361
+
362
+ response["hasNext"] = result.initial_result.has_next
363
+ response["pending"] = [
364
+ p.formatted for p in result.initial_result.pending
365
+ ]
366
+ response["extensions"] = result.initial_result.extensions
367
+
368
+ yield self.encode_multipart_data(response, "-")
369
+
370
+ all_pending = result.initial_result.pending
371
+
372
+ async for value in result.subsequent_results:
373
+ response = {
374
+ "hasNext": value.has_next,
375
+ "extensions": value.extensions,
376
+ }
377
+
378
+ if value.pending:
379
+ response["pending"] = [p.formatted for p in value.pending]
380
+
381
+ if value.completed:
382
+ response["completed"] = [p.formatted for p in value.completed]
383
+
384
+ if value.incremental:
385
+ incremental = []
386
+
387
+ all_pending.extend(value.pending)
388
+
389
+ for incremental_value in value.incremental:
390
+ pending_value = next(
391
+ (
392
+ v
393
+ for v in all_pending
394
+ if v.id == incremental_value.id
395
+ ),
396
+ None,
397
+ )
398
+
399
+ assert pending_value
400
+
401
+ incremental.append(
402
+ {
403
+ **incremental_value.formatted,
404
+ "path": pending_value.path,
405
+ "label": pending_value.label,
406
+ }
407
+ )
408
+
409
+ response["incremental"] = incremental
410
+
411
+ yield self.encode_multipart_data(response, "-")
412
+
413
+ yield "--\r\n"
414
+
415
+ return await self.create_streaming_response(
416
+ request,
417
+ stream,
418
+ sub_response,
419
+ headers={
420
+ "Transfer-Encoding": "chunked",
421
+ "Content-Type": 'multipart/mixed; boundary="-"',
422
+ },
423
+ )
352
424
 
353
425
  response_data = await self.process_result(request=request, result=result)
354
426
 
@@ -360,12 +432,16 @@ class AsyncBaseHTTPView(
360
432
  )
361
433
 
362
434
  def encode_multipart_data(self, data: Any, separator: str) -> str:
435
+ encoded_data = self.encode_json(data)
436
+
363
437
  return "".join(
364
438
  [
365
- f"\r\n--{separator}\r\n",
366
- "Content-Type: application/json\r\n\r\n",
367
- self.encode_json(data),
368
- "\n",
439
+ "\r\n",
440
+ "Content-Type: application/json; charset=utf-8\r\n",
441
+ "Content-Length: " + str(len(encoded_data)) + "\r\n",
442
+ "\r\n",
443
+ encoded_data,
444
+ f"\r\n--{separator}",
369
445
  ]
370
446
  )
371
447
 
@@ -561,9 +561,9 @@ def print_schema_definition(
561
561
  def print_directive(
562
562
  directive: GraphQLDirective, *, schema: BaseSchema
563
563
  ) -> Optional[str]:
564
- strawberry_directive = directive.extensions["strawberry-definition"]
564
+ strawberry_directive = directive.extensions.get("strawberry-definition")
565
565
 
566
- if (
566
+ if strawberry_directive is None or (
567
567
  isinstance(strawberry_directive, StrawberrySchemaDirective)
568
568
  and not strawberry_directive.print_definition
569
569
  ):
@@ -621,6 +621,14 @@ def print_schema(schema: BaseSchema) -> str:
621
621
  if (printed_directive := print_directive(directive, schema=schema)) is not None
622
622
  ]
623
623
 
624
+ if schema.config.enable_experimental_incremental_execution:
625
+ directives.append(
626
+ "directive @defer(if: Boolean, label: String) on FRAGMENT_SPREAD | INLINE_FRAGMENT"
627
+ )
628
+ directives.append(
629
+ "directive @stream(if: Boolean, label: String, initialCount: Int = 0) on FIELD"
630
+ )
631
+
624
632
  def _name_getter(type_: Any) -> str:
625
633
  if hasattr(type_, "name"):
626
634
  return type_.name
@@ -0,0 +1,46 @@
1
+ from typing import Union
2
+
3
+ from graphql.execution import ExecutionContext as GraphQLExecutionContext
4
+ from graphql.execution import ExecutionResult as GraphQLExecutionResult
5
+ from graphql.execution import execute, subscribe
6
+
7
+ from strawberry.types import ExecutionResult
8
+
9
+ try:
10
+ from graphql import (
11
+ ExperimentalIncrementalExecutionResults as GraphQLIncrementalExecutionResults,
12
+ )
13
+ from graphql.execution import experimental_execute_incrementally
14
+ from graphql.type.directives import (
15
+ GraphQLDeferDirective,
16
+ GraphQLStreamDirective,
17
+ )
18
+
19
+ incremental_execution_directives = (
20
+ GraphQLDeferDirective,
21
+ GraphQLStreamDirective,
22
+ )
23
+
24
+ except ImportError:
25
+ GraphQLIncrementalExecutionResults = type(None)
26
+
27
+ incremental_execution_directives = []
28
+ experimental_execute_incrementally = None
29
+
30
+
31
+ # TODO: give this a better name, maybe also a better place
32
+ ResultType = Union[
33
+ GraphQLExecutionResult,
34
+ GraphQLIncrementalExecutionResults,
35
+ ExecutionResult,
36
+ ]
37
+
38
+ __all__ = [
39
+ "GraphQLExecutionContext",
40
+ "GraphQLIncrementalExecutionResults",
41
+ "ResultType",
42
+ "execute",
43
+ "experimental_execute_incrementally",
44
+ "incremental_execution_directives",
45
+ "subscribe",
46
+ ]
@@ -16,6 +16,7 @@ class StrawberryConfig:
16
16
  relay_max_results: int = 100
17
17
  disable_field_suggestions: bool = False
18
18
  info_class: type[Info] = Info
19
+ enable_experimental_incremental_execution: bool = False
19
20
 
20
21
  def __post_init__(
21
22
  self,
@@ -29,8 +29,6 @@ from graphql import (
29
29
  parse,
30
30
  validate_schema,
31
31
  )
32
- from graphql.execution import ExecutionContext as GraphQLExecutionContext
33
- from graphql.execution import execute, subscribe
34
32
  from graphql.execution.middleware import MiddlewareManager
35
33
  from graphql.type.directives import specified_directives
36
34
  from graphql.validation import validate
@@ -64,6 +62,15 @@ from strawberry.utils.aio import aclosing
64
62
  from strawberry.utils.await_maybe import await_maybe
65
63
 
66
64
  from . import compat
65
+ from ._graphql_core import (
66
+ GraphQLExecutionContext,
67
+ GraphQLIncrementalExecutionResults,
68
+ ResultType,
69
+ execute,
70
+ experimental_execute_incrementally,
71
+ incremental_execution_directives,
72
+ subscribe,
73
+ )
67
74
  from .base import BaseSchema
68
75
  from .config import StrawberryConfig
69
76
  from .exceptions import InvalidOperationTypeError
@@ -92,6 +99,7 @@ OriginSubscriptionResult = Union[
92
99
  AsyncIterator[OriginalExecutionResult],
93
100
  ]
94
101
 
102
+
95
103
  DEFAULT_ALLOWED_OPERATION_TYPES = {
96
104
  OperationType.QUERY,
97
105
  OperationType.MUTATION,
@@ -262,11 +270,16 @@ class Schema(BaseSchema):
262
270
  graphql_types.append(graphql_type)
263
271
 
264
272
  try:
273
+ directives = specified_directives + tuple(graphql_directives)
274
+
275
+ if self.config.enable_experimental_incremental_execution:
276
+ directives = tuple(directives) + tuple(incremental_execution_directives)
277
+
265
278
  self._schema = GraphQLSchema(
266
279
  query=query_type,
267
280
  mutation=mutation_type,
268
281
  subscription=subscription_type if subscription else None,
269
- directives=specified_directives + tuple(graphql_directives),
282
+ directives=directives,
270
283
  types=graphql_types,
271
284
  extensions={
272
285
  GraphQLCoreConverter.DEFINITION_BACKREF: self,
@@ -444,12 +457,16 @@ class Schema(BaseSchema):
444
457
  async def _handle_execution_result(
445
458
  self,
446
459
  context: ExecutionContext,
447
- result: Union[GraphQLExecutionResult, ExecutionResult],
460
+ result: ResultType,
448
461
  extensions_runner: SchemaExtensionsRunner,
449
462
  *,
450
463
  # TODO: can we remove this somehow, see comment in execute
451
464
  skip_process_errors: bool = False,
452
465
  ) -> ExecutionResult:
466
+ # TODO: handle this, also, why do we have both GraphQLExecutionResult and ExecutionResult?
467
+ if isinstance(result, GraphQLIncrementalExecutionResults):
468
+ return result
469
+
453
470
  # Set errors on the context so that it's easier
454
471
  # to access in extensions
455
472
  if result.errors:
@@ -490,6 +507,17 @@ class Schema(BaseSchema):
490
507
  extensions_runner = self.create_extensions_runner(execution_context, extensions)
491
508
  middleware_manager = self._get_middleware_manager(extensions)
492
509
 
510
+ execute_function = execute
511
+
512
+ if self.config.enable_experimental_incremental_execution:
513
+ execute_function = experimental_execute_incrementally
514
+
515
+ if execute_function is None:
516
+ raise RuntimeError(
517
+ "Incremental execution is enabled but experimental_execute_incrementally is not available, "
518
+ "please install graphql-core>=3.3.0"
519
+ )
520
+
493
521
  try:
494
522
  async with extensions_runner.operation():
495
523
  # Note: In graphql-core the schema would be validated here but in
@@ -508,7 +536,7 @@ class Schema(BaseSchema):
508
536
  async with extensions_runner.executing():
509
537
  if not execution_context.result:
510
538
  result = await await_maybe(
511
- execute(
539
+ execute_function(
512
540
  self._schema,
513
541
  execution_context.graphql_document,
514
542
  root_value=execution_context.root_value,
@@ -524,7 +552,9 @@ class Schema(BaseSchema):
524
552
  result = execution_context.result
525
553
  # Also set errors on the execution_context so that it's easier
526
554
  # to access in extensions
527
- if result.errors:
555
+
556
+ # TODO: maybe here use the first result from incremental execution if it exists
557
+ if isinstance(result, GraphQLExecutionResult) and result.errors:
528
558
  execution_context.errors = result.errors
529
559
 
530
560
  # Run the `Schema.process_errors` function here before
@@ -574,6 +604,16 @@ class Schema(BaseSchema):
574
604
  extensions_runner = self.create_extensions_runner(execution_context, extensions)
575
605
  middleware_manager = self._get_middleware_manager(extensions)
576
606
 
607
+ execute_function = execute
608
+
609
+ if self.config.enable_experimental_incremental_execution:
610
+ execute_function = experimental_execute_incrementally
611
+
612
+ if execute_function is None:
613
+ raise RuntimeError(
614
+ "Incremental execution is enabled but experimental_execute_incrementally is not available, "
615
+ "please install graphql-core>=3.3.0"
616
+ )
577
617
  try:
578
618
  with extensions_runner.operation():
579
619
  # Note: In graphql-core the schema would be validated here but in
@@ -615,7 +655,7 @@ class Schema(BaseSchema):
615
655
 
616
656
  with extensions_runner.executing():
617
657
  if not execution_context.result:
618
- result = execute(
658
+ result = execute_function(
619
659
  self._schema,
620
660
  execution_context.graphql_document,
621
661
  root_value=execution_context.root_value,
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html>
3
3
  <head>
4
4
  <title>Strawberry GraphiQL</title>
@@ -61,8 +61,8 @@
61
61
  <link
62
62
  crossorigin
63
63
  rel="stylesheet"
64
- href="https://unpkg.com/graphiql@3.0.9/graphiql.min.css"
65
- integrity="sha384-yz3/sqpuplkA7msMo0FE4ekg0xdwdvZ8JX9MVZREsxipqjU4h8IRfmAMRcb1QpUy"
64
+ href="https://unpkg.com/graphiql@3.8.3/graphiql.min.css"
65
+ integrity="sha384-Mq3vbRBY71jfjQAt/DcjxUIYY33ksal4cgdRt9U/hNPvHBCaT2JfJ/PTRiPKf0aM"
66
66
  />
67
67
 
68
68
  <link
@@ -77,8 +77,8 @@
77
77
  <div id="graphiql" class="graphiql-container">Loading...</div>
78
78
  <script
79
79
  crossorigin
80
- src="https://unpkg.com/graphiql@3.0.9/graphiql.min.js"
81
- integrity="sha384-Mjte+vxCWz1ZYCzszGHiJqJa5eAxiqI4mc3BErq7eDXnt+UGLXSEW7+i0wmfPiji"
80
+ src="https://unpkg.com/graphiql@3.8.3/graphiql.min.js"
81
+ integrity="sha384-HbRVEFG0JGJZeAHCJ9Xm2+tpknBQ7QZmNlO/DgZtkZ0aJSypT96YYGRNod99l9Ie"
82
82
  ></script>
83
83
  <script
84
84
  crossorigin
@@ -0,0 +1,36 @@
1
+ from collections.abc import AsyncGenerator
2
+ from typing import Annotated, TypeVar
3
+
4
+
5
+ class StrawberryStreamable: ...
6
+
7
+
8
+ T = TypeVar("T")
9
+
10
+ Streamable = Annotated[AsyncGenerator[T, None], StrawberryStreamable()]
11
+ """Represents a list that can be streamed using @stream.
12
+
13
+ Example:
14
+
15
+ ```python
16
+ import strawberry
17
+ from dataclasses import dataclass
18
+
19
+
20
+ @strawberry.type
21
+ class Comment:
22
+ id: strawberry.ID
23
+ content: str
24
+
25
+
26
+ @strawberry.type
27
+ class Article:
28
+ @strawberry.field
29
+ @staticmethod
30
+ async def comments() -> strawberry.Streamable[Comment]:
31
+ for comment in fetch_comments():
32
+ yield comment
33
+ ```
34
+ """
35
+
36
+ __all__ = ["Streamable"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: strawberry-graphql
3
- Version: 0.266.1
3
+ Version: 0.267.0.dev1746643548
4
4
  Summary: A library for creating GraphQL APIs
5
5
  License: MIT
6
6
  Keywords: graphql,api,rest,starlette,async
@@ -1,10 +1,10 @@
1
- strawberry/__init__.py,sha256=-K---AYIgHvBVYF_9oovgEPNBbymXH673bntlV9sOeU,1491
1
+ strawberry/__init__.py,sha256=tavG4mNFBNHhGBoFR2T7fhiCQ7P-ITHify10nkKBOJE,1544
2
2
  strawberry/__main__.py,sha256=3U77Eu21mJ-LY27RG-JEnpbh6Z63wGOom4i-EoLtUcY,59
3
3
  strawberry/aiohttp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  strawberry/aiohttp/test/__init__.py,sha256=4xxdUZtIISSOwjrcnmox7AvT4WWjowCm5bUuPdQneMg,71
5
5
  strawberry/aiohttp/test/client.py,sha256=8FKZTnvawxYpgEICOri-34O3wHRHLhRpjH_Ktp2EupQ,1801
6
6
  strawberry/aiohttp/views.py,sha256=AQVBbZTBa127TbQRwoBelTHrVdZnJeGdMYcTfNmoaSc,7887
7
- strawberry/annotation.py,sha256=iqSXtJ4pTTLDZRPyil0f-yzpcCm8UYRiwvFWkD5LgpQ,13498
7
+ strawberry/annotation.py,sha256=YGauf-nyuW-RGdjEu5RBxgcYV31cHx3pDLwqqjlgKv8,13822
8
8
  strawberry/asgi/__init__.py,sha256=psdKl_52LGkxKKbzZlmwNGZ9jz2FLyLSC7fUhys4FqY,8169
9
9
  strawberry/asgi/test/__init__.py,sha256=4xxdUZtIISSOwjrcnmox7AvT4WWjowCm5bUuPdQneMg,71
10
10
  strawberry/asgi/test/client.py,sha256=kp2O5znHWuAB5VVYO8p4XPSTEDDXBSjNz5WHqW0r6GM,1473
@@ -130,8 +130,8 @@ strawberry/file_uploads/scalars.py,sha256=NRDeB7j8aotqIkz9r62ISTf4DrxQxEZYUuHsX5
130
130
  strawberry/file_uploads/utils.py,sha256=-c6TbqUI-Dkb96hWCrZabh6TL2OabBuQNkCarOqgDm4,1181
131
131
  strawberry/flask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
132
  strawberry/flask/views.py,sha256=MCvAsNgTZLU8RvTYKWfnLU2w7Wv1ZZpxW9W3TyTZuPY,6355
133
- strawberry/http/__init__.py,sha256=BV_JpUwNongW38UzFstM72hDXNUjSxdJm_M96pDFU1c,1122
134
- strawberry/http/async_base_view.py,sha256=9micSD_KpoB8oBHAPlcTpt44bVABDYScvyfHa3NP4rE,16352
133
+ strawberry/http/__init__.py,sha256=nvy1c7CGHMJlOE9rSiTl6D7eiqWixC1G6x4evgIEKgk,1275
134
+ strawberry/http/async_base_view.py,sha256=hDHVAS9ZVsY0apn109oMX-HLNbMiQinPrp8iYYf6rBQ,19151
135
135
  strawberry/http/base.py,sha256=Lz-u5SWg2uQp3l5GMKZDPQuJOR42LXHgjV1PZHwiapE,2373
136
136
  strawberry/http/exceptions.py,sha256=9E2dreS1crRoJVUEPuHyx23NcDELDHNzkAOa-rGv-8I,348
137
137
  strawberry/http/ides.py,sha256=WjU0nsMDgr3Bd1ebWkUEkO2d1hk0dI16mLqXyCHqklA,613
@@ -146,7 +146,7 @@ strawberry/parent.py,sha256=wViSVYl5ADuyy2EGaS98by_iT1ep9xTP2od8NB_EIuw,742
146
146
  strawberry/permission.py,sha256=dSRJMjSCmTlXfvfC24kCSrAk0txTjYKTJ5ZVU5IW91Y,7537
147
147
  strawberry/printer/__init__.py,sha256=DmepjmgtkdF5RxK_7yC6qUyRWn56U-9qeZMbkztYB9w,62
148
148
  strawberry/printer/ast_from_value.py,sha256=Tkme60qlykbN2m3dNPNMOe65X-wj6EmcDQwgQv7gUkc,4987
149
- strawberry/printer/printer.py,sha256=49u3QwttTGvh13HXZtbTnkZzBwL1k5SLf8rXQLiTpl4,18814
149
+ strawberry/printer/printer.py,sha256=5E9w0wDsUv1hvkeXof12277NLMiCVy5MgJ6gSo_NJhQ,19177
150
150
  strawberry/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
151
  strawberry/quart/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
152
  strawberry/quart/views.py,sha256=Hjm93A9j9fy--DQVhsPQ_PakqYtajyWeuH7wUnSLYoA,4449
@@ -162,12 +162,13 @@ strawberry/sanic/utils.py,sha256=XjUVBFuBWfECBCZbx_YtrjQnFTUyIGTo7aISIeB22Gc,100
162
162
  strawberry/sanic/views.py,sha256=F5ZrKt-R3135evKLfhQuPd1isOexI0Lrzevm_6Te4Eg,7069
163
163
  strawberry/scalars.py,sha256=FcFTbu-yKbBfPCuAfXNa6DbTbEzF3eiQHs5nlt6GJdM,2234
164
164
  strawberry/schema/__init__.py,sha256=u1QCyDVQExUVDA20kyosKPz3TS5HMCN2NrXclhiFAL4,92
165
+ strawberry/schema/_graphql_core.py,sha256=XHsNZLkCyiH55jANK4XJIjq6VCMhN_MgZBEFWEYj5Jc,1237
165
166
  strawberry/schema/base.py,sha256=q5UAw6do4Ele5Cf8dNAouiPjNmZoCBNFqh5Vl05caCI,3864
166
167
  strawberry/schema/compat.py,sha256=9qJ0lhYJeaN43ayFgVz708ZMvedBhofiTSw9kpFqmjU,1830
167
- strawberry/schema/config.py,sha256=6BpCbNNCuekGgiKEPt2mliMqLH_wIjJmSW0tLbnJwk4,924
168
+ strawberry/schema/config.py,sha256=Nl-CWXlKyzcC0ZHoeJmGMXT5jPieC87NU7OqUltbAIk,984
168
169
  strawberry/schema/exceptions.py,sha256=rqVNb_oYrKM0dHPgvAemqCG6Um282LPPu4zwQ5cZqs4,584
169
170
  strawberry/schema/name_converter.py,sha256=xFOXEgqldFkxXRkIQvsJN1dPkWbEUaIrTYNOMYSEVwQ,6945
170
- strawberry/schema/schema.py,sha256=qthZttzb9a0GEcwh7trqBKHmuPXOgQlnceqiCRPj4_s,34566
171
+ strawberry/schema/schema.py,sha256=Jcdwv8M0HZD7T0T7XkaeI5l2WmqttPFmXMZaRXAyu-Y,36055
171
172
  strawberry/schema/schema_converter.py,sha256=ZNgpE-cTt0Hqw21yoT-3Fu2xk8SVC3uDq85V9JeKI7Q,37724
172
173
  strawberry/schema/types/__init__.py,sha256=oHO3COWhL3L1KLYCJNY1XFf5xt2GGtHiMC-UaYbFfnA,68
173
174
  strawberry/schema/types/base_scalars.py,sha256=JRUq0WjEkR9dFewstZnqnZKp0uOEipo4UXNF5dzRf4M,1971
@@ -179,8 +180,9 @@ strawberry/schema_codegen/__init__.py,sha256=mN4Qmu5Iakht6nHpRpt9hCs8e--oTPlVtDJ
179
180
  strawberry/schema_directive.py,sha256=CbjdX54EIeWGkJu4SgiLR8mph5_8wyNsgJk2oLoQK_0,2023
180
181
  strawberry/schema_directives.py,sha256=KGKFWCODjm1Ah9qNV_bBwbic7Mld4qLWnWQkev-PG8A,175
181
182
  strawberry/static/apollo-sandbox.html,sha256=2XzkbE0dqsFHqehE-jul9_J9TFOpwA6Ylrlo0Kdx_9w,973
182
- strawberry/static/graphiql.html,sha256=BkiqZlC63f1sHBDs_UpMzcibcNrHKh7K41Sp23yttfo,4257
183
+ strawberry/static/graphiql.html,sha256=0e3pvTnAet-lNEqA_pgJ8Ak2CdMt34zPKMMMzpAkEVU,4257
183
184
  strawberry/static/pathfinder.html,sha256=0DPx9AmJ2C_sJstFXnWOz9k5tVQHeHaK7qdVY4lAlmk,1547
185
+ strawberry/streamable.py,sha256=ylfMt5lfX7RRKGi86wWokvIgYQk5jZCvQVc3shK0epk,645
184
186
  strawberry/subscriptions/__init__.py,sha256=1VGmiCzFepqRFyCikagkUoHHdoTG3XYlFu9GafoQMws,170
185
187
  strawberry/subscriptions/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
188
  strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py,sha256=wN6dkMu6WiaIZTE19PGoN9xXpIN_RdDE_q7F7ZgjCxk,138
@@ -229,8 +231,8 @@ strawberry/utils/logging.py,sha256=U1cseHGquN09YFhFmRkiphfASKCyK0HUZREImPgVb0c,7
229
231
  strawberry/utils/operation.py,sha256=s7ajvLg_q6v2mg47kEMQPjO_J-XluMKTCwo4d47mGvE,1195
230
232
  strawberry/utils/str_converters.py,sha256=-eH1Cl16IO_wrBlsGM-km4IY0IKsjhjnSNGRGOwQjVM,897
231
233
  strawberry/utils/typing.py,sha256=Xmnhwvnw8RIQVIc5D5iI4_9qM4Thpk7tWx8xf-RW_So,13383
232
- strawberry_graphql-0.266.1.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
233
- strawberry_graphql-0.266.1.dist-info/METADATA,sha256=_RqVVXjFJ7svPPZ9xGPZHsBg5fjlnPAue2seThG3Tjo,7679
234
- strawberry_graphql-0.266.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
235
- strawberry_graphql-0.266.1.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
236
- strawberry_graphql-0.266.1.dist-info/RECORD,,
234
+ strawberry_graphql-0.267.0.dev1746643548.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
235
+ strawberry_graphql-0.267.0.dev1746643548.dist-info/METADATA,sha256=I6igiGpVkFoZPPYblq9GRM5MhVvVCE2t59SxUzE6y2s,7693
236
+ strawberry_graphql-0.267.0.dev1746643548.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
237
+ strawberry_graphql-0.267.0.dev1746643548.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
238
+ strawberry_graphql-0.267.0.dev1746643548.dist-info/RECORD,,