strawberry-graphql 0.275.1__py3-none-any.whl → 0.276.0.dev1750672223__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 self._is_maybe(evaled_type):
@@ -332,6 +335,10 @@ class StrawberryAnnotation:
332
335
  def _is_maybe(cls, annotation: Any) -> bool:
333
336
  return _annotation_is_maybe(annotation)
334
337
 
338
+ @classmethod
339
+ def _is_streamable(cls, annotation: Any, args: list[Any]) -> bool:
340
+ return any(isinstance(arg, StrawberryStreamable) for arg in args)
341
+
335
342
  @classmethod
336
343
  def _is_strawberry_type(cls, evaled_type: Any) -> bool:
337
344
  # 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 (
30
33
  CannotGetOperationTypeError,
@@ -263,7 +266,7 @@ class AsyncBaseHTTPView(
263
266
  root_value: Optional[RootValue] = UNSET,
264
267
  ) -> WebSocketResponse: ...
265
268
 
266
- async def run(
269
+ async def run( # noqa: PLR0915
267
270
  self,
268
271
  request: Union[Request, WebSocketRequest],
269
272
  context: Context = UNSET,
@@ -354,6 +357,75 @@ class AsyncBaseHTTPView(
354
357
  "Content-Type": "multipart/mixed;boundary=graphql;subscriptionSpec=1.0,application/json",
355
358
  },
356
359
  )
360
+ if isinstance(result, GraphQLIncrementalExecutionResults):
361
+
362
+ async def stream() -> AsyncGenerator[str, None]:
363
+ yield "---"
364
+
365
+ response = await self.process_result(request, result.initial_result)
366
+
367
+ response["hasNext"] = result.initial_result.has_next
368
+ response["pending"] = [
369
+ p.formatted for p in result.initial_result.pending
370
+ ]
371
+ response["extensions"] = result.initial_result.extensions
372
+
373
+ yield self.encode_multipart_data(response, "-")
374
+
375
+ all_pending = result.initial_result.pending
376
+
377
+ async for value in result.subsequent_results:
378
+ response = {
379
+ "hasNext": value.has_next,
380
+ "extensions": value.extensions,
381
+ }
382
+
383
+ if value.pending:
384
+ response["pending"] = [p.formatted for p in value.pending]
385
+
386
+ if value.completed:
387
+ response["completed"] = [p.formatted for p in value.completed]
388
+
389
+ if value.incremental:
390
+ incremental = []
391
+
392
+ all_pending.extend(value.pending)
393
+
394
+ for incremental_value in value.incremental:
395
+ pending_value = next(
396
+ (
397
+ v
398
+ for v in all_pending
399
+ if v.id == incremental_value.id
400
+ ),
401
+ None,
402
+ )
403
+
404
+ assert pending_value
405
+
406
+ incremental.append(
407
+ {
408
+ **incremental_value.formatted,
409
+ "path": pending_value.path,
410
+ "label": pending_value.label,
411
+ }
412
+ )
413
+
414
+ response["incremental"] = incremental
415
+
416
+ yield self.encode_multipart_data(response, "-")
417
+
418
+ yield "--\r\n"
419
+
420
+ return await self.create_streaming_response(
421
+ request,
422
+ stream,
423
+ sub_response,
424
+ headers={
425
+ "Transfer-Encoding": "chunked",
426
+ "Content-Type": 'multipart/mixed; boundary="-"',
427
+ },
428
+ )
357
429
 
358
430
  response_data = await self.process_result(request=request, result=result)
359
431
 
@@ -365,12 +437,16 @@ class AsyncBaseHTTPView(
365
437
  )
366
438
 
367
439
  def encode_multipart_data(self, data: Any, separator: str) -> str:
440
+ encoded_data = self.encode_json(data)
441
+
368
442
  return "".join(
369
443
  [
370
- f"\r\n--{separator}\r\n",
371
- "Content-Type: application/json\r\n\r\n",
372
- self.encode_json(data),
373
- "\n",
444
+ "\r\n",
445
+ "Content-Type: application/json; charset=utf-8\r\n",
446
+ "Content-Length: " + str(len(encoded_data)) + "\r\n",
447
+ "\r\n",
448
+ encoded_data,
449
+ f"\r\n--{separator}",
374
450
  ]
375
451
  )
376
452
 
@@ -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
+ ]
@@ -17,6 +17,7 @@ class StrawberryConfig:
17
17
  relay_use_legacy_global_id: bool = False
18
18
  disable_field_suggestions: bool = False
19
19
  info_class: type[Info] = Info
20
+ enable_experimental_incremental_execution: bool = False
20
21
  _unsafe_disable_same_type_validation: bool = False
21
22
 
22
23
  def __post_init__(
@@ -15,7 +15,6 @@ from typing import (
15
15
  cast,
16
16
  )
17
17
 
18
- from graphql import ExecutionContext as GraphQLExecutionContext
19
18
  from graphql import ExecutionResult as GraphQLExecutionResult
20
19
  from graphql import (
21
20
  ExecutionResult as OriginalExecutionResult,
@@ -36,7 +35,6 @@ from graphql import (
36
35
  parse,
37
36
  validate_schema,
38
37
  )
39
- from graphql.execution import execute, subscribe
40
38
  from graphql.execution.middleware import MiddlewareManager
41
39
  from graphql.type.directives import specified_directives
42
40
  from graphql.validation import validate
@@ -69,6 +67,15 @@ from strawberry.utils.aio import aclosing
69
67
  from strawberry.utils.await_maybe import await_maybe
70
68
 
71
69
  from . import compat
70
+ from ._graphql_core import (
71
+ GraphQLExecutionContext,
72
+ GraphQLIncrementalExecutionResults,
73
+ ResultType,
74
+ execute,
75
+ experimental_execute_incrementally,
76
+ incremental_execution_directives,
77
+ subscribe,
78
+ )
72
79
  from .base import BaseSchema
73
80
  from .config import StrawberryConfig
74
81
  from .exceptions import CannotGetOperationTypeError, InvalidOperationTypeError
@@ -99,6 +106,7 @@ OriginSubscriptionResult = Union[
99
106
  AsyncIterator[OriginalExecutionResult],
100
107
  ]
101
108
 
109
+
102
110
  DEFAULT_ALLOWED_OPERATION_TYPES = {
103
111
  OperationType.QUERY,
104
112
  OperationType.MUTATION,
@@ -321,11 +329,16 @@ class Schema(BaseSchema):
321
329
  graphql_types.append(graphql_type)
322
330
 
323
331
  try:
332
+ directives = specified_directives + tuple(graphql_directives)
333
+
334
+ if self.config.enable_experimental_incremental_execution:
335
+ directives = tuple(directives) + tuple(incremental_execution_directives)
336
+
324
337
  self._schema = GraphQLSchema(
325
338
  query=query_type,
326
339
  mutation=mutation_type,
327
340
  subscription=subscription_type if subscription else None,
328
- directives=specified_directives + tuple(graphql_directives),
341
+ directives=directives,
329
342
  types=graphql_types,
330
343
  extensions={
331
344
  GraphQLCoreConverter.DEFINITION_BACKREF: self,
@@ -518,12 +531,16 @@ class Schema(BaseSchema):
518
531
  async def _handle_execution_result(
519
532
  self,
520
533
  context: ExecutionContext,
521
- result: Union[GraphQLExecutionResult, ExecutionResult],
534
+ result: ResultType,
522
535
  extensions_runner: SchemaExtensionsRunner,
523
536
  *,
524
537
  # TODO: can we remove this somehow, see comment in execute
525
538
  skip_process_errors: bool = False,
526
539
  ) -> ExecutionResult:
540
+ # TODO: handle this, also, why do we have both GraphQLExecutionResult and ExecutionResult?
541
+ if isinstance(result, GraphQLIncrementalExecutionResults):
542
+ return result
543
+
527
544
  # Set errors on the context so that it's easier
528
545
  # to access in extensions
529
546
  if result.errors:
@@ -566,6 +583,17 @@ class Schema(BaseSchema):
566
583
  extensions_runner = self.create_extensions_runner(execution_context, extensions)
567
584
  middleware_manager = self._get_middleware_manager(extensions)
568
585
 
586
+ execute_function = execute
587
+
588
+ if self.config.enable_experimental_incremental_execution:
589
+ execute_function = experimental_execute_incrementally
590
+
591
+ if execute_function is None:
592
+ raise RuntimeError(
593
+ "Incremental execution is enabled but experimental_execute_incrementally is not available, "
594
+ "please install graphql-core>=3.3.0"
595
+ )
596
+
569
597
  custom_context_kwargs = self._get_custom_context_kwargs(operation_extensions)
570
598
 
571
599
  try:
@@ -586,7 +614,7 @@ class Schema(BaseSchema):
586
614
  async with extensions_runner.executing():
587
615
  if not execution_context.result:
588
616
  result = await await_maybe(
589
- execute(
617
+ execute_function(
590
618
  self._schema,
591
619
  execution_context.graphql_document,
592
620
  root_value=execution_context.root_value,
@@ -603,7 +631,9 @@ class Schema(BaseSchema):
603
631
  result = execution_context.result
604
632
  # Also set errors on the execution_context so that it's easier
605
633
  # to access in extensions
606
- if result.errors:
634
+
635
+ # TODO: maybe here use the first result from incremental execution if it exists
636
+ if isinstance(result, GraphQLExecutionResult) and result.errors:
607
637
  execution_context.errors = result.errors
608
638
 
609
639
  # Run the `Schema.process_errors` function here before
@@ -659,6 +689,16 @@ class Schema(BaseSchema):
659
689
  extensions_runner = self.create_extensions_runner(execution_context, extensions)
660
690
  middleware_manager = self._get_middleware_manager(extensions)
661
691
 
692
+ execute_function = execute
693
+
694
+ if self.config.enable_experimental_incremental_execution:
695
+ execute_function = experimental_execute_incrementally
696
+
697
+ if execute_function is None:
698
+ raise RuntimeError(
699
+ "Incremental execution is enabled but experimental_execute_incrementally is not available, "
700
+ "please install graphql-core>=3.3.0"
701
+ )
662
702
  custom_context_kwargs = self._get_custom_context_kwargs(operation_extensions)
663
703
 
664
704
  try:
@@ -709,7 +749,7 @@ class Schema(BaseSchema):
709
749
 
710
750
  with extensions_runner.executing():
711
751
  if not execution_context.result:
712
- result = execute(
752
+ result = execute_function(
713
753
  self._schema,
714
754
  execution_context.graphql_document,
715
755
  root_value=execution_context.root_value,
@@ -918,8 +918,11 @@ class GraphQLCoreConverter:
918
918
 
919
919
  # If the graphql_type is a GraphQLUnionType, merge its child types
920
920
  if isinstance(graphql_type, GraphQLUnionType):
921
- # Add the child types of the GraphQLUnionType to the list of graphql_types
922
- graphql_types.extend(graphql_type.types)
921
+ # Add the child types of the GraphQLUnionType to the list of graphql_types,
922
+ # filter out any duplicates
923
+ for child_type in graphql_type.types:
924
+ if child_type not in graphql_types:
925
+ graphql_types.append(child_type)
923
926
  else:
924
927
  graphql_types.append(graphql_type)
925
928
 
@@ -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.275.1
3
+ Version: 0.276.0.dev1750672223
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=EhsaD0Ms7qhHxGyS0qDbRPKxz3VUaSdsbEZKTniIjaM,7962
7
- strawberry/annotation.py,sha256=FS-5IIEhFit79QIQyWebaScO9kFZYY_jKOLKCXBhXrw,13828
7
+ strawberry/annotation.py,sha256=8TFyLobOmHUgkCFXTMuobNaWNJE6KZ3_2KgU2DGP-o8,14152
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
@@ -134,8 +134,8 @@ strawberry/file_uploads/scalars.py,sha256=NRDeB7j8aotqIkz9r62ISTf4DrxQxEZYUuHsX5
134
134
  strawberry/file_uploads/utils.py,sha256=-c6TbqUI-Dkb96hWCrZabh6TL2OabBuQNkCarOqgDm4,1181
135
135
  strawberry/flask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
136
136
  strawberry/flask/views.py,sha256=MCvAsNgTZLU8RvTYKWfnLU2w7Wv1ZZpxW9W3TyTZuPY,6355
137
- strawberry/http/__init__.py,sha256=ytAirKk7K7D5knY21tpCGeZ-sCPgwMsijL5AxmOy-94,1163
138
- strawberry/http/async_base_view.py,sha256=fEJGBPqEOnEiYc0bBT4vroqyidoHNBnfF-1iScmOQi0,20124
137
+ strawberry/http/__init__.py,sha256=7UNbLWnBt0RXAjhDUIxtacRUeXiz93JNzqK3m8MRg1A,1316
138
+ strawberry/http/async_base_view.py,sha256=gG__wXCQnZUIBP0ErkQm1pzXNZToA69BP0pmblOZcVc,22923
139
139
  strawberry/http/base.py,sha256=MiX0-RqOkhRvlfpmuvgTHp4tygbUmG8fnLc0uCrOllU,2550
140
140
  strawberry/http/exceptions.py,sha256=9E2dreS1crRoJVUEPuHyx23NcDELDHNzkAOa-rGv-8I,348
141
141
  strawberry/http/ides.py,sha256=WjU0nsMDgr3Bd1ebWkUEkO2d1hk0dI16mLqXyCHqklA,613
@@ -150,7 +150,7 @@ strawberry/parent.py,sha256=JYFp-HGCgwbH2oB4uLSiIO4cVsoPaxX6lfYmxOKPkSg,1362
150
150
  strawberry/permission.py,sha256=dSRJMjSCmTlXfvfC24kCSrAk0txTjYKTJ5ZVU5IW91Y,7537
151
151
  strawberry/printer/__init__.py,sha256=DmepjmgtkdF5RxK_7yC6qUyRWn56U-9qeZMbkztYB9w,62
152
152
  strawberry/printer/ast_from_value.py,sha256=Tkme60qlykbN2m3dNPNMOe65X-wj6EmcDQwgQv7gUkc,4987
153
- strawberry/printer/printer.py,sha256=49u3QwttTGvh13HXZtbTnkZzBwL1k5SLf8rXQLiTpl4,18814
153
+ strawberry/printer/printer.py,sha256=5E9w0wDsUv1hvkeXof12277NLMiCVy5MgJ6gSo_NJhQ,19177
154
154
  strawberry/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
155
  strawberry/quart/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
156
  strawberry/quart/views.py,sha256=f41HWnkGPuhs1NkjwHOZ0DEVnlr5nMSMr9GCxNsBxCs,7461
@@ -166,13 +166,14 @@ strawberry/sanic/utils.py,sha256=XjUVBFuBWfECBCZbx_YtrjQnFTUyIGTo7aISIeB22Gc,100
166
166
  strawberry/sanic/views.py,sha256=F5ZrKt-R3135evKLfhQuPd1isOexI0Lrzevm_6Te4Eg,7069
167
167
  strawberry/scalars.py,sha256=CGkG8CIfurXiYhidmW3qwy6M5BF_Mhih3wAEcWx_iBU,2278
168
168
  strawberry/schema/__init__.py,sha256=u1QCyDVQExUVDA20kyosKPz3TS5HMCN2NrXclhiFAL4,92
169
+ strawberry/schema/_graphql_core.py,sha256=XHsNZLkCyiH55jANK4XJIjq6VCMhN_MgZBEFWEYj5Jc,1237
169
170
  strawberry/schema/base.py,sha256=wqvEOQ_aVkfebk9SlG9zg1YXl3MlwxGZhxFRoIkAxu0,4053
170
171
  strawberry/schema/compat.py,sha256=xNpOEDfi-MODpplMGaKuKeQIVcr-tcAaKaU3TlBc1Zs,1873
171
- strawberry/schema/config.py,sha256=6d2MPrAgq97-7aze555dRcB3yw-aeUexYMP3KVN22c0,1024
172
+ strawberry/schema/config.py,sha256=EQhyuKcQTOga_1Uw3nhu5SlS6lVbgsG1YZ3LOKqeztQ,1084
172
173
  strawberry/schema/exceptions.py,sha256=8gsMxxFDynMvRkUDuVL9Wwxk_zsmo6QoJ2l4NPxd64M,1137
173
174
  strawberry/schema/name_converter.py,sha256=xFOXEgqldFkxXRkIQvsJN1dPkWbEUaIrTYNOMYSEVwQ,6945
174
- strawberry/schema/schema.py,sha256=-dVGJfOAyq-w2lpEbzCaiRNPMH68nirv-Q6gZ4aW0UU,37951
175
- strawberry/schema/schema_converter.py,sha256=vxFghA8c4vPLx0XM07gjIbWqMWUnaognzmsuCWTSkTk,39112
175
+ strawberry/schema/schema.py,sha256=KD_iqYYLYb10xAXo5yn83gtYyg1NbnV1QB5q6JUUs2k,39450
176
+ strawberry/schema/schema_converter.py,sha256=nCQXylHCwWDXW3sRRlZrAaLyCna4iIj3GAy2sBp-VEA,39267
176
177
  strawberry/schema/types/__init__.py,sha256=oHO3COWhL3L1KLYCJNY1XFf5xt2GGtHiMC-UaYbFfnA,68
177
178
  strawberry/schema/types/base_scalars.py,sha256=JRUq0WjEkR9dFewstZnqnZKp0uOEipo4UXNF5dzRf4M,1971
178
179
  strawberry/schema/types/concrete_type.py,sha256=axIyFZgdwNv-XYkiqX67464wuFX6Vp0jYATwnBZSUvM,750
@@ -183,8 +184,9 @@ strawberry/schema_codegen/__init__.py,sha256=mN4Qmu5Iakht6nHpRpt9hCs8e--oTPlVtDJ
183
184
  strawberry/schema_directive.py,sha256=CbjdX54EIeWGkJu4SgiLR8mph5_8wyNsgJk2oLoQK_0,2023
184
185
  strawberry/schema_directives.py,sha256=KGKFWCODjm1Ah9qNV_bBwbic7Mld4qLWnWQkev-PG8A,175
185
186
  strawberry/static/apollo-sandbox.html,sha256=2XzkbE0dqsFHqehE-jul9_J9TFOpwA6Ylrlo0Kdx_9w,973
186
- strawberry/static/graphiql.html,sha256=BkiqZlC63f1sHBDs_UpMzcibcNrHKh7K41Sp23yttfo,4257
187
+ strawberry/static/graphiql.html,sha256=0e3pvTnAet-lNEqA_pgJ8Ak2CdMt34zPKMMMzpAkEVU,4257
187
188
  strawberry/static/pathfinder.html,sha256=0DPx9AmJ2C_sJstFXnWOz9k5tVQHeHaK7qdVY4lAlmk,1547
189
+ strawberry/streamable.py,sha256=ylfMt5lfX7RRKGi86wWokvIgYQk5jZCvQVc3shK0epk,645
188
190
  strawberry/subscriptions/__init__.py,sha256=1VGmiCzFepqRFyCikagkUoHHdoTG3XYlFu9GafoQMws,170
189
191
  strawberry/subscriptions/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
192
  strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py,sha256=wN6dkMu6WiaIZTE19PGoN9xXpIN_RdDE_q7F7ZgjCxk,138
@@ -234,8 +236,8 @@ strawberry/utils/logging.py,sha256=U1cseHGquN09YFhFmRkiphfASKCyK0HUZREImPgVb0c,7
234
236
  strawberry/utils/operation.py,sha256=ZgVOw3K2jQuLjNOYUHauF7itJD0QDNoPw9PBi0IYf6k,1234
235
237
  strawberry/utils/str_converters.py,sha256=-eH1Cl16IO_wrBlsGM-km4IY0IKsjhjnSNGRGOwQjVM,897
236
238
  strawberry/utils/typing.py,sha256=SDvX-Du-9HAV3-XXjqi7Q5f5qPDDFd_gASIITiwBQT4,14073
237
- strawberry_graphql-0.275.1.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
238
- strawberry_graphql-0.275.1.dist-info/METADATA,sha256=aWHFw8HBijLjhiLqaWy5LtyjSpiWExXWIAIvWOUhG3Q,7393
239
- strawberry_graphql-0.275.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
240
- strawberry_graphql-0.275.1.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
241
- strawberry_graphql-0.275.1.dist-info/RECORD,,
239
+ strawberry_graphql-0.276.0.dev1750672223.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
240
+ strawberry_graphql-0.276.0.dev1750672223.dist-info/METADATA,sha256=Cind85QEFeU7F2ZOzxU6EWl8h9VxDCevpQ0XyFTcTVQ,7407
241
+ strawberry_graphql-0.276.0.dev1750672223.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
242
+ strawberry_graphql-0.276.0.dev1750672223.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
243
+ strawberry_graphql-0.276.0.dev1750672223.dist-info/RECORD,,