strawberry-graphql 0.228.0__py3-none-any.whl → 0.228.0.dev1713643365__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.
@@ -114,7 +114,7 @@ def error_type(
114
114
  ]
115
115
 
116
116
  wrapped = _wrap_dataclass(cls)
117
- extra_fields = cast(List[dataclasses.Field], _get_fields(wrapped, {}))
117
+ extra_fields = cast(List[dataclasses.Field], _get_fields(wrapped))
118
118
  private_fields = get_private_fields(wrapped)
119
119
 
120
120
  all_model_fields.extend(
@@ -177,7 +177,7 @@ def type(
177
177
  )
178
178
 
179
179
  wrapped = _wrap_dataclass(cls)
180
- extra_strawberry_fields = _get_fields(wrapped, {})
180
+ extra_strawberry_fields = _get_fields(wrapped)
181
181
  extra_fields = cast(List[dataclasses.Field], extra_strawberry_fields)
182
182
  private_fields = get_private_fields(wrapped)
183
183
 
@@ -27,8 +27,7 @@ class DatadogTracingExtension(SchemaExtension):
27
27
 
28
28
  @cached_property
29
29
  def _resource_name(self) -> str:
30
- if self.execution_context.query is None:
31
- return "query_missing"
30
+ assert self.execution_context.query
32
31
 
33
32
  query_hash = self.hash_query(self.execution_context.query)
34
33
 
@@ -79,23 +78,15 @@ class DatadogTracingExtension(SchemaExtension):
79
78
  )
80
79
  self.request_span.set_tag("graphql.operation_name", self._operation_name)
81
80
 
82
- query = self.execution_context.query
83
-
84
- if query is not None:
85
- query = query.strip()
86
- operation_type = "query"
87
-
88
- if query.startswith("mutation"):
89
- operation_type = "mutation"
90
- elif query.startswith("subscription"): # pragma: no cover
91
- operation_type = "subscription"
92
- else:
93
- operation_type = "query_missing"
81
+ assert self.execution_context.query
94
82
 
83
+ operation_type = "query"
84
+ if self.execution_context.query.strip().startswith("mutation"):
85
+ operation_type = "mutation"
86
+ elif self.execution_context.query.strip().startswith("subscription"):
87
+ operation_type = "subscription"
95
88
  self.request_span.set_tag("graphql.operation_type", operation_type)
96
-
97
89
  yield
98
-
99
90
  self.request_span.finish()
100
91
 
101
92
  def on_validate(self) -> Generator[None, None, None]:
@@ -39,7 +39,7 @@ def schema_directive(
39
39
  ) -> Callable[..., T]:
40
40
  def _wrap(cls: T) -> T:
41
41
  cls = _wrap_dataclass(cls)
42
- fields = _get_fields(cls, {})
42
+ fields = _get_fields(cls)
43
43
 
44
44
  cls.__strawberry_directive__ = StrawberryFederationSchemaDirective(
45
45
  python_name=cls.__name__,
strawberry/object_type.py CHANGED
@@ -67,8 +67,7 @@ def _check_field_annotations(cls: Type[Any]):
67
67
  # If the field has a type override then use that instead of using
68
68
  # the class annotations or resolver annotation
69
69
  if field_.type_annotation is not None:
70
- if field_name not in cls_annotations:
71
- cls_annotations[field_name] = field_.type_annotation.annotation
70
+ cls_annotations[field_name] = field_.type_annotation.annotation
72
71
  continue
73
72
 
74
73
  # Make sure the cls has an annotation
@@ -86,8 +85,7 @@ def _check_field_annotations(cls: Type[Any]):
86
85
  field_name, resolver=field_.base_resolver
87
86
  )
88
87
 
89
- if field_name not in cls_annotations:
90
- cls_annotations[field_name] = field_.base_resolver.type_annotation
88
+ cls_annotations[field_name] = field_.base_resolver.type_annotation
91
89
 
92
90
  # TODO: Make sure the cls annotation agrees with the field's type
93
91
  # >>> if cls_annotations[field_name] != field.base_resolver.type:
@@ -135,13 +133,11 @@ def _process_type(
135
133
  description: Optional[str] = None,
136
134
  directives: Optional[Sequence[object]] = (),
137
135
  extend: bool = False,
138
- original_type_annotations: Optional[Dict[str, Any]] = None,
139
136
  ) -> T:
140
137
  name = name or to_camel_case(cls.__name__)
141
- original_type_annotations = original_type_annotations or {}
142
138
 
143
139
  interfaces = _get_interfaces(cls)
144
- fields = _get_fields(cls, original_type_annotations)
140
+ fields = _get_fields(cls)
145
141
  is_type_of = getattr(cls, "is_type_of", None)
146
142
  resolve_type = getattr(cls, "resolve_type", None)
147
143
 
@@ -249,25 +245,7 @@ def type(
249
245
  exc = ObjectIsNotClassError.type
250
246
  raise exc(cls)
251
247
 
252
- # when running `_wrap_dataclass` we lose some of the information about the
253
- # the passed types, especially the type_annotation inside the StrawberryField
254
- # this makes it impossible to customise the field type, like this:
255
- # >>> @strawberry.type
256
- # >>> class Query:
257
- # >>> a: int = strawberry.field(graphql_type=str)
258
- # so we need to extract the information before running `_wrap_dataclass`
259
- original_type_annotations: Dict[str, Any] = {}
260
-
261
- annotations = getattr(cls, "__annotations__", {})
262
-
263
- for field_name in annotations:
264
- field = getattr(cls, field_name, None)
265
-
266
- if field and isinstance(field, StrawberryField) and field.type_annotation:
267
- original_type_annotations[field_name] = field.type_annotation.annotation
268
-
269
248
  wrapped = _wrap_dataclass(cls)
270
-
271
249
  return _process_type(
272
250
  wrapped,
273
251
  name=name,
@@ -276,7 +254,6 @@ def type(
276
254
  description=description,
277
255
  directives=directives,
278
256
  extend=extend,
279
- original_type_annotations=original_type_annotations,
280
257
  )
281
258
 
282
259
  if cls is None:
strawberry/relay/types.py CHANGED
@@ -38,7 +38,7 @@ from strawberry.utils.aio import aenumerate, aislice, resolve_awaitable
38
38
  from strawberry.utils.inspect import in_async_context
39
39
  from strawberry.utils.typing import eval_type, is_classvar
40
40
 
41
- from .utils import from_base64, should_resolve_list_connection_edges, to_base64
41
+ from .utils import from_base64, to_base64
42
42
 
43
43
  if TYPE_CHECKING:
44
44
  from strawberry.scalars import ID
@@ -933,17 +933,6 @@ class ListConnection(Connection[NodeType]):
933
933
  overfetch,
934
934
  )
935
935
 
936
- if not should_resolve_list_connection_edges(info):
937
- return cls(
938
- edges=[],
939
- page_info=PageInfo(
940
- start_cursor=None,
941
- end_cursor=None,
942
- has_previous_page=False,
943
- has_next_page=False,
944
- ),
945
- )
946
-
947
936
  edges = [
948
937
  edge_class.resolve_edge(
949
938
  cls.resolve_node(v, info=info, **kwargs),
strawberry/relay/utils.py CHANGED
@@ -2,8 +2,6 @@ import base64
2
2
  from typing import Any, Tuple, Union
3
3
  from typing_extensions import assert_never
4
4
 
5
- from strawberry.types.info import Info
6
- from strawberry.types.nodes import InlineFragment, Selection
7
5
  from strawberry.types.types import StrawberryObjectDefinition
8
6
 
9
7
 
@@ -43,7 +41,7 @@ def to_base64(type_: Union[str, type, StrawberryObjectDefinition], node_id: Any)
43
41
  The node id itself
44
42
 
45
43
  Returns:
46
- A GlobalID, which is a string resulting from base64 encoding <TypeName>:<NodeID>.
44
+ A tuple of (TypeName, NodeID).
47
45
 
48
46
  Raises:
49
47
  ValueError:
@@ -63,42 +61,3 @@ def to_base64(type_: Union[str, type, StrawberryObjectDefinition], node_id: Any)
63
61
  raise ValueError(f"{type_} is not a valid GraphQL type or name") from e
64
62
 
65
63
  return base64.b64encode(f"{type_name}:{node_id}".encode()).decode()
66
-
67
-
68
- def should_resolve_list_connection_edges(info: Info) -> bool:
69
- """Check if the user requested to resolve the `edges` field of a connection.
70
-
71
- Args:
72
- info:
73
- The strawberry execution info resolve the type name from
74
-
75
- Returns:
76
- True if the user requested to resolve the `edges` field of a connection, False otherwise.
77
-
78
- """
79
- resolve_for_field_names = {"edges", "pageInfo"}
80
-
81
- def _check_selection(selection: Selection) -> bool:
82
- """Recursively inspect the selection to check if the user requested to resolve the `edges` field.
83
- Args:
84
- selection (Selection): The selection to check.
85
-
86
- Returns:
87
- bool: True if the user requested to resolve the `edges` field of a connection, False otherwise.
88
- """
89
- if (
90
- not isinstance(selection, InlineFragment)
91
- and selection.name in resolve_for_field_names
92
- ):
93
- return True
94
- if selection.selections:
95
- return any(
96
- _check_selection(selection) for selection in selection.selections
97
- )
98
- return False
99
-
100
- for selection_field in info.selected_fields:
101
- for selection in selection_field.selections:
102
- if _check_selection(selection):
103
- return True
104
- return False
strawberry/scalars.py CHANGED
@@ -16,10 +16,10 @@ JSON = scalar(
16
16
  description=(
17
17
  "The `JSON` scalar type represents JSON values as specified by "
18
18
  "[ECMA-404]"
19
- "(https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf)."
19
+ "(http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf)."
20
20
  ),
21
21
  specified_by_url=(
22
- "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf"
22
+ "http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf"
23
23
  ),
24
24
  serialize=lambda v: v,
25
25
  parse_value=lambda v: v,
@@ -33,6 +33,7 @@ from graphql import (
33
33
  GraphQLList,
34
34
  GraphQLNonNull,
35
35
  GraphQLObjectType,
36
+ GraphQLType,
36
37
  GraphQLUnionType,
37
38
  Undefined,
38
39
  ValueNode,
@@ -429,7 +430,7 @@ class GraphQLCoreConverter:
429
430
  ) -> GraphQLInterfaceType:
430
431
  interface_name = self.config.name_converter.from_type(interface)
431
432
 
432
- # Don't reevaluate known types
433
+ # Don't re-evaluate known types
433
434
  cached_type = self.type_map.get(interface_name, None)
434
435
  if cached_type:
435
436
  self.validate_same_type_definition(interface_name, interface, cached_type)
@@ -450,7 +451,27 @@ class GraphQLCoreConverter:
450
451
  # TODO: we should find the correct type here from the
451
452
  # generic
452
453
  if not type_definition.is_graphql_generic:
453
- return obj.__strawberry_definition__.name
454
+ return type_definition.name
455
+
456
+ # here we don't all the implementations of the generic
457
+ # we need to find a way to find them, for now maybe
458
+ # we can follow the union's approach and iterate over
459
+ # all the types in the schema, but we should probably
460
+ # optimize this
461
+
462
+ return_type: Optional[GraphQLType] = None
463
+
464
+ for possible_concrete_type in self.type_map.values():
465
+ possible_type = possible_concrete_type.definition
466
+
467
+ if not isinstance(possible_type, StrawberryObjectDefinition):
468
+ continue
469
+ if possible_type.is_implemented_by(obj):
470
+ return_type = possible_concrete_type.implementation
471
+ break
472
+
473
+ if return_type:
474
+ return return_type.name
454
475
 
455
476
  # Revert to calling is_type_of for cases where a direct subclass
456
477
  # of the interface is not returned (i.e. an ORM object)
@@ -794,7 +815,7 @@ class GraphQLCoreConverter:
794
815
  if not StrawberryUnion.is_valid_union_type(type_):
795
816
  raise InvalidUnionTypeError(union_name, type_, union_definition=union)
796
817
 
797
- # Don't reevaluate known types
818
+ # Don't re-evaluate known types
798
819
  if union_name in self.type_map:
799
820
  graphql_union = self.type_map[union_name].implementation
800
821
  assert isinstance(graphql_union, GraphQLUnionType) # For mypy
@@ -54,7 +54,7 @@ def schema_directive(
54
54
  ) -> Callable[..., T]:
55
55
  def _wrap(cls: T) -> T:
56
56
  cls = _wrap_dataclass(cls)
57
- fields = _get_fields(cls, {})
57
+ fields = _get_fields(cls)
58
58
 
59
59
  cls.__strawberry_directive__ = StrawberrySchemaDirective(
60
60
  python_name=cls.__name__,
@@ -6,7 +6,6 @@ import warnings
6
6
  from dataclasses import dataclass
7
7
  from datetime import timedelta
8
8
  from typing import TYPE_CHECKING, Any, Dict, Mapping, Optional, Tuple, Union, cast
9
- from typing_extensions import deprecated
10
9
 
11
10
  from starlite import (
12
11
  BackgroundTasks,
@@ -119,10 +118,6 @@ class GraphQLTransportWSHandler(BaseGraphQLTransportWSHandler):
119
118
  return await self._get_root_value()
120
119
 
121
120
 
122
- @deprecated(
123
- "The `starlite` integration is deprecated in favor of `litestar` integration",
124
- stacklevel=2,
125
- )
126
121
  class StarliteRequestAdapter(AsyncHTTPRequestAdapter):
127
122
  def __init__(self, request: Request[Any, Any]) -> None:
128
123
  self.request = request
@@ -158,10 +153,6 @@ class BaseContext:
158
153
  self.response: Optional[Response] = None
159
154
 
160
155
 
161
- @deprecated(
162
- "The `starlite` integration is deprecated in favor of `litestar` integration",
163
- stacklevel=2,
164
- )
165
156
  def make_graphql_controller(
166
157
  schema: BaseSchema,
167
158
  path: str = "",
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
4
  import sys
5
- from typing import Any, Dict, List, Type
5
+ from typing import Dict, List, Type
6
6
 
7
7
  from strawberry.annotation import StrawberryAnnotation
8
8
  from strawberry.exceptions import (
@@ -16,9 +16,7 @@ from strawberry.type import has_object_definition
16
16
  from strawberry.unset import UNSET
17
17
 
18
18
 
19
- def _get_fields(
20
- cls: Type[Any], original_type_annotations: Dict[str, Type[Any]]
21
- ) -> List[StrawberryField]:
19
+ def _get_fields(cls: Type) -> List[StrawberryField]:
22
20
  """Get all the strawberry fields off a strawberry.type cls
23
21
 
24
22
  This function returns a list of StrawberryFields (one for each field item), while
@@ -51,7 +49,6 @@ def _get_fields(
51
49
  passing a named function (i.e. not an anonymous lambda) to strawberry.field
52
50
  (typically as a decorator).
53
51
  """
54
-
55
52
  fields: Dict[str, StrawberryField] = {}
56
53
 
57
54
  # before trying to find any fields, let's first add the fields defined in
@@ -155,10 +152,6 @@ def _get_fields(
155
152
  assert_message = "Field must have a name by the time the schema is generated"
156
153
  assert field_name is not None, assert_message
157
154
 
158
- if field.name in original_type_annotations:
159
- field.type = original_type_annotations[field.name]
160
- field.type_annotation = StrawberryAnnotation(annotation=field.type)
161
-
162
155
  # TODO: Raise exception if field_name already in fields
163
156
  fields[field_name] = field
164
157
 
strawberry/types/types.py CHANGED
@@ -17,6 +17,7 @@ from typing import (
17
17
  from typing_extensions import Self, deprecated
18
18
 
19
19
  from strawberry.type import (
20
+ StrawberryList,
20
21
  StrawberryType,
21
22
  StrawberryTypeVar,
22
23
  WithStrawberryObjectDefinition,
@@ -169,21 +170,43 @@ class StrawberryObjectDefinition(StrawberryType):
169
170
  return False
170
171
 
171
172
  # Check the mapping of all fields' TypeVars
172
- for generic_field in type_definition.fields:
173
- generic_field_type = generic_field.type
174
- if not isinstance(generic_field_type, StrawberryTypeVar):
173
+ for field in type_definition.fields:
174
+ if not field.is_graphql_generic:
175
+ continue
176
+
177
+ value = getattr(root, field.name)
178
+ generic_field_type = field.type
179
+
180
+ while isinstance(generic_field_type, StrawberryList):
181
+ generic_field_type = generic_field_type.of_type
182
+
183
+ assert isinstance(value, (list, tuple))
184
+
185
+ if len(value) == 0:
186
+ # We can't infer the type of an empty list, so we just
187
+ # return the first one we find
188
+ return True
189
+
190
+ value = value[0]
191
+
192
+ if isinstance(generic_field_type, StrawberryTypeVar):
193
+ type_var = generic_field_type.type_var
194
+ # TODO: I don't think we support nested types properly
195
+ # if there's a union that has two nested types that
196
+ # are have the same field with different types, we might
197
+ # not be able to differentiate them
198
+ else:
175
199
  continue
176
200
 
177
201
  # For each TypeVar found, get the expected type from the copy's type map
178
- expected_concrete_type = self.type_var_map.get(
179
- generic_field_type.type_var.__name__
180
- )
202
+ expected_concrete_type = self.type_var_map.get(type_var.__name__)
203
+
204
+ # this shouldn't happen, but we do a defensive check just in case
181
205
  if expected_concrete_type is None:
182
- # TODO: Should this return False?
183
206
  continue
184
207
 
185
208
  # Check if the expected type matches the type found on the type_map
186
- real_concrete_type = type(getattr(root, generic_field.name))
209
+ real_concrete_type = type(value)
187
210
 
188
211
  # TODO: uniform type var map, at the moment we map object types
189
212
  # to their class (not to TypeDefinition) while we map enum to
strawberry/union.py CHANGED
@@ -194,7 +194,6 @@ class StrawberryUnion(StrawberryType):
194
194
  # Union in case a nested generic object matches against more than one type.
195
195
  concrete_types_for_union = (type_map[x.name] for x in type_.types)
196
196
 
197
- # TODO: do we still need to iterate over all types in `type_map`?
198
197
  for possible_concrete_type in chain(
199
198
  concrete_types_for_union, type_map.values()
200
199
  ):
@@ -213,13 +212,9 @@ class StrawberryUnion(StrawberryType):
213
212
  info.field_name, str(type(root)), set(type_.types)
214
213
  )
215
214
 
216
- # Return the name of the type. Returning the actual type is now deprecated
217
- if isinstance(return_type, GraphQLNamedType):
218
- # TODO: Can return_type ever _not_ be a GraphQLNamedType?
219
- return return_type.name
220
- else:
221
- # TODO: check if this is correct
222
- return return_type.__name__ # type: ignore
215
+ assert isinstance(return_type, GraphQLNamedType)
216
+
217
+ return return_type.name
223
218
 
224
219
  return _resolve_union_type
225
220
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.228.0
3
+ Version: 0.228.0.dev1713643365
4
4
  Summary: A library for creating GraphQL APIs
5
5
  Home-page: https://strawberry.rocks/
6
6
  License: MIT
@@ -86,10 +86,10 @@ strawberry/experimental/pydantic/__init__.py,sha256=jlsYH1j_9W4ieRpUKgt5zQPERDL7
86
86
  strawberry/experimental/pydantic/_compat.py,sha256=Qnuxy6d0cq5agd8SBlJWqvCPrH3wzMa3gm5Wtzmh0cM,8147
87
87
  strawberry/experimental/pydantic/conversion.py,sha256=_YMz4cYCwLUazkT2oCQ4B1gusksnXDHdFm1DldIrU7Q,4213
88
88
  strawberry/experimental/pydantic/conversion_types.py,sha256=VuuBULz2v6cz_N1fa51ayJMA5_bQkqZmxaCumDsTGRM,931
89
- strawberry/experimental/pydantic/error_type.py,sha256=iSDNlbsRYZyU5zrg3mzU3ntREUPnU1f2waGmY_kiXLU,4370
89
+ strawberry/experimental/pydantic/error_type.py,sha256=s8v0weIVM-9c0e3zqySaaa3pGZan7RvKTGuTtXLGPmE,4366
90
90
  strawberry/experimental/pydantic/exceptions.py,sha256=Q8Deq3bNkMgc8fwvIYdcfxHSONXVMu-ZB6jcsh1NQYo,1498
91
91
  strawberry/experimental/pydantic/fields.py,sha256=QP5vYb8vKf7vOC69cjUPGOdlO_j4kZRdxalWgeqJ5Hk,2588
92
- strawberry/experimental/pydantic/object_type.py,sha256=icfpKBN4_YrY-243n7XOisI5semFrWuFicmeLAfpU48,12376
92
+ strawberry/experimental/pydantic/object_type.py,sha256=gZ_-SJoH4ZG6CIVa2BBInzW9TIXeTw_0-q74a-x1EuI,12372
93
93
  strawberry/experimental/pydantic/utils.py,sha256=9m_oKyz0K1rTmh1ZrYtbFfyUNsiV11RiEb7bLrZuOXs,3770
94
94
  strawberry/ext/LICENSE,sha256=_oY0TZg0b_sW0--0T44aMTpy2e2zF1Kiyn8E1qDiivo,1249
95
95
  strawberry/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -113,7 +113,7 @@ strawberry/extensions/query_depth_limiter.py,sha256=lm9KTQOCTTGzXvMWyafROhQ3MhZX
113
113
  strawberry/extensions/runner.py,sha256=HNi0haRUbd_eGlDG-zByR5KmOylDQPCqMUsLZnzLzWo,2696
114
114
  strawberry/extensions/tracing/__init__.py,sha256=wx8_EAroGhNrP4HiGYMgKo8jnCsfde5ib6lO4OvcLV0,1400
115
115
  strawberry/extensions/tracing/apollo.py,sha256=ZdxxFEQi1lCpCWfCETOfcK_-Ivw-jUSg-rIKOYlm_i4,5811
116
- strawberry/extensions/tracing/datadog.py,sha256=gFXSzavF8ahUpnLj4t2ulJDy4I_Y-1FMhCaX5P6ZL7I,5448
116
+ strawberry/extensions/tracing/datadog.py,sha256=McoCKGUEmLc3oCS2dXd9hdVVVtydRL0odNTOGY0r3Kg,5302
117
117
  strawberry/extensions/tracing/opentelemetry.py,sha256=vuC8IKevMP_Vt0Q-tcHM3UkWasU4S0NhgsAHCNr3j3s,7212
118
118
  strawberry/extensions/tracing/sentry.py,sha256=XxXtJ6sPVbc2ucZo_p1HroTOn2N9Dl_uUfZNAWut_XM,4954
119
119
  strawberry/extensions/tracing/utils.py,sha256=O3-XJ25TqJJ9X1wHi0-0iX4U_3uv2YiB6TJfxGqtnek,618
@@ -133,7 +133,7 @@ strawberry/federation/mutation.py,sha256=0lV5HJwgw4HYR_59pwxWqnPs342HwakTNMc98w5
133
133
  strawberry/federation/object_type.py,sha256=0ZzOavBSh8ZPORd70RmsfMYo2cVg6gfZPwaIziDO58o,9005
134
134
  strawberry/federation/scalar.py,sha256=_dwlQyiDGQQF-Qz-ACSOT-LikxjXgIVz9i0HWlUjTSc,3799
135
135
  strawberry/federation/schema.py,sha256=9g7jp6eUTTP3atW81dLMtaqeY0tQB4YGdR8beKZ-JX8,13715
136
- strawberry/federation/schema_directive.py,sha256=V_8ytK_cbVoVRhFle0o9DTQkrP1k-xwCBTaideJOYag,1723
136
+ strawberry/federation/schema_directive.py,sha256=TpqoVeN3-iE-acndIRAVyU4LIXh6FTHz-Pv2kI8zGu0,1719
137
137
  strawberry/federation/schema_directives.py,sha256=Awb-BqICDptYtDNRF3BUNnbNcrsSTDN8AWAwKxVZ3UQ,6139
138
138
  strawberry/federation/types.py,sha256=mM70g1aLgjplOc3SdtuJjy7NAKFLv35Z4BDC4s_j5us,301
139
139
  strawberry/federation/union.py,sha256=QXeh-nhApqFtXa3To9MX_IwvtwErZBhWYnssUK7JB2E,1005
@@ -160,7 +160,7 @@ strawberry/litestar/controller.py,sha256=BCntaDTmQNoBRHINi8TztuF7G4-FiED-KxEPTZ6
160
160
  strawberry/litestar/handlers/graphql_transport_ws_handler.py,sha256=q_erlgzPsxarohRQXGp1yK0mjKyS8vsWntMYEmrQx4s,2008
161
161
  strawberry/litestar/handlers/graphql_ws_handler.py,sha256=vVpjd5rJOldF8aQWEGjmmNd60WE1p6q6hFmB_DtCzDU,2250
162
162
  strawberry/mutation.py,sha256=NROPvHJU1BBxZB7Wj4Okxw4hDIYM59MCpukAGEmSNYA,255
163
- strawberry/object_type.py,sha256=iQL2NqO7I28bS0moWgxPmCDc0w1HewPcXq8Xyh-xAWI,12539
163
+ strawberry/object_type.py,sha256=oClGE0Dd10cOla6WHdUYaUdJk5koZrIikgHb8o8QFA4,11374
164
164
  strawberry/parent.py,sha256=rmedKjN4zdg4KTnNV8DENrzgNYVL67rXpHjHoBofMS4,825
165
165
  strawberry/permission.py,sha256=dcKx4Zlg4ZhcxEDBOSWzz0CUN4WPkcc_kJUVuvLLs6w,5925
166
166
  strawberry/printer/__init__.py,sha256=DmepjmgtkdF5RxK_7yC6qUyRWn56U-9qeZMbkztYB9w,62
@@ -173,14 +173,14 @@ strawberry/quart/views.py,sha256=SDUaDX7bPKsv8PziMPb0C3nH6vre-Q3bhzSQp4uPjbY,340
173
173
  strawberry/relay/__init__.py,sha256=Vi4btvA_g6Cj9Tk_F9GCSegapIf2WqkOWV8y3P0cTCs,553
174
174
  strawberry/relay/exceptions.py,sha256=b7sU2MhHVWJOfq27lvqdFcqBZ5P_JWk41JWRjtP-AOI,3916
175
175
  strawberry/relay/fields.py,sha256=0A96V4mQzFJwP9g68tM3zKmbPxnfU2Ix6kbMI-x11LQ,15550
176
- strawberry/relay/types.py,sha256=pCFD0UXXofmdTS2wBURjg8KwIfdioMt2j4qNYfk6GqQ,30710
177
- strawberry/relay/utils.py,sha256=STuJ2j-sTPa70O9juJX21nbhK6yhnHdwiAOWBYKOVdo,3160
176
+ strawberry/relay/types.py,sha256=tazLGFC92vVbsoMTFTqOX4QCrgrxSgsDotgkhjFpl7w,30331
177
+ strawberry/relay/utils.py,sha256=l-fZHydLEKovwP98UwZz2ZALzMSxIjvn-yi7O8P5rJI,1697
178
178
  strawberry/resolvers.py,sha256=g7_g3jmXszziGydY1UG6IItf9s6B1lGLUCnwW1kb8U0,224
179
179
  strawberry/sanic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
180
180
  strawberry/sanic/context.py,sha256=qfoj8QMaAiWbCQFAdm2KPPJGNc7ilXeKAl5z0XJ2nzo,805
181
181
  strawberry/sanic/utils.py,sha256=eDiJPJYpELj4hFsx8CCAHomqe7dDEpStDPm6OfkstJ0,998
182
182
  strawberry/sanic/views.py,sha256=CyhR9RCS4atekEorOH6wAOqfJgmi-h-hAfHA1rq8sA8,5584
183
- strawberry/scalars.py,sha256=usENRKCwl60KstV9sBGYhk2dqW5zw2wGX5eTpOWQiqg,2106
183
+ strawberry/scalars.py,sha256=CSxTGSvpFyT9H83NxZeiBerl_WPGe43TlSxcrn60960,2076
184
184
  strawberry/schema/__init__.py,sha256=u1QCyDVQExUVDA20kyosKPz3TS5HMCN2NrXclhiFAL4,92
185
185
  strawberry/schema/base.py,sha256=lQBJyzG2ZhKc544oLbXEbpYOPOjaXBop3lxp68h_lfI,2976
186
186
  strawberry/schema/compat.py,sha256=n0r3UPUcGemMqK8vklgtCkkuCA1p6tWAYbc6Vl4iNOw,1684
@@ -189,15 +189,15 @@ strawberry/schema/exceptions.py,sha256=T-DsvBtjx9svkegIm1YrVPGPswpVEpMTFc0_7flLE
189
189
  strawberry/schema/execute.py,sha256=6OE7_5v4G3t_wxp1_mfwu8TTiIkTJNBQaeGCVAljUYw,10982
190
190
  strawberry/schema/name_converter.py,sha256=UdNyd-QtqF2HsDCQK-nsOcLGxDTj4hJwYFNvMtZnpq4,6533
191
191
  strawberry/schema/schema.py,sha256=MOC8k6NHolFGrCyqrungv0ciCImLdXTlbmo7y7rLRas,13734
192
- strawberry/schema/schema_converter.py,sha256=8uLOK8C7g9V7Zn8UpDlOMdFtVryK5bXPyLtzNtTZKxA,34777
192
+ strawberry/schema/schema_converter.py,sha256=cZmcNPqjwpMC9Q9mUZU7wydfu_dmpkcvAfz7GKbK4CY,35714
193
193
  strawberry/schema/types/__init__.py,sha256=oHO3COWhL3L1KLYCJNY1XFf5xt2GGtHiMC-UaYbFfnA,68
194
194
  strawberry/schema/types/base_scalars.py,sha256=Z_BmgwLicNexLipGyw6MmZ7OBnkGJU3ySgaY9SwBWrw,1837
195
195
  strawberry/schema/types/concrete_type.py,sha256=HB30G1hMUuuvjAvfSe6ADS35iI_T_wKO-EprVOWTMSs,746
196
196
  strawberry/schema/types/scalar.py,sha256=SVJ8HiKncCvOw2xwABI5xYaHcC7KkGHG-tx2WDtSoCA,2802
197
197
  strawberry/schema_codegen/__init__.py,sha256=PcCVXjS0Y5Buxadm07YAZOVunkQ_DmmwsBrgsH1T4ds,24375
198
- strawberry/schema_directive.py,sha256=XGKwcsxRpHXJQ_qXXMi1gEXlZOG22SbDf4Phxf4tbQ0,1967
198
+ strawberry/schema_directive.py,sha256=GxiOedFB-RJAflpQNUZv00C5Z6gavR-AYdsvoCA_0jc,1963
199
199
  strawberry/starlite/__init__.py,sha256=v209swT8H9MljVL-npvANhEO1zz3__PSfxb_Ix-NoeE,134
200
- strawberry/starlite/controller.py,sha256=moo2HlaJT6w9AijwjHvXi4UibUydaZfA75JMFZVMJPw,12191
200
+ strawberry/starlite/controller.py,sha256=QTlvDuCCOwZSbqq5MrGikrI9JXsBHmVuDuP2_lgQk5Y,11918
201
201
  strawberry/starlite/handlers/graphql_transport_ws_handler.py,sha256=WhfFVWdjRSk4A48MaBLGWqZdi2OnHajxdQlA_Gc4XBE,1981
202
202
  strawberry/starlite/handlers/graphql_ws_handler.py,sha256=v1RxhvahVazKUg-KXosAcZfv5ap1rEp1A3726d5LkiU,2223
203
203
  strawberry/static/apollo-sandbox.html,sha256=2XzkbE0dqsFHqehE-jul9_J9TFOpwA6Ylrlo0Kdx_9w,973
@@ -224,9 +224,9 @@ strawberry/types/fields/resolver.py,sha256=F_E8bmvYM-3hjkTMMtI1a0qs8raMOpYidh27u
224
224
  strawberry/types/graphql.py,sha256=3SWZEsa0Zy1eVW6vy75BnB7t9_lJVi6TBV3_1j3RNBs,687
225
225
  strawberry/types/info.py,sha256=b1ZWW_wUop6XrGNcGHKBQeUYjlX-y8u3s2Wm_XhKPYI,3412
226
226
  strawberry/types/nodes.py,sha256=5tTYmxGpVDshbydicHTTBWEiUe8A7p7mdiaSV8Ry80Y,5027
227
- strawberry/types/type_resolver.py,sha256=wuAYCbEjdov0IrnTvkFMNtSwb3lruQsbYI11x35ADeU,6542
228
- strawberry/types/types.py,sha256=hzfixwwwk6du1dWxjc90YytMVn8Ejzj90Pg2vSW8cqY,7139
229
- strawberry/union.py,sha256=IyC1emthtgoEGDOrEOpicC7QyQ0sUexXMx4BT6tFIF8,9951
227
+ strawberry/types/type_resolver.py,sha256=F0z_geS4VEun8EhD571LaTgI8ypjCeLfp910gF0Q3MY,6280
228
+ strawberry/types/types.py,sha256=X6XwzDoboQkJjCfzi85Lw-pjTRzEYWi-uAUR8yDkstA,7947
229
+ strawberry/union.py,sha256=bQ3QBOLLugGvN434vHTZRuelgJdblfy8aJMrUpLgG_g,9585
230
230
  strawberry/unset.py,sha256=4zYRN8vUD7lHQLLpulBFqEPfyvzpx8fl7ZDBUyfMqqk,1112
231
231
  strawberry/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
232
232
  strawberry/utils/aio.py,sha256=nRu0VYg9RLpkY90t6UfUlCJhIS1qpmqLdQHlwTOK89g,1608
@@ -241,8 +241,8 @@ strawberry/utils/logging.py,sha256=flS7hV0JiIOEdXcrIjda4WyIWix86cpHHFNJL8gl1y4,7
241
241
  strawberry/utils/operation.py,sha256=Um-tBCPl3_bVFN2Ph7o1mnrxfxBes4HFCj6T0x4kZxE,1135
242
242
  strawberry/utils/str_converters.py,sha256=avIgPVLg98vZH9mA2lhzVdyyjqzLsK2NdBw9mJQ02Xk,813
243
243
  strawberry/utils/typing.py,sha256=SQVOw1nuFZk2Pe3iz0o8ebzpoyvBVoGSQZVZj6-8k7I,13483
244
- strawberry_graphql-0.228.0.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
245
- strawberry_graphql-0.228.0.dist-info/METADATA,sha256=U-Gu5DUkkLA2tapjewc98ESfX0ldUuztC0csHrp5Jfc,7821
246
- strawberry_graphql-0.228.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
247
- strawberry_graphql-0.228.0.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
248
- strawberry_graphql-0.228.0.dist-info/RECORD,,
244
+ strawberry_graphql-0.228.0.dev1713643365.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
245
+ strawberry_graphql-0.228.0.dev1713643365.dist-info/METADATA,sha256=N18Z9s1fBEG9Vk4YJrTS7mGcNS-zLeWSemzyVvQcs-w,7835
246
+ strawberry_graphql-0.228.0.dev1713643365.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
247
+ strawberry_graphql-0.228.0.dev1713643365.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
248
+ strawberry_graphql-0.228.0.dev1713643365.dist-info/RECORD,,