strawberry-graphql 0.263.1__py3-none-any.whl → 0.264.0__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.
Files changed (43) hide show
  1. strawberry/aiohttp/views.py +1 -1
  2. strawberry/annotation.py +9 -6
  3. strawberry/asgi/__init__.py +1 -1
  4. strawberry/chalice/views.py +2 -2
  5. strawberry/cli/commands/codegen.py +1 -1
  6. strawberry/codegen/query_codegen.py +6 -6
  7. strawberry/django/views.py +2 -2
  8. strawberry/exceptions/handler.py +1 -1
  9. strawberry/experimental/pydantic/conversion.py +1 -1
  10. strawberry/experimental/pydantic/error_type.py +1 -1
  11. strawberry/experimental/pydantic/object_type.py +1 -1
  12. strawberry/ext/mypy_plugin.py +3 -3
  13. strawberry/fastapi/router.py +1 -1
  14. strawberry/federation/schema.py +1 -1
  15. strawberry/flask/views.py +2 -2
  16. strawberry/http/async_base_view.py +1 -1
  17. strawberry/litestar/controller.py +1 -1
  18. strawberry/printer/printer.py +7 -7
  19. strawberry/quart/views.py +1 -1
  20. strawberry/relay/exceptions.py +3 -2
  21. strawberry/relay/fields.py +7 -7
  22. strawberry/relay/types.py +45 -39
  23. strawberry/relay/utils.py +6 -2
  24. strawberry/sanic/utils.py +2 -4
  25. strawberry/sanic/views.py +1 -1
  26. strawberry/schema/schema.py +16 -12
  27. strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py +1 -1
  28. strawberry/subscriptions/protocols/graphql_ws/handlers.py +1 -1
  29. strawberry/types/arguments.py +5 -4
  30. strawberry/types/auto.py +1 -1
  31. strawberry/types/field.py +1 -1
  32. strawberry/types/fields/resolver.py +1 -1
  33. strawberry/types/lazy_type.py +1 -1
  34. strawberry/types/type_resolver.py +1 -1
  35. strawberry/types/union.py +1 -1
  36. strawberry/utils/aio.py +20 -1
  37. strawberry/utils/operation.py +1 -1
  38. strawberry/utils/typing.py +5 -5
  39. {strawberry_graphql-0.263.1.dist-info → strawberry_graphql-0.264.0.dist-info}/METADATA +1 -1
  40. {strawberry_graphql-0.263.1.dist-info → strawberry_graphql-0.264.0.dist-info}/RECORD +43 -43
  41. {strawberry_graphql-0.263.1.dist-info → strawberry_graphql-0.264.0.dist-info}/LICENSE +0 -0
  42. {strawberry_graphql-0.263.1.dist-info → strawberry_graphql-0.264.0.dist-info}/WHEEL +0 -0
  43. {strawberry_graphql-0.263.1.dist-info → strawberry_graphql-0.264.0.dist-info}/entry_points.txt +0 -0
@@ -56,7 +56,7 @@ class AioHTTPRequestAdapter(AsyncHTTPRequestAdapter):
56
56
 
57
57
  @property
58
58
  def method(self) -> HTTPMethod:
59
- return cast(HTTPMethod, self.request.method.upper())
59
+ return cast("HTTPMethod", self.request.method.upper())
60
60
 
61
61
  @property
62
62
  def headers(self) -> Mapping[str, str]:
strawberry/annotation.py CHANGED
@@ -1,8 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- import logging
4
3
  import sys
5
4
  import typing
5
+ import warnings
6
6
  from collections import abc
7
7
  from enum import Enum
8
8
  from typing import (
@@ -130,7 +130,7 @@ class StrawberryAnnotation:
130
130
  return self.__resolve_cache__
131
131
 
132
132
  def _resolve(self) -> Union[StrawberryType, type]:
133
- evaled_type = cast(Any, self.evaluate())
133
+ evaled_type = cast("Any", self.evaluate())
134
134
 
135
135
  if is_private(evaled_type):
136
136
  return evaled_type
@@ -158,7 +158,7 @@ class StrawberryAnnotation:
158
158
  if self._is_union(evaled_type, args):
159
159
  return self.create_union(evaled_type, args)
160
160
  if is_type_var(evaled_type) or evaled_type is Self:
161
- return self.create_type_var(cast(TypeVar, evaled_type))
161
+ return self.create_type_var(cast("TypeVar", evaled_type))
162
162
  if self._is_strawberry_type(evaled_type):
163
163
  # Simply return objects that are already StrawberryTypes
164
164
  return evaled_type
@@ -242,9 +242,12 @@ class StrawberryAnnotation:
242
242
 
243
243
  union_args = [arg for arg in args if isinstance(arg, StrawberryUnion)]
244
244
  if len(union_args) > 1:
245
- logging.warning(
246
- "Duplicate union definition detected. "
247
- "Only the first definition will be considered"
245
+ warnings.warn(
246
+ (
247
+ "Duplicate union definition detected. "
248
+ "Only the first definition will be considered"
249
+ ),
250
+ stacklevel=2,
248
251
  )
249
252
 
250
253
  if union_args:
@@ -60,7 +60,7 @@ class ASGIRequestAdapter(AsyncHTTPRequestAdapter):
60
60
 
61
61
  @property
62
62
  def method(self) -> HTTPMethod:
63
- return cast(HTTPMethod, self.request.method.upper())
63
+ return cast("HTTPMethod", self.request.method.upper())
64
64
 
65
65
  @property
66
66
  def headers(self) -> Mapping[str, str]:
@@ -7,7 +7,6 @@ from chalice.app import Request, Response
7
7
  from strawberry.http.exceptions import HTTPException
8
8
  from strawberry.http.sync_base_view import SyncBaseHTTPView, SyncHTTPRequestAdapter
9
9
  from strawberry.http.temporal_response import TemporalResponse
10
- from strawberry.http.types import HTTPMethod, QueryParams
11
10
  from strawberry.http.typevars import Context, RootValue
12
11
 
13
12
  if TYPE_CHECKING:
@@ -15,6 +14,7 @@ if TYPE_CHECKING:
15
14
 
16
15
  from strawberry.http import GraphQLHTTPResponse
17
16
  from strawberry.http.ides import GraphQL_IDE
17
+ from strawberry.http.types import HTTPMethod, QueryParams
18
18
  from strawberry.schema import BaseSchema
19
19
 
20
20
 
@@ -32,7 +32,7 @@ class ChaliceHTTPRequestAdapter(SyncHTTPRequestAdapter):
32
32
 
33
33
  @property
34
34
  def method(self) -> HTTPMethod:
35
- return cast(HTTPMethod, self.request.method.upper())
35
+ return cast("HTTPMethod", self.request.method.upper())
36
36
 
37
37
  @property
38
38
  def headers(self) -> Mapping[str, str]:
@@ -133,7 +133,7 @@ def codegen(
133
133
  console_plugin.before_any_start()
134
134
 
135
135
  for q in query:
136
- plugins = cast(list[QueryCodegenPlugin], _load_plugins(selected_plugins, q))
136
+ plugins = cast("list[QueryCodegenPlugin]", _load_plugins(selected_plugins, q))
137
137
 
138
138
  code_generator = QueryCodegen(
139
139
  schema_symbol, plugins=plugins, console_plugin=console_plugin
@@ -362,7 +362,7 @@ class QueryCodegen:
362
362
  # The FragmentDefinitionNode has a non-Optional `SelectionSetNode` but
363
363
  # the Protocol wants an `Optional[SelectionSetNode]` so this doesn't
364
364
  # quite conform.
365
- cast(HasSelectionSet, fd),
365
+ cast("HasSelectionSet", fd),
366
366
  parent_type=query_type,
367
367
  class_name=fd.name.value,
368
368
  graph_ql_object_type_factory=graph_ql_object_type_factory,
@@ -468,13 +468,13 @@ class QueryCodegen:
468
468
  result_class_name = f"{operation_name}Result"
469
469
 
470
470
  operation_type = self._collect_types(
471
- cast(HasSelectionSet, operation_definition),
471
+ cast("HasSelectionSet", operation_definition),
472
472
  parent_type=query_type,
473
473
  class_name=result_class_name,
474
474
  )
475
475
 
476
476
  operation_kind = cast(
477
- Literal["query", "mutation", "subscription"],
477
+ "Literal['query', 'mutation', 'subscription']",
478
478
  operation_definition.operation.value,
479
479
  )
480
480
 
@@ -801,7 +801,7 @@ class QueryCodegen:
801
801
  # `GraphQLField` or `GraphQLFragmentSpread`
802
802
  # and the suite above will cause this statement to be
803
803
  # skipped if there are any `GraphQLFragmentSpread`.
804
- current_type.fields = cast(list[GraphQLField], fields)
804
+ current_type.fields = cast("list[GraphQLField]", fields)
805
805
 
806
806
  self._collect_type(current_type)
807
807
 
@@ -854,7 +854,7 @@ class QueryCodegen:
854
854
  assert isinstance(sub_selection, FieldNode)
855
855
 
856
856
  parent_type = cast(
857
- StrawberryObjectDefinition,
857
+ "StrawberryObjectDefinition",
858
858
  self.schema.get_type_by_name(type_condition_name),
859
859
  )
860
860
 
@@ -889,7 +889,7 @@ class QueryCodegen:
889
889
  # `GraphQLField` or `GraphQLFragmentSpread`
890
890
  # and the suite above will cause this statement to be
891
891
  # skipped if there are any `GraphQLFragmentSpread`.
892
- current_type.fields.extend(cast(list[GraphQLField], fields))
892
+ current_type.fields.extend(cast("list[GraphQLField]", fields))
893
893
 
894
894
  sub_types.append(current_type)
895
895
 
@@ -83,7 +83,7 @@ class DjangoHTTPRequestAdapter(SyncHTTPRequestAdapter):
83
83
  def method(self) -> HTTPMethod:
84
84
  assert self.request.method is not None
85
85
 
86
- return cast(HTTPMethod, self.request.method.upper())
86
+ return cast("HTTPMethod", self.request.method.upper())
87
87
 
88
88
  @property
89
89
  def headers(self) -> Mapping[str, str]:
@@ -114,7 +114,7 @@ class AsyncDjangoHTTPRequestAdapter(AsyncHTTPRequestAdapter):
114
114
  def method(self) -> HTTPMethod:
115
115
  assert self.request.method is not None
116
116
 
117
- return cast(HTTPMethod, self.request.method.upper())
117
+ return cast("HTTPMethod", self.request.method.upper())
118
118
 
119
119
  @property
120
120
  def headers(self) -> Mapping[str, str]:
@@ -70,7 +70,7 @@ def strawberry_threading_exception_handler(
70
70
  # (we'd need to do type ignore for python 3.8 and above, but mypy
71
71
  # doesn't seem to be able to handle that and will complain in python 3.7)
72
72
 
73
- cast(Any, original_threading_exception_hook)(args)
73
+ cast("Any", original_threading_exception_hook)(args)
74
74
 
75
75
  return
76
76
 
@@ -35,7 +35,7 @@ def _convert_from_pydantic_to_strawberry_type(
35
35
  if hasattr(option_type, "_pydantic_type"):
36
36
  source_type = option_type._pydantic_type
37
37
  else:
38
- source_type = cast(type, option_type)
38
+ source_type = cast("type", option_type)
39
39
  if isinstance(data, source_type):
40
40
  return _convert_from_pydantic_to_strawberry_type(
41
41
  option_type, data_from_model=data, extra=extra
@@ -116,7 +116,7 @@ def error_type(
116
116
  ]
117
117
 
118
118
  wrapped: type[WithStrawberryObjectDefinition] = _wrap_dataclass(cls)
119
- extra_fields = cast(list[dataclasses.Field], _get_fields(wrapped, {}))
119
+ extra_fields = cast("list[dataclasses.Field]", _get_fields(wrapped, {}))
120
120
  private_fields = get_private_fields(wrapped)
121
121
 
122
122
  all_model_fields.extend(
@@ -180,7 +180,7 @@ def type( # noqa: PLR0915
180
180
 
181
181
  wrapped = _wrap_dataclass(cls)
182
182
  extra_strawberry_fields = _get_fields(wrapped, {})
183
- extra_fields = cast(list[dataclasses.Field], extra_strawberry_fields)
183
+ extra_fields = cast("list[dataclasses.Field]", extra_strawberry_fields)
184
184
  private_fields = get_private_fields(wrapped)
185
185
 
186
186
  extra_fields_dict = {field.name: field for field in extra_strawberry_fields}
@@ -65,7 +65,7 @@ try:
65
65
  from pydantic.mypy import METADATA_KEY as PYDANTIC_METADATA_KEY
66
66
  from pydantic.mypy import PydanticModelField
67
67
 
68
- PYDANTIC_VERSION = tuple(map(int, pydantic.__version__.split(".")))
68
+ PYDANTIC_VERSION = tuple(map(int, pydantic.__version__.split("."))) # noqa: RUF048
69
69
 
70
70
  from strawberry.experimental.pydantic._compat import IS_PYDANTIC_V1
71
71
  except ImportError:
@@ -397,7 +397,7 @@ def strawberry_pydantic_class_callback(ctx: ClassDefContext) -> None:
397
397
  ]
398
398
  add_method(ctx, "__init__", init_args, NoneType())
399
399
 
400
- model_type = cast(Instance, _get_type_for_expr(model_expression, ctx.api))
400
+ model_type = cast("Instance", _get_type_for_expr(model_expression, ctx.api))
401
401
 
402
402
  # these are the fields that the user added to the strawberry type
403
403
  new_strawberry_fields: set[str] = set()
@@ -405,7 +405,7 @@ def strawberry_pydantic_class_callback(ctx: ClassDefContext) -> None:
405
405
  # TODO: think about inheritance for strawberry?
406
406
  for stmt in ctx.cls.defs.body:
407
407
  if isinstance(stmt, AssignmentStmt):
408
- lhs = cast(NameExpr, stmt.lvalues[0])
408
+ lhs = cast("NameExpr", stmt.lvalues[0])
409
409
  new_strawberry_fields.add(lhs.name)
410
410
 
411
411
  pydantic_fields: set[PydanticModelField] = set()
@@ -76,7 +76,7 @@ class GraphQLRouter(
76
76
  connection: HTTPConnection,
77
77
  response: Response = None, # type: ignore
78
78
  ) -> MergedContext:
79
- request = cast(Union[Request, WebSocket], connection)
79
+ request = cast("Union[Request, WebSocket]", connection)
80
80
  if isinstance(custom_context, BaseContext):
81
81
  custom_context.request = request
82
82
  custom_context.background_tasks = background_tasks
@@ -158,7 +158,7 @@ class Schema(BaseSchema):
158
158
  type_name = representation.pop("__typename")
159
159
  type_ = self.schema_converter.type_map[type_name]
160
160
 
161
- definition = cast(StrawberryObjectDefinition, type_.definition)
161
+ definition = cast("StrawberryObjectDefinition", type_.definition)
162
162
 
163
163
  if hasattr(definition.origin, "resolve_reference"):
164
164
  resolve_reference = definition.origin.resolve_reference
strawberry/flask/views.py CHANGED
@@ -45,7 +45,7 @@ class FlaskHTTPRequestAdapter(SyncHTTPRequestAdapter):
45
45
 
46
46
  @property
47
47
  def method(self) -> HTTPMethod:
48
- return cast(HTTPMethod, self.request.method.upper())
48
+ return cast("HTTPMethod", self.request.method.upper())
49
49
 
50
50
  @property
51
51
  def headers(self) -> Mapping[str, str]:
@@ -139,7 +139,7 @@ class AsyncFlaskHTTPRequestAdapter(AsyncHTTPRequestAdapter):
139
139
 
140
140
  @property
141
141
  def method(self) -> HTTPMethod:
142
- return cast(HTTPMethod, self.request.method.upper())
142
+ return cast("HTTPMethod", self.request.method.upper())
143
143
 
144
144
  @property
145
145
  def content_type(self) -> Optional[str]:
@@ -306,7 +306,7 @@ class AsyncBaseHTTPView(
306
306
  await websocket.close(4406, "Subprotocol not acceptable")
307
307
 
308
308
  return websocket_response
309
- request = cast(Request, request)
309
+ request = cast("Request", request)
310
310
 
311
311
  request_adapter = self.request_adapter_class(request)
312
312
  sub_response = await self.get_sub_response(request)
@@ -163,7 +163,7 @@ class LitestarRequestAdapter(AsyncHTTPRequestAdapter):
163
163
 
164
164
  @property
165
165
  def method(self) -> HTTPMethod:
166
- return cast(HTTPMethod, self.request.method.upper())
166
+ return cast("HTTPMethod", self.request.method.upper())
167
167
 
168
168
  @property
169
169
  def headers(self) -> Mapping[str, str]:
@@ -151,7 +151,7 @@ def print_schema_directive(
151
151
  directive: Any, schema: BaseSchema, *, extras: PrintExtras
152
152
  ) -> str:
153
153
  strawberry_directive = cast(
154
- StrawberrySchemaDirective, directive.__class__.__strawberry_directive__
154
+ "StrawberrySchemaDirective", directive.__class__.__strawberry_directive__
155
155
  )
156
156
  schema_converter = schema.schema_converter
157
157
  gql_directive = schema_converter.from_schema_directive(directive.__class__)
@@ -178,13 +178,13 @@ def print_schema_directive(
178
178
  f_type = f_type.of_type
179
179
 
180
180
  if has_object_definition(f_type):
181
- extras.types.add(cast(type, f_type))
181
+ extras.types.add(cast("type", f_type))
182
182
 
183
183
  if hasattr(f_type, "_scalar_definition"):
184
- extras.types.add(cast(type, f_type))
184
+ extras.types.add(cast("type", f_type))
185
185
 
186
186
  if isinstance(f_type, EnumDefinition):
187
- extras.types.add(cast(type, f_type))
187
+ extras.types.add(cast("type", f_type))
188
188
 
189
189
  return f" @{gql_directive.name}{params}"
190
190
 
@@ -363,7 +363,7 @@ def print_extends(type_: GraphQLObjectType, schema: BaseSchema) -> str:
363
363
  from strawberry.schema.schema_converter import GraphQLCoreConverter
364
364
 
365
365
  strawberry_type = cast(
366
- Optional[StrawberryObjectDefinition],
366
+ "Optional[StrawberryObjectDefinition]",
367
367
  type_.extensions
368
368
  and type_.extensions.get(GraphQLCoreConverter.DEFINITION_BACKREF),
369
369
  )
@@ -380,7 +380,7 @@ def print_type_directives(
380
380
  from strawberry.schema.schema_converter import GraphQLCoreConverter
381
381
 
382
382
  strawberry_type = cast(
383
- Optional[StrawberryObjectDefinition],
383
+ "Optional[StrawberryObjectDefinition]",
384
384
  type_.extensions
385
385
  and type_.extensions.get(GraphQLCoreConverter.DEFINITION_BACKREF),
386
386
  )
@@ -594,7 +594,7 @@ def is_builtin_directive(directive: GraphQLDirective) -> bool:
594
594
 
595
595
  def print_schema(schema: BaseSchema) -> str:
596
596
  graphql_core_schema = cast(
597
- GraphQLSchema,
597
+ "GraphQLSchema",
598
598
  schema._schema, # type: ignore
599
599
  )
600
600
  extras = PrintExtras()
strawberry/quart/views.py CHANGED
@@ -27,7 +27,7 @@ class QuartHTTPRequestAdapter(AsyncHTTPRequestAdapter):
27
27
 
28
28
  @property
29
29
  def method(self) -> HTTPMethod:
30
- return cast(HTTPMethod, self.request.method.upper())
30
+ return cast("HTTPMethod", self.request.method.upper())
31
31
 
32
32
  @property
33
33
  def content_type(self) -> Optional[str]:
@@ -1,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Callable
4
3
  from functools import cached_property
5
4
  from typing import TYPE_CHECKING, Optional, cast
6
5
 
@@ -8,6 +7,8 @@ from strawberry.exceptions.exception import StrawberryException
8
7
  from strawberry.exceptions.utils.source_finder import SourceFinder
9
8
 
10
9
  if TYPE_CHECKING:
10
+ from collections.abc import Callable
11
+
11
12
  from strawberry.exceptions.exception_source import ExceptionSource
12
13
  from strawberry.types.fields.resolver import StrawberryResolver
13
14
 
@@ -101,7 +102,7 @@ class RelayWrongResolverAnnotationError(StrawberryException):
101
102
  return None # pragma: no cover
102
103
 
103
104
  source_finder = SourceFinder()
104
- return source_finder.find_function_from_object(cast(Callable, self.function))
105
+ return source_finder.find_function_from_object(cast("Callable", self.function))
105
106
 
106
107
 
107
108
  __all__ = [
@@ -108,7 +108,7 @@ class NodeExtension(FieldExtension):
108
108
 
109
109
  return resolve()
110
110
 
111
- return cast(Node, strawberry_cast(node_type, resolved_node))
111
+ return cast("Node", strawberry_cast(node_type, resolved_node))
112
112
 
113
113
  return resolver
114
114
 
@@ -161,7 +161,7 @@ class NodeExtension(FieldExtension):
161
161
  # we could end up resolving to a different type in case more than one
162
162
  # are registered
163
163
  def cast_nodes(node_t: type[Node], nodes: Iterable[Any]) -> list[Node]:
164
- return [cast(Node, strawberry_cast(node_t, node)) for node in nodes]
164
+ return [cast("Node", strawberry_cast(node_t, node)) for node in nodes]
165
165
 
166
166
  if awaitable_nodes or asyncgen_nodes:
167
167
 
@@ -196,7 +196,7 @@ class NodeExtension(FieldExtension):
196
196
 
197
197
  # Resolve any generator to lists
198
198
  resolved = {
199
- node_t: cast_nodes(node_t, cast(Iterable[Node], nodes))
199
+ node_t: cast_nodes(node_t, cast("Iterable[Node]", nodes))
200
200
  for node_t, nodes in resolved_nodes.items()
201
201
  }
202
202
  return [resolved[index_map[gid][0]][index_map[gid][1]] for gid in ids]
@@ -264,7 +264,7 @@ class ConnectionExtension(FieldExtension):
264
264
  type_origin = get_origin(f_type) if is_generic_alias(f_type) else f_type
265
265
 
266
266
  if not isinstance(type_origin, type) or not issubclass(type_origin, Connection):
267
- raise RelayWrongAnnotationError(field.name, cast(type, field.origin))
267
+ raise RelayWrongAnnotationError(field.name, cast("type", field.origin))
268
268
 
269
269
  assert field.base_resolver
270
270
  # TODO: We are not using resolver_type.type because it will call
@@ -294,7 +294,7 @@ class ConnectionExtension(FieldExtension):
294
294
  ):
295
295
  raise RelayWrongResolverAnnotationError(field.name, field.base_resolver)
296
296
 
297
- self.connection_type = cast(type[Connection[Node]], f_type)
297
+ self.connection_type = cast("type[Connection[Node]]", f_type)
298
298
 
299
299
  def resolve(
300
300
  self,
@@ -310,7 +310,7 @@ class ConnectionExtension(FieldExtension):
310
310
  ) -> Any:
311
311
  assert self.connection_type is not None
312
312
  return self.connection_type.resolve_connection(
313
- cast(Iterable[Node], next_(source, info, **kwargs)),
313
+ cast("Iterable[Node]", next_(source, info, **kwargs)),
314
314
  info=info,
315
315
  before=before,
316
316
  after=after,
@@ -339,7 +339,7 @@ class ConnectionExtension(FieldExtension):
339
339
  nodes = await nodes
340
340
 
341
341
  resolved = self.connection_type.resolve_connection(
342
- cast(Iterable[Node], nodes),
342
+ cast("Iterable[Node]", nodes),
343
343
  info=info,
344
344
  before=before,
345
345
  after=after,
strawberry/relay/types.py CHANGED
@@ -39,7 +39,7 @@ from strawberry.types.lazy_type import LazyType
39
39
  from strawberry.types.object_type import interface
40
40
  from strawberry.types.object_type import type as strawberry_type
41
41
  from strawberry.types.private import StrawberryPrivate
42
- from strawberry.utils.aio import aenumerate, aislice, resolve_awaitable
42
+ from strawberry.utils.aio import aclosing, aenumerate, aislice, resolve_awaitable
43
43
  from strawberry.utils.inspect import in_async_context
44
44
  from strawberry.utils.typing import eval_type, is_classvar
45
45
 
@@ -188,7 +188,7 @@ class GlobalID:
188
188
  """
189
189
  n_type = self.resolve_type(info)
190
190
  node: Node | Awaitable[Node] = cast(
191
- Awaitable[Node],
191
+ "Awaitable[Node]",
192
192
  n_type.resolve_node(
193
193
  self.node_id,
194
194
  info=info,
@@ -393,7 +393,7 @@ class Node:
393
393
  parent_type = info._raw_info.parent_type
394
394
  type_def = info.schema.get_type_by_name(parent_type.name)
395
395
  assert isinstance(type_def, StrawberryObjectDefinition)
396
- origin = cast(type[Node], type_def.origin)
396
+ origin = cast("type[Node]", type_def.origin)
397
397
  resolve_id = origin.resolve_id
398
398
  resolve_typename = origin.resolve_typename
399
399
 
@@ -404,7 +404,7 @@ class Node:
404
404
 
405
405
  if inspect.isawaitable(node_id):
406
406
  return cast(
407
- GlobalID,
407
+ "GlobalID",
408
408
  resolve_awaitable(
409
409
  node_id,
410
410
  lambda resolved: GlobalID(
@@ -617,7 +617,7 @@ class Node:
617
617
  if inspect.isawaitable(retval):
618
618
  return resolve_awaitable(retval, lambda resolved: next(iter(resolved)))
619
619
 
620
- return next(iter(cast(Iterable[Self], retval)))
620
+ return next(iter(cast("Iterable[Self]", retval)))
621
621
 
622
622
 
623
623
  @strawberry_type(description="Information to aid in pagination.")
@@ -663,9 +663,11 @@ class Edge(Generic[NodeType]):
663
663
  cursor: str = field(description="A cursor for use in pagination")
664
664
  node: NodeType = field(description="The item at the end of the edge")
665
665
 
666
+ CURSOR_PREFIX: ClassVar[str] = PREFIX
667
+
666
668
  @classmethod
667
- def resolve_edge(cls, node: NodeType, *, cursor: Any = None) -> Self:
668
- return cls(cursor=to_base64(PREFIX, cursor), node=node)
669
+ def resolve_edge(cls, node: NodeType, *, cursor: Any = None, **kwargs: Any) -> Self:
670
+ return cls(cursor=to_base64(cls.CURSOR_PREFIX, cursor), node=node, **kwargs)
669
671
 
670
672
 
671
673
  @strawberry_type(description="A connection to a list of items.")
@@ -792,15 +794,6 @@ class ListConnection(Connection[NodeType]):
792
794
  .. _Relay Pagination algorithm:
793
795
  https://relay.dev/graphql/connections.htm#sec-Pagination-algorithm
794
796
  """
795
- slice_metadata = SliceMetadata.from_arguments(
796
- info,
797
- before=before,
798
- after=after,
799
- first=first,
800
- last=last,
801
- max_results=max_results,
802
- )
803
-
804
797
  type_def = get_object_definition(cls)
805
798
  assert type_def
806
799
  field_def = type_def.get_field("edges")
@@ -810,15 +803,25 @@ class ListConnection(Connection[NodeType]):
810
803
  while isinstance(field, StrawberryContainer):
811
804
  field = field.of_type
812
805
 
813
- edge_class = cast(Edge[NodeType], field)
806
+ edge_class = cast("Edge[NodeType]", field)
807
+
808
+ slice_metadata = SliceMetadata.from_arguments(
809
+ info,
810
+ before=before,
811
+ after=after,
812
+ first=first,
813
+ last=last,
814
+ max_results=max_results,
815
+ prefix=edge_class.CURSOR_PREFIX,
816
+ )
814
817
 
815
818
  if isinstance(nodes, (AsyncIterator, AsyncIterable)) and in_async_context():
816
819
 
817
820
  async def resolver() -> Self:
818
821
  try:
819
822
  iterator = cast(
820
- Union[AsyncIterator[NodeType], AsyncIterable[NodeType]],
821
- cast(Sequence, nodes)[
823
+ "Union[AsyncIterator[NodeType], AsyncIterable[NodeType]]",
824
+ cast("Sequence", nodes)[
822
825
  slice_metadata.start : slice_metadata.overfetch
823
826
  ],
824
827
  )
@@ -831,24 +834,25 @@ class ListConnection(Connection[NodeType]):
831
834
  slice_metadata.overfetch,
832
835
  )
833
836
 
834
- # The slice above might return an object that now is not async
835
- # iterable anymore (e.g. an already cached django queryset)
836
- if isinstance(iterator, (AsyncIterator, AsyncIterable)):
837
- edges: list[Edge] = [
838
- edge_class.resolve_edge(
839
- cls.resolve_node(v, info=info, **kwargs),
840
- cursor=slice_metadata.start + i,
841
- )
842
- async for i, v in aenumerate(iterator)
843
- ]
844
- else:
845
- edges: list[Edge] = [ # type: ignore[no-redef]
846
- edge_class.resolve_edge(
847
- cls.resolve_node(v, info=info, **kwargs),
848
- cursor=slice_metadata.start + i,
849
- )
850
- for i, v in enumerate(iterator)
851
- ]
837
+ async with aclosing(iterator):
838
+ # The slice above might return an object that now is not async
839
+ # iterable anymore (e.g. an already cached django queryset)
840
+ if isinstance(iterator, (AsyncIterator, AsyncIterable)):
841
+ edges: list[Edge] = [
842
+ edge_class.resolve_edge(
843
+ cls.resolve_node(v, info=info, **kwargs),
844
+ cursor=slice_metadata.start + i,
845
+ )
846
+ async for i, v in aenumerate(iterator)
847
+ ]
848
+ else:
849
+ edges: list[Edge] = [ # type: ignore[no-redef]
850
+ edge_class.resolve_edge(
851
+ cls.resolve_node(v, info=info, **kwargs),
852
+ cursor=slice_metadata.start + i,
853
+ )
854
+ for i, v in enumerate(iterator)
855
+ ]
852
856
 
853
857
  has_previous_page = slice_metadata.start > 0
854
858
  if (
@@ -882,8 +886,10 @@ class ListConnection(Connection[NodeType]):
882
886
 
883
887
  try:
884
888
  iterator = cast(
885
- Union[Iterator[NodeType], Iterable[NodeType]],
886
- cast(Sequence, nodes)[slice_metadata.start : slice_metadata.overfetch],
889
+ "Union[Iterator[NodeType], Iterable[NodeType]]",
890
+ cast("Sequence", nodes)[
891
+ slice_metadata.start : slice_metadata.overfetch
892
+ ],
887
893
  )
888
894
  except TypeError:
889
895
  assert isinstance(nodes, (Iterable, Iterator))
strawberry/relay/utils.py CHANGED
@@ -132,10 +132,14 @@ class SliceMetadata:
132
132
  first: int | None = None,
133
133
  last: int | None = None,
134
134
  max_results: int | None = None,
135
+ prefix: str | None = None,
135
136
  ) -> Self:
136
137
  """Get the slice metadata to use on ListConnection."""
137
138
  from strawberry.relay.types import PREFIX
138
139
 
140
+ if prefix is None:
141
+ prefix = PREFIX
142
+
139
143
  max_results = (
140
144
  max_results
141
145
  if max_results is not None
@@ -146,13 +150,13 @@ class SliceMetadata:
146
150
 
147
151
  if after:
148
152
  after_type, after_parsed = from_base64(after)
149
- if after_type != PREFIX:
153
+ if after_type != prefix:
150
154
  raise TypeError("Argument 'after' contains a non-existing value.")
151
155
 
152
156
  start = int(after_parsed) + 1
153
157
  if before:
154
158
  before_type, before_parsed = from_base64(before)
155
- if before_type != PREFIX:
159
+ if before_type != prefix:
156
160
  raise TypeError("Argument 'before' contains a non-existing value.")
157
161
  end = int(before_parsed)
158
162
 
strawberry/sanic/utils.py CHANGED
@@ -3,10 +3,8 @@ from __future__ import annotations
3
3
  from io import BytesIO
4
4
  from typing import TYPE_CHECKING, Any, Optional, Union, cast
5
5
 
6
- from sanic.request import File
7
-
8
6
  if TYPE_CHECKING:
9
- from sanic.request import Request
7
+ from sanic.request import File, Request
10
8
 
11
9
 
12
10
  def convert_request_to_files_dict(request: Request) -> dict[str, Any]:
@@ -24,7 +22,7 @@ def convert_request_to_files_dict(request: Request) -> dict[str, Any]:
24
22
 
25
23
  Note that the dictionary entries are lists.
26
24
  """
27
- request_files = cast(Optional[dict[str, list[File]]], request.files)
25
+ request_files = cast("Optional[dict[str, list[File]]]", request.files)
28
26
 
29
27
  if not request_files:
30
28
  return {}
strawberry/sanic/views.py CHANGED
@@ -48,7 +48,7 @@ class SanicHTTPRequestAdapter(AsyncHTTPRequestAdapter):
48
48
 
49
49
  @property
50
50
  def method(self) -> HTTPMethod:
51
- return cast(HTTPMethod, self.request.method.upper())
51
+ return cast("HTTPMethod", self.request.method.upper())
52
52
 
53
53
  @property
54
54
  def headers(self) -> Mapping[str, str]:
@@ -60,6 +60,7 @@ from strawberry.types.execution import (
60
60
  )
61
61
  from strawberry.types.graphql import OperationType
62
62
  from strawberry.utils import IS_GQL_32
63
+ from strawberry.utils.aio import aclosing
63
64
  from strawberry.utils.await_maybe import await_maybe
64
65
 
65
66
  from . import compat
@@ -205,7 +206,7 @@ class Schema(BaseSchema):
205
206
  scalar_registry: SCALAR_OVERRIDES_DICT_TYPE = {**DEFAULT_SCALAR_REGISTRY}
206
207
  if scalar_overrides:
207
208
  # TODO: check that the overrides are valid
208
- scalar_registry.update(cast(SCALAR_OVERRIDES_DICT_TYPE, scalar_overrides))
209
+ scalar_registry.update(cast("SCALAR_OVERRIDES_DICT_TYPE", scalar_overrides))
209
210
 
210
211
  self.schema_converter = GraphQLCoreConverter(
211
212
  self.config, scalar_registry, self.get_fields
@@ -214,12 +215,14 @@ class Schema(BaseSchema):
214
215
  self.schema_directives = list(schema_directives)
215
216
 
216
217
  query_type = self.schema_converter.from_object(
217
- cast(type[WithStrawberryObjectDefinition], query).__strawberry_definition__
218
+ cast(
219
+ "type[WithStrawberryObjectDefinition]", query
220
+ ).__strawberry_definition__
218
221
  )
219
222
  mutation_type = (
220
223
  self.schema_converter.from_object(
221
224
  cast(
222
- type[WithStrawberryObjectDefinition], mutation
225
+ "type[WithStrawberryObjectDefinition]", mutation
223
226
  ).__strawberry_definition__
224
227
  )
225
228
  if mutation
@@ -228,7 +231,7 @@ class Schema(BaseSchema):
228
231
  subscription_type = (
229
232
  self.schema_converter.from_object(
230
233
  cast(
231
- type[WithStrawberryObjectDefinition], subscription
234
+ "type[WithStrawberryObjectDefinition]", subscription
232
235
  ).__strawberry_definition__
233
236
  )
234
237
  if subscription
@@ -624,13 +627,13 @@ class Schema(BaseSchema):
624
627
  )
625
628
 
626
629
  if isawaitable(result):
627
- result = cast(Awaitable[GraphQLExecutionResult], result) # type: ignore[redundant-cast]
630
+ result = cast("Awaitable[GraphQLExecutionResult]", result) # type: ignore[redundant-cast]
628
631
  ensure_future(result).cancel()
629
632
  raise RuntimeError( # noqa: TRY301
630
633
  "GraphQL execution failed to complete synchronously."
631
634
  )
632
635
 
633
- result = cast(GraphQLExecutionResult, result) # type: ignore[redundant-cast]
636
+ result = cast("GraphQLExecutionResult", result) # type: ignore[redundant-cast]
634
637
  execution_context.result = result
635
638
  # Also set errors on the context so that it's easier
636
639
  # to access in extensions
@@ -713,12 +716,13 @@ class Schema(BaseSchema):
713
716
  )
714
717
  else:
715
718
  try:
716
- async for result in aiter_or_result:
717
- yield await self._handle_execution_result(
718
- execution_context,
719
- result,
720
- extensions_runner,
721
- )
719
+ async with aclosing(aiter_or_result):
720
+ async for result in aiter_or_result:
721
+ yield await self._handle_execution_result(
722
+ execution_context,
723
+ result,
724
+ extensions_runner,
725
+ )
722
726
  # graphql-core doesn't handle exceptions raised while executing.
723
727
  except Exception as exc: # noqa: BLE001
724
728
  yield await self._handle_execution_result(
@@ -77,7 +77,7 @@ class BaseGraphQLTransportWSHandler(Generic[Context, RootValue]):
77
77
  try:
78
78
  try:
79
79
  async for message in self.websocket.iter_json():
80
- await self.handle_message(cast(Message, message))
80
+ await self.handle_message(cast("Message", message))
81
81
  except NonTextMessageReceived:
82
82
  await self.handle_invalid_message("WebSocket message type must be text")
83
83
  except NonJsonMessageReceived:
@@ -65,7 +65,7 @@ class BaseGraphQLWSHandler(Generic[Context, RootValue]):
65
65
  async for message in self.websocket.iter_json(
66
66
  ignore_parsing_errors=True
67
67
  ):
68
- await self.handle_message(cast(OperationMessage, message))
68
+ await self.handle_message(cast("OperationMessage", message))
69
69
  except NonTextMessageReceived:
70
70
  await self.websocket.close(
71
71
  code=1002, reason="WebSocket message type must be text"
@@ -2,7 +2,6 @@ from __future__ import annotations
2
2
 
3
3
  import inspect
4
4
  import warnings
5
- from collections.abc import Iterable, Mapping
6
5
  from typing import (
7
6
  TYPE_CHECKING,
8
7
  Annotated,
@@ -27,6 +26,8 @@ from strawberry.types.unset import UNSET as _deprecated_UNSET # noqa: N811
27
26
  from strawberry.types.unset import _deprecated_is_unset # noqa: F401
28
27
 
29
28
  if TYPE_CHECKING:
29
+ from collections.abc import Iterable, Mapping
30
+
30
31
  from strawberry.schema.config import StrawberryConfig
31
32
  from strawberry.types.base import StrawberryType
32
33
  from strawberry.types.scalar import ScalarDefinition, ScalarWrapper
@@ -153,7 +154,7 @@ def convert_argument(
153
154
  return convert_argument(value, type_.of_type, scalar_registry, config)
154
155
 
155
156
  if isinstance(type_, StrawberryList):
156
- value_list = cast(Iterable, value)
157
+ value_list = cast("Iterable", value)
157
158
  return [
158
159
  convert_argument(x, type_.of_type, scalar_registry, config)
159
160
  for x in value_list
@@ -177,7 +178,7 @@ def convert_argument(
177
178
 
178
179
  type_definition = type_.__strawberry_definition__
179
180
  for field in type_definition.fields:
180
- value = cast(Mapping, value)
181
+ value = cast("Mapping", value)
181
182
  graphql_name = config.name_converter.from_field(field)
182
183
 
183
184
  if graphql_name in value:
@@ -188,7 +189,7 @@ def convert_argument(
188
189
  config,
189
190
  )
190
191
 
191
- type_ = cast(type, type_)
192
+ type_ = cast("type", type_)
192
193
  return type_(**kwargs)
193
194
 
194
195
  raise UnsupportedTypeError(type_)
strawberry/types/auto.py CHANGED
@@ -44,7 +44,7 @@ class StrawberryAutoMeta(type):
44
44
  resolved = namespace and namespace.get(resolved)
45
45
 
46
46
  if resolved is not None:
47
- instance = cast(type, resolved)
47
+ instance = cast("type", resolved)
48
48
 
49
49
  if instance is auto:
50
50
  return True
strawberry/types/field.py CHANGED
@@ -369,7 +369,7 @@ class StrawberryField(dataclasses.Field):
369
369
  # If the field is still generic, try to resolve it from the type_definition
370
370
  # that is asking for it.
371
371
  if (
372
- _is_generic(cast(Union[StrawberryType, type], resolved))
372
+ _is_generic(cast("Union[StrawberryType, type]", resolved))
373
373
  and type_definition is not None
374
374
  and type_definition.type_var_map
375
375
  and isinstance(resolved, StrawberryType)
@@ -147,7 +147,7 @@ class ReservedType(NamedTuple):
147
147
  return None
148
148
 
149
149
  def is_reserved_type(self, other: builtins.type) -> bool:
150
- origin = cast(type, get_origin(other)) or other
150
+ origin = cast("type", get_origin(other)) or other
151
151
  if origin is Annotated:
152
152
  # Handle annotated arguments such as Private[str] and DirectiveValue[str]
153
153
  return type_has_annotation(other, self.type)
@@ -105,7 +105,7 @@ class StrawberryLazyReference:
105
105
  frame = sys._getframe(2)
106
106
  # TODO: raise a nice error if frame is None
107
107
  assert frame is not None
108
- self.package = cast(str, frame.f_globals["__package__"])
108
+ self.package = cast("str", frame.f_globals["__package__"])
109
109
 
110
110
  def resolve_forward_ref(self, forward_ref: ForwardRef) -> LazyType:
111
111
  return LazyType(forward_ref.__forward_arg__, self.module, self.package)
@@ -71,7 +71,7 @@ def _get_fields(
71
71
  # Find the class the each field was originally defined on so we can use
72
72
  # that scope later when resolving the type, as it may have different names
73
73
  # available to it.
74
- origins: dict[str, type] = {field_name: cls for field_name in cls.__annotations__}
74
+ origins: dict[str, type] = dict.fromkeys(cls.__annotations__, cls)
75
75
 
76
76
  for base in cls.__mro__:
77
77
  if has_object_definition(base):
strawberry/types/union.py CHANGED
@@ -93,7 +93,7 @@ class StrawberryUnion(StrawberryType):
93
93
  @property
94
94
  def types(self) -> tuple[StrawberryType, ...]:
95
95
  return tuple(
96
- cast(StrawberryType, annotation.resolve())
96
+ cast("StrawberryType", annotation.resolve())
97
97
  for annotation in self.type_annotations
98
98
  )
99
99
 
strawberry/utils/aio.py CHANGED
@@ -1,17 +1,34 @@
1
1
  import sys
2
2
  from collections.abc import AsyncGenerator, AsyncIterable, AsyncIterator, Awaitable
3
+ from contextlib import asynccontextmanager, suppress
3
4
  from typing import (
4
5
  Any,
5
6
  Callable,
6
7
  Optional,
7
8
  TypeVar,
8
9
  Union,
10
+ cast,
9
11
  )
10
12
 
11
13
  _T = TypeVar("_T")
12
14
  _R = TypeVar("_R")
13
15
 
14
16
 
17
+ @asynccontextmanager
18
+ async def aclosing(thing: _T) -> AsyncGenerator[_T, None]:
19
+ """Ensure that an async generator is closed properly.
20
+
21
+ Port from the stdlib contextlib.asynccontextmanager. Can be removed
22
+ and replaced with the stdlib version when we drop support for Python
23
+ versions before 3.10.
24
+ """
25
+ try:
26
+ yield thing
27
+ finally:
28
+ with suppress(Exception):
29
+ await cast("AsyncGenerator", thing).aclose()
30
+
31
+
15
32
  async def aenumerate(
16
33
  iterable: Union[AsyncIterator[_T], AsyncIterable[_T]],
17
34
  ) -> AsyncIterator[tuple[int, _T]]:
@@ -42,11 +59,13 @@ async def aislice(
42
59
  except StopIteration:
43
60
  return
44
61
 
62
+ i = 0
45
63
  try:
46
- async for i, element in aenumerate(aiterable):
64
+ async for element in aiterable:
47
65
  if i == nexti:
48
66
  yield element
49
67
  nexti = next(it)
68
+ i += 1
50
69
  except StopIteration:
51
70
  return
52
71
 
@@ -27,7 +27,7 @@ def get_operation_type(
27
27
 
28
28
  if operation_name:
29
29
  for d in graphql_document.definitions:
30
- d = cast(OperationDefinitionNode, d)
30
+ d = cast("OperationDefinitionNode", d)
31
31
  if d.name and d.name.value == operation_name:
32
32
  definition = d
33
33
  break
@@ -256,11 +256,11 @@ def _get_namespace_from_ast(
256
256
  and expr.value.id == "Union"
257
257
  ):
258
258
  if hasattr(ast, "Index") and isinstance(expr.slice, ast.Index):
259
- expr_slice = cast(Any, expr.slice).value
259
+ expr_slice = cast("Any", expr.slice).value
260
260
  else:
261
261
  expr_slice = expr.slice
262
262
 
263
- for elt in cast(ast.Tuple, expr_slice).elts:
263
+ for elt in cast("ast.Tuple", expr_slice).elts:
264
264
  extra.update(_get_namespace_from_ast(elt, globalns, localns))
265
265
  elif (
266
266
  isinstance(expr, ast.Subscript)
@@ -274,12 +274,12 @@ def _get_namespace_from_ast(
274
274
  and expr.value.id == "Annotated"
275
275
  ):
276
276
  if hasattr(ast, "Index") and isinstance(expr.slice, ast.Index):
277
- expr_slice = cast(Any, expr.slice).value
277
+ expr_slice = cast("Any", expr.slice).value
278
278
  else:
279
279
  expr_slice = expr.slice
280
280
 
281
281
  args: list[str] = []
282
- for elt in cast(ast.Tuple, expr_slice).elts:
282
+ for elt in cast("ast.Tuple", expr_slice).elts:
283
283
  extra.update(_get_namespace_from_ast(elt, globalns, localns))
284
284
  args.append(ast.unparse(elt))
285
285
 
@@ -311,7 +311,7 @@ def eval_type(
311
311
  globalns = globalns or {}
312
312
  # If this is not a string, maybe its args are (e.g. list["Foo"])
313
313
  if isinstance(type_, ForwardRef):
314
- ast_obj = cast(ast.Expr, ast.parse(type_.__forward_arg__).body[0])
314
+ ast_obj = cast("ast.Expr", ast.parse(type_.__forward_arg__).body[0])
315
315
 
316
316
  # For Python 3.10+, we can use the built-in _eval_type function directly.
317
317
  # It will handle "|" notations properly
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: strawberry-graphql
3
- Version: 0.263.1
3
+ Version: 0.264.0
4
4
  Summary: A library for creating GraphQL APIs
5
5
  License: MIT
6
6
  Keywords: graphql,api,rest,starlette,async
@@ -3,13 +3,13 @@ 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
- strawberry/aiohttp/views.py,sha256=JXYd_qO_LD4QbRJ7iAnZbEsezwvPOmTujTGNAb75bRU,7885
7
- strawberry/annotation.py,sha256=FYoUNz857yt3Hewm8bYFmMLpG7dTdKpc4j9nBGsv40k,13038
8
- strawberry/asgi/__init__.py,sha256=55tsJmqIPlQgeScDUQuADalLlN5ymdHOeFHWzyII7aY,8167
6
+ strawberry/aiohttp/views.py,sha256=AQVBbZTBa127TbQRwoBelTHrVdZnJeGdMYcTfNmoaSc,7887
7
+ strawberry/annotation.py,sha256=1gaSo9XivkXwWjpEtsM4h5GLn9XGmPYZbxmLCXyh3dA,13116
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
11
11
  strawberry/chalice/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- strawberry/chalice/views.py,sha256=-bYqNxeiWpxpstdlh0ZQxpNUB9ZaBEVvEwn3Z5yTT8k,4752
12
+ strawberry/chalice/views.py,sha256=mq2ILQrT9n9x13S8DCag1yInIXSShJU6GVMOCCeDlZ4,4758
13
13
  strawberry/channels/__init__.py,sha256=AVmEwhzGHcTycMCnZYcZFFqZV8tKw9FJN4YXws-vWFA,433
14
14
  strawberry/channels/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  strawberry/channels/handlers/base.py,sha256=3mSvT2HMlOoWr0Y_8y1wwSmvCmB8osy2pEK1Kc5zJ5M,7841
@@ -20,7 +20,7 @@ strawberry/channels/testing.py,sha256=dc9mvSm9YdNOUgQk5ou5K4iE2h6TP5quKnk4Xdtn-I
20
20
  strawberry/cli/__init__.py,sha256=ibaAZsZEk76j9eK1zcbsCN9It-pd0rneCuEGPzhxJWA,647
21
21
  strawberry/cli/app.py,sha256=tTMBV1pdWqMcwjWO2yn-8oLDhMhfJvUzyQtWs75LWJ0,54
22
22
  strawberry/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- strawberry/cli/commands/codegen.py,sha256=22DeDLVXwkTk9kqdMevmA0n5yHFxdjGDJIAvxYV-NCo,3810
23
+ strawberry/cli/commands/codegen.py,sha256=WbX8uqF-dpQk1QjQm3H4AvNSZ4lIUOTSPghii3attj8,3812
24
24
  strawberry/cli/commands/export_schema.py,sha256=8XBqbejk0kT2fHky74DzW2TnE8APNMs0cKtatEjErUA,1024
25
25
  strawberry/cli/commands/schema_codegen.py,sha256=G6eV08a51sjVxCm3jn75oPn9hC8YarKiAKOY5bpTuKU,749
26
26
  strawberry/cli/commands/server.py,sha256=qj5wn22HvyJDzwnWzduIWRnS912XvD7GRhPGJkbLaz4,2217
@@ -37,7 +37,7 @@ strawberry/codegen/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
37
37
  strawberry/codegen/plugins/print_operation.py,sha256=PxNPw9gXtqC_upIhgM9I6pmb66g523VMcIaKgLDMuOc,6799
38
38
  strawberry/codegen/plugins/python.py,sha256=GgwxTGd16LPKxGuZBohJYWsarKjWfZY1-aGIA71m9MU,6903
39
39
  strawberry/codegen/plugins/typescript.py,sha256=LFEK2ZLz4tUukkwZvUTXhsi_cVca3ybsLaatsW5JA5g,3865
40
- strawberry/codegen/query_codegen.py,sha256=Wy_yMEZc7O3Jq5Et-rM1uUJBBl0-cElaiM2cSM0nHJk,30527
40
+ strawberry/codegen/query_codegen.py,sha256=F5z-6qK5KcagagBcZvnjx6iIvdJol17DsBQt7TqhCH4,30539
41
41
  strawberry/codegen/types.py,sha256=K5sjzNWDefOzdGtPumXyLuhnlEtd0zZXdPkF15lejk0,4181
42
42
  strawberry/codemods/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  strawberry/codemods/annotated_unions.py,sha256=T0KqJEmoOdOXVCOHI1G6ECvEVL2tzIRBenysrz3EhPQ,5988
@@ -49,13 +49,13 @@ strawberry/django/apps.py,sha256=ZWw3Mzv1Cgy0T9xT8Jr2_dkCTZjT5WQABb34iqnu5pc,135
49
49
  strawberry/django/context.py,sha256=XL85jDGAVnb2pwgm5uRUvIXwlGia3i-8ZVfKihf0T24,655
50
50
  strawberry/django/test/__init__.py,sha256=4xxdUZtIISSOwjrcnmox7AvT4WWjowCm5bUuPdQneMg,71
51
51
  strawberry/django/test/client.py,sha256=5sAZhCyNiydnQtauI_7H_TRnPfHV3V5d-FKxxDxvTAs,620
52
- strawberry/django/views.py,sha256=p_YEeotjbM2WgmBeSfzRF3xVnIdfp1e9Kyu-WKswrek,9682
52
+ strawberry/django/views.py,sha256=SiR2fxP42o0IP_Ti8NI2KNlKo0OUwXbEYcJdTzeoK_Q,9686
53
53
  strawberry/exceptions/__init__.py,sha256=3bo6LehH3CnO3BGol073FhI6eRmV2Mf6OBjf28v6gwY,6515
54
54
  strawberry/exceptions/conflicting_arguments.py,sha256=FJ5ZlZ_C9O7XS0H9hB0KGRRix0mcB4P6WwIccTJeh-g,1581
55
55
  strawberry/exceptions/duplicated_type_name.py,sha256=Yc8UKO_pTtuXZmkEWp1onBdQitkMSMrfvWfeauLQ-ZI,2204
56
56
  strawberry/exceptions/exception.py,sha256=a_MrBuZtQJD2Zd3pzdNpfuXdJPa6pNX3dz3NpjDSha8,3445
57
57
  strawberry/exceptions/exception_source.py,sha256=Krr9KprJLMuiDBYRzRYULvLIuSjd8gIaiXmPoPCHEDo,404
58
- strawberry/exceptions/handler.py,sha256=QmIXkAH1uNjEq8XWzza8xsG3m7qDeuX092frUhjibFo,2683
58
+ strawberry/exceptions/handler.py,sha256=dY-zaaEcx4pCg5UIKe5BkjSvqk-1D3WxCdh1FtP0eeM,2685
59
59
  strawberry/exceptions/invalid_argument_type.py,sha256=xu239AOYV0zKt4B6y3f4yZfcIJfB5qCcORWJBM9XPQw,2213
60
60
  strawberry/exceptions/invalid_union_type.py,sha256=zKxDsagrs4_4ATxSHuPBHY6eQO45S3G1v7b09qQZZ4g,3610
61
61
  strawberry/exceptions/missing_arguments_annotations.py,sha256=-WvTDW75Q2EYFrY3qVZJdbSpAk3UNWkXOnFRDgCzVOk,2007
@@ -74,19 +74,19 @@ strawberry/exceptions/utils/source_finder.py,sha256=kqSjCGIlnkD0DuCBYElqConp9wAv
74
74
  strawberry/experimental/__init__.py,sha256=2HP5XtxL8ZKsPp4EDRAbMCqiP7p2V4Cca278JUGxnt0,102
75
75
  strawberry/experimental/pydantic/__init__.py,sha256=UpO8wHNXGpoCYp34YStViInO1tsrGsMyhTVubTpJY7Y,255
76
76
  strawberry/experimental/pydantic/_compat.py,sha256=CUc7SmGA-viYoBgD4L8X483yTGyDKaKMjX3WYWkiohg,9710
77
- strawberry/experimental/pydantic/conversion.py,sha256=210v83ttSVhBlNM52to-x8s80V9WuOPez94qd5yDOD4,4224
77
+ strawberry/experimental/pydantic/conversion.py,sha256=LBkR3CukdZx9LLvmDyK75YhoOrl0AlF3UD7x8HYr7us,4226
78
78
  strawberry/experimental/pydantic/conversion_types.py,sha256=jf7PR5Q7hgo4J_AuxBK-BVj-8MC6vIg1k1pUfGfGTL8,925
79
- strawberry/experimental/pydantic/error_type.py,sha256=NdiaAv2zlaNKfzw0vGgG0lOLTfXAM8gQMk2LsfE7bI4,4555
79
+ strawberry/experimental/pydantic/error_type.py,sha256=RdmiUY4V0baXCAk80ST-XtCiZbndZaaUSEajQplDAzw,4557
80
80
  strawberry/experimental/pydantic/exceptions.py,sha256=pDMPL94ojuSGHxk8H8mI2pfWReG8BhqZ5T2eSxfOi9w,1486
81
81
  strawberry/experimental/pydantic/fields.py,sha256=NcB38JYk29fPwJWtoHkIvwTfqD2Ekf7fJ57GjvvK6mQ,2265
82
- strawberry/experimental/pydantic/object_type.py,sha256=O7b5LgQuzmE9EdmX4HPea5ul9lmM-08GS3R4HWf-dEk,12895
82
+ strawberry/experimental/pydantic/object_type.py,sha256=lcQgmWLulegTlGWmj_9GhPv1d2L_DdPpimVgMEr9aT0,12897
83
83
  strawberry/experimental/pydantic/utils.py,sha256=URSzmcK2KzNGsLv4RyFdFfJnr-ARNLkkM0D4CjijVQU,4035
84
84
  strawberry/ext/LICENSE,sha256=_oY0TZg0b_sW0--0T44aMTpy2e2zF1Kiyn8E1qDiivo,1249
85
85
  strawberry/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
86
  strawberry/ext/dataclasses/LICENSE,sha256=WZgm35K_3NJwLqxpEHJJi7CWxVrwTumEz5D3Dtd7WnA,13925
87
87
  strawberry/ext/dataclasses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
88
  strawberry/ext/dataclasses/dataclasses.py,sha256=bTW8nRwflW7_JtGhzXiKhe9Kajha_fgCfR0jVKrCzBw,2287
89
- strawberry/ext/mypy_plugin.py,sha256=O2WYgSVy9eeJqj7Gz1cTc3KDFTpHT8A41VNxskNHNHs,20438
89
+ strawberry/ext/mypy_plugin.py,sha256=KqpEWUnQftmmlC0CtK33H1FMR7P-WdI-F9Evnc60Mm0,20458
90
90
  strawberry/extensions/__init__.py,sha256=5U5A4HEXyJHT74MP6j_zx7Mom6S7ooklK-c9xA-kdHQ,1224
91
91
  strawberry/extensions/add_validation_rules.py,sha256=YwC_27jUpQ6DWcCB1RsuE1JD8R5rV7LAu5fVjdLchYs,1358
92
92
  strawberry/extensions/base_extension.py,sha256=ihsbUrhYt-x4X1j5a34FASmNF661Xev-3w4Qc5gUbHw,2351
@@ -110,7 +110,7 @@ strawberry/extensions/utils.py,sha256=sjhxItHzbDhqHtnR63WbE35qzHhTyf9NSffidet79H
110
110
  strawberry/extensions/validation_cache.py,sha256=D4Jyj7WoUkgp_UH6bo9ytRZbPwJnencbti5Z1GszGhM,1433
111
111
  strawberry/fastapi/__init__.py,sha256=p5qg9AlkYjNOWKcT4uRiebIpR6pIb1HqDMiDfF5O3tg,147
112
112
  strawberry/fastapi/context.py,sha256=O_cDNppfUJJecM0ZU_RJ-dhdF0o1x39JfYvYg-7uob4,684
113
- strawberry/fastapi/router.py,sha256=4CqapWgqma_mU-s7TpFhpJwlO7UzBClAgouD7HN8NKs,12016
113
+ strawberry/fastapi/router.py,sha256=cfRGP1SL_QaSNjCk3Zi7YDQte1EsIljvqTDB1J0O4fQ,12018
114
114
  strawberry/federation/__init__.py,sha256=Pw01N0rG9o0NaUxXLMNGeW5oLENeWVx_d8Kuef1ES4s,549
115
115
  strawberry/federation/argument.py,sha256=rs71S1utiNUd4XOLRa9KVtSMA3yqvKJnR_qdJqX6PPM,860
116
116
  strawberry/federation/enum.py,sha256=MdtblT4Z8_-2L8gUdo0ROnw3aY8RAAtTvyfHbCBBPrA,3033
@@ -118,7 +118,7 @@ strawberry/federation/field.py,sha256=pcFgl33xgJcunb6TxfOPuzsAQTGbbzjKi41SUUSV3w
118
118
  strawberry/federation/mutation.py,sha256=5t2E419m4K2W6LoWEOzWgMdL2J0PwHnsffYkpChqqDQ,67
119
119
  strawberry/federation/object_type.py,sha256=tuUn_YqtOcvivVSHrXESSFr2kae79xW_SLUV3oNINdE,9381
120
120
  strawberry/federation/scalar.py,sha256=sOVmhYnogew6hP6-7PQMMYQHHWE-BEyo52BT7_IYGiw,4649
121
- strawberry/federation/schema.py,sha256=bDhZ6zS3-6XA-MWlE2om5wgCWf1g8B0kPp4_XaGz-dE,13250
121
+ strawberry/federation/schema.py,sha256=r-_SnThdDbeQDst9iUnwFCA-CoeF7KzQw_C4-yI3QeA,13252
122
122
  strawberry/federation/schema_directive.py,sha256=aa91b3WN0vdqBrkmArx_TDAxwXXu9fKcdmxQhtiumwg,1769
123
123
  strawberry/federation/schema_directives.py,sha256=81QiHIbN4xNOUs2Ttd6WE2oGRsBVAG1-_Sw-eGwaq94,6394
124
124
  strawberry/federation/types.py,sha256=cqyx_-GJ5d__hac7bip_dQKm9NGR88D0N1JVnde0Ji8,360
@@ -129,9 +129,9 @@ strawberry/file_uploads/__init__.py,sha256=v2-6FGBqnTnMPSUTFOiXpIutDMl-ga0PFtw5t
129
129
  strawberry/file_uploads/scalars.py,sha256=NRDeB7j8aotqIkz9r62ISTf4DrxQxEZYUuHsX5K16aU,161
130
130
  strawberry/file_uploads/utils.py,sha256=-c6TbqUI-Dkb96hWCrZabh6TL2OabBuQNkCarOqgDm4,1181
131
131
  strawberry/flask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
- strawberry/flask/views.py,sha256=HmkqZrO6KSBSM-yNbJkBR34Q5n7oVsTsuCzt2Og5Zws,6351
132
+ strawberry/flask/views.py,sha256=MCvAsNgTZLU8RvTYKWfnLU2w7Wv1ZZpxW9W3TyTZuPY,6355
133
133
  strawberry/http/__init__.py,sha256=BV_JpUwNongW38UzFstM72hDXNUjSxdJm_M96pDFU1c,1122
134
- strawberry/http/async_base_view.py,sha256=USt2Ife2RZ1WjhwRBD5_5K-qJOz6UIdXiMGhnnd59T4,16350
134
+ strawberry/http/async_base_view.py,sha256=9micSD_KpoB8oBHAPlcTpt44bVABDYScvyfHa3NP4rE,16352
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
@@ -141,25 +141,25 @@ strawberry/http/temporal_response.py,sha256=HTt65g-YxqlPGxjqvH5bzGoU1b3CctVR-9cm
141
141
  strawberry/http/types.py,sha256=H0wGOdCO-5tNKZM_6cAtNRwZAjoEXnAC5N0Q7b70AtU,398
142
142
  strawberry/http/typevars.py,sha256=Uu6NkKe3h7o29ZWwldq6sJy4ioSSeXODTCDRvY2hUpE,489
143
143
  strawberry/litestar/__init__.py,sha256=zsXzg-mglCGUVO9iNXLm-yadoDSCK7k-zuyRqyvAh1w,237
144
- strawberry/litestar/controller.py,sha256=_XOvDTxBBUNfot-G880NyK0Zf9W8q5ABcxPOCvDajY8,14122
144
+ strawberry/litestar/controller.py,sha256=DSbjl7QGCY_TX77EomqDvtH8-ZK6wfhL81IUEFa-JJs,14124
145
145
  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=bQ1y8QGSfigU4L-oKi6Akr8LQ75KpUt_WLlp81QFnDE,18800
149
+ strawberry/printer/printer.py,sha256=49u3QwttTGvh13HXZtbTnkZzBwL1k5SLf8rXQLiTpl4,18814
150
150
  strawberry/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
151
151
  strawberry/quart/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
- strawberry/quart/views.py,sha256=FmzvRA8xjtOz2ZqxwyX10OIDxvnhncPYjywXdFJ037k,4447
152
+ strawberry/quart/views.py,sha256=Hjm93A9j9fy--DQVhsPQ_PakqYtajyWeuH7wUnSLYoA,4449
153
153
  strawberry/relay/__init__.py,sha256=Vi4btvA_g6Cj9Tk_F9GCSegapIf2WqkOWV8y3P0cTCs,553
154
- strawberry/relay/exceptions.py,sha256=KjqzBhOo4qp38GZ7O8aRtAb82sijc1wJKllhGFaRvt4,4029
155
- strawberry/relay/fields.py,sha256=3J5py9uXGDowSxlG-NvwjTquw1abUIUtgyZd8egGtD4,18086
156
- strawberry/relay/types.py,sha256=0JFO3HYGM1YlRQ11ZGiL89WLr5cvLMN_PMSEC0Vv2n4,30168
157
- strawberry/relay/utils.py,sha256=OqeeTy_3TFMjmERnCNleUpW3bFf-yuQDzra8l5PNlyY,5817
154
+ strawberry/relay/exceptions.py,sha256=Za0iXLBGZtd1HkesGm4xTr3QOeuyiCAe1hiCCQ2HHvE,4036
155
+ strawberry/relay/fields.py,sha256=wIwBTXsDimG6incMglEn7Gr7CO8H8AA25yhM8MT8I-0,18100
156
+ strawberry/relay/types.py,sha256=u3-V7LPe_CniEmREMJyvXH9L9Ecc2CWQC5hRfUvL_Q4,30477
157
+ strawberry/relay/utils.py,sha256=-QxroxkSYtFnMYsJyTyfIi0I1fLtjnt6siW0kLNiyfs,5908
158
158
  strawberry/resolvers.py,sha256=Vdidc3YFc4-olSQZD_xQ1icyAFbyzqs_8I3eSpMFlA4,260
159
159
  strawberry/sanic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
160
160
  strawberry/sanic/context.py,sha256=qN7I9K_qIqgdbG_FbDl8XMb9aM1PyjIxSo8IAg2Uq8o,844
161
- strawberry/sanic/utils.py,sha256=73lkICa7ZMJvXpcNaIhoKsDkdIA7amOCiV6DN_ib7qY,1068
162
- strawberry/sanic/views.py,sha256=-X3mKtcqxS6_4OZ7DU5PgoLfd5ebsoQXOsG8ZHE_TV0,7067
161
+ strawberry/sanic/utils.py,sha256=DiHWMfaulaP2QSi79NwI847xkUiBybvLdr0VSbKAwNQ,1044
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
165
  strawberry/schema/base.py,sha256=q5UAw6do4Ele5Cf8dNAouiPjNmZoCBNFqh5Vl05caCI,3864
@@ -167,7 +167,7 @@ strawberry/schema/compat.py,sha256=9qJ0lhYJeaN43ayFgVz708ZMvedBhofiTSw9kpFqmjU,1
167
167
  strawberry/schema/config.py,sha256=6BpCbNNCuekGgiKEPt2mliMqLH_wIjJmSW0tLbnJwk4,924
168
168
  strawberry/schema/exceptions.py,sha256=rqVNb_oYrKM0dHPgvAemqCG6Um282LPPu4zwQ5cZqs4,584
169
169
  strawberry/schema/name_converter.py,sha256=1rrpch-wBidlWfZ7hVouvIIhJpdxWfB5tWnO6PqYug8,6544
170
- strawberry/schema/schema.py,sha256=bbJL5dQRiaeo6DHeztTbF2u8VkSNAnVqraV1SSauHk8,34396
170
+ strawberry/schema/schema.py,sha256=qthZttzb9a0GEcwh7trqBKHmuPXOgQlnceqiCRPj4_s,34566
171
171
  strawberry/schema/schema_converter.py,sha256=-_QZCcmHWIEjRPqEChtPMPbFtgz6YmLn8V6KXvZJMOk,37192
172
172
  strawberry/schema/types/__init__.py,sha256=oHO3COWhL3L1KLYCJNY1XFf5xt2GGtHiMC-UaYbFfnA,68
173
173
  strawberry/schema/types/base_scalars.py,sha256=JRUq0WjEkR9dFewstZnqnZKp0uOEipo4UXNF5dzRf4M,1971
@@ -184,10 +184,10 @@ strawberry/static/pathfinder.html,sha256=0DPx9AmJ2C_sJstFXnWOz9k5tVQHeHaK7qdVY4l
184
184
  strawberry/subscriptions/__init__.py,sha256=1VGmiCzFepqRFyCikagkUoHHdoTG3XYlFu9GafoQMws,170
185
185
  strawberry/subscriptions/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
186
186
  strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py,sha256=wN6dkMu6WiaIZTE19PGoN9xXpIN_RdDE_q7F7ZgjCxk,138
187
- strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py,sha256=roPc1wHGllk5zxBJD5g20TLhOChFID76kQU1ItOqzqw,15077
187
+ strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py,sha256=PFJDEYOXqqROkczVKZ8k4yWJbib1cE6ySx9GIR5hAVI,15079
188
188
  strawberry/subscriptions/protocols/graphql_transport_ws/types.py,sha256=N9r2mXg5jmmjYoZV5rWf3lAzgylCOUrbKGmClXCoOso,2169
189
189
  strawberry/subscriptions/protocols/graphql_ws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
- strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=ULWDF_v0q0wIuLQ9q6UC_C8x63HoDu79kQV_RiKuxhY,8301
190
+ strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=h0E09Ktn1Ag9RWh4oALSfcIGYv8PdvPqaKAeriveYAY,8303
191
191
  strawberry/subscriptions/protocols/graphql_ws/types.py,sha256=Uumiz-1O5qQnx-ERBaQtaf7db5yx-V9LMypOn9oGKwM,2003
192
192
  strawberry/test/__init__.py,sha256=lKVbKJDBnrYSPYHIKrg54UpaZcSoL93Z01zOpA1IzZM,115
193
193
  strawberry/test/client.py,sha256=ILAttb6A3jplH5wJNMeyyT1u_Q8KnollfpYLP_BVZR4,6438
@@ -195,28 +195,28 @@ strawberry/tools/__init__.py,sha256=pdGpZx8wpq03VfUZJyF9JtYxZhGqzzxCiipsalWxJX4,
195
195
  strawberry/tools/create_type.py,sha256=--DgfZOmXJBKGcVxehNISyvpw1HzwFvRtUUPc0634MA,2056
196
196
  strawberry/tools/merge_types.py,sha256=hUMRRNM28FyPp70jRA3d4svv9WoEBjaNpihBt3DaY0I,1023
197
197
  strawberry/types/__init__.py,sha256=baWEdDkkmCcITOhkg2hNUOenrNV1OYdxGE5qgvIRwwU,351
198
- strawberry/types/arguments.py,sha256=9WGsRLqqYCfviviLCzZj8kLKAPL_yGInuzrrsXq_6ck,9447
199
- strawberry/types/auto.py,sha256=WIAndkzy2tPaGMgvJPsoxhfPo13oxAuPR7IpBqLPsOo,3005
198
+ strawberry/types/arguments.py,sha256=Ny4meiKYtcXpAV0rFKWJXOJK5iQB-zs-23n0w8S8zVc,9458
199
+ strawberry/types/auto.py,sha256=WZ2cQAI8nREUigBzpzFqIKGjJ_C2VqpAPNe8vPjTciM,3007
200
200
  strawberry/types/base.py,sha256=rx7J9dGUCUCap0lgb5Yyb_WXnB95FZEY6gQcYasiI9w,14907
201
201
  strawberry/types/cast.py,sha256=fx86MkLW77GIximBAwUk5vZxSGwDqUA6XicXvz8EXwQ,916
202
202
  strawberry/types/enum.py,sha256=gy4gZvhprZqXJrjeBtokW-0CUcOl6BUOaI2apOSn2mc,5974
203
203
  strawberry/types/execution.py,sha256=Ylc0lH0nyHyQW509mVqBh2sIN5qpf4cJtt8QhVmWGgI,3749
204
- strawberry/types/field.py,sha256=CKUBJyq2aj4Q6abrkpZFjnT72_5ac-45h1N2k_eQEls,21603
204
+ strawberry/types/field.py,sha256=vxb7JvkHfRmDCYsjhDmVnO2lMbtSOteQm3jQUeSFu6g,21605
205
205
  strawberry/types/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
206
- strawberry/types/fields/resolver.py,sha256=IqhZUq3a4x2lxfUEEdRfxixzwJlPReWv8cx-eVIc1Fo,14184
206
+ strawberry/types/fields/resolver.py,sha256=iYYVUVpm-JM3AFQHuQFeOooftiQWFw3kg64pqSNIe_0,14186
207
207
  strawberry/types/graphql.py,sha256=gXKzawwKiow7hvoJhq5ApNJOMUCnKmvTiHaKY5CK1Lw,867
208
208
  strawberry/types/info.py,sha256=bPP7XTQQScmskJcmVv36iqLAWpdGmF2nhYjI1pJ-csI,4709
209
- strawberry/types/lazy_type.py,sha256=ILLDSbFpsg6u1FBztrI1OumRFCJ2182-7FR9oZeJgks,5077
209
+ strawberry/types/lazy_type.py,sha256=dlP9VcMjZc9sdgriiQGzOZa0TToB6Ee7zpIP8h7TLC0,5079
210
210
  strawberry/types/mutation.py,sha256=cg-_O2WWnZ-GSwOIv0toSdxlGeY2lhBBxZ24AifJuSM,11978
211
211
  strawberry/types/nodes.py,sha256=RwZB43OT9BS3Cqjgq4AazqOfyq_y0GD2ysC86EDBv5U,5134
212
212
  strawberry/types/object_type.py,sha256=CW-detiYjGmk4kHJP-vUK9sBkBuDic4nswDub4zUyvc,15075
213
213
  strawberry/types/private.py,sha256=DhJs50XVGtOXlxWZFkRpMxQ5_6oki0-x_WQsV1bGUxk,518
214
214
  strawberry/types/scalar.py,sha256=CM24Ixg4DKxxI1C6hTNGYVitohJibs8BpGtntRZvMXw,6284
215
- strawberry/types/type_resolver.py,sha256=4jaRh5MntX7wcBY8ksK-ZE3849K46Mwsswc4ebFCQWI,6545
216
- strawberry/types/union.py,sha256=3Wk0O9ocMLgiv4fhC9OcS7em3sZP9UaFypmRbz3Ekgg,9960
215
+ strawberry/types/type_resolver.py,sha256=fH2ZOK4dAGgu8AMPi-JAXe_kEAbvvw2MCYXqbpx-kTc,6529
216
+ strawberry/types/union.py,sha256=jlIQwIZdvvD78ybYEy0CB4P7xnr07rb3VuK0SfCUvPk,9962
217
217
  strawberry/types/unset.py,sha256=7DVK-WWxVLo41agvavTvIbphE42BmY8UpGolXfasIvw,1682
218
218
  strawberry/utils/__init__.py,sha256=wuuNvKjcMfE0l4lqrlC-cc0_SR4hV19gNBJ3Mcn7l3A,141
219
- strawberry/utils/aio.py,sha256=Y78UoqWJE_mKJBVSLW1EUM43zV5MWt7yXqlvoktKkoA,1696
219
+ strawberry/utils/aio.py,sha256=Nry5jxFHvipGS1CwX5VvFS2YQ6_bp-_cewnI6v9A7-A,2226
220
220
  strawberry/utils/await_maybe.py,sha256=YdjfuzjDVjph0VH0WkwvU4ezsjl_fELnGrLC1_bvb_U,449
221
221
  strawberry/utils/dataclasses.py,sha256=1wvVq0vgvjrRSamJ3CBJpkLu1KVweTmw5JLXmagdGes,856
222
222
  strawberry/utils/debug.py,sha256=eP-wyKSSt7YHHY_lJdSa2hDlrBPd72kDtmGdFZ0Kyyo,1440
@@ -225,11 +225,11 @@ strawberry/utils/graphql_lexer.py,sha256=JUVJrJ6Ax0t7m6-DTWFzf4cvXrC02VPmL1NS2zM
225
225
  strawberry/utils/importer.py,sha256=NtTgNaNSW4TnlLo_S34nxXq14RxUAec-QlEZ0LON28M,629
226
226
  strawberry/utils/inspect.py,sha256=-aFT65PkQ9KXo5w8Q2uveBJ8jEpi40sTqRipRQVdYR8,3406
227
227
  strawberry/utils/logging.py,sha256=U1cseHGquN09YFhFmRkiphfASKCyK0HUZREImPgVb0c,746
228
- strawberry/utils/operation.py,sha256=SSXxN-vMqdHO6W2OZtip-1z7y4_A-eTVFdhDvhKeLCk,1193
228
+ strawberry/utils/operation.py,sha256=s7ajvLg_q6v2mg47kEMQPjO_J-XluMKTCwo4d47mGvE,1195
229
229
  strawberry/utils/str_converters.py,sha256=-eH1Cl16IO_wrBlsGM-km4IY0IKsjhjnSNGRGOwQjVM,897
230
- strawberry/utils/typing.py,sha256=Ux0Hl46lhuXvOKK-C5hj6nlz3zDn8P4CUGH2nUVD2vU,13373
231
- strawberry_graphql-0.263.1.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
232
- strawberry_graphql-0.263.1.dist-info/METADATA,sha256=SJpBy1sJMTPHcT_fQNlAs6sK1xMsxT4PIiYieF1U9Jc,7679
233
- strawberry_graphql-0.263.1.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
234
- strawberry_graphql-0.263.1.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
235
- strawberry_graphql-0.263.1.dist-info/RECORD,,
230
+ strawberry/utils/typing.py,sha256=Xmnhwvnw8RIQVIc5D5iI4_9qM4Thpk7tWx8xf-RW_So,13383
231
+ strawberry_graphql-0.264.0.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
232
+ strawberry_graphql-0.264.0.dist-info/METADATA,sha256=Z4gLrc-diDadDxYz17PQW1OIjVnLJ-qwQjIJQSkLYO0,7679
233
+ strawberry_graphql-0.264.0.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
234
+ strawberry_graphql-0.264.0.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
235
+ strawberry_graphql-0.264.0.dist-info/RECORD,,