strawberry-graphql 0.226.2__py3-none-any.whl → 0.227.0.dev1713463204__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
@@ -7,7 +7,7 @@ from .enum import enum, enum_value
7
7
  from .field import field
8
8
  from .lazy_type import LazyType, lazy
9
9
  from .mutation import mutation, subscription
10
- from .object_type import asdict, input, interface, type
10
+ from .object_type import asdict, input, interface, one_of_input, type
11
11
  from .parent import Parent
12
12
  from .permission import BasePermission
13
13
  from .private import Private
@@ -38,6 +38,7 @@ __all__ = [
38
38
  "federation",
39
39
  "field",
40
40
  "input",
41
+ "one_of_input",
41
42
  "interface",
42
43
  "mutation",
43
44
  "scalar",
@@ -11,7 +11,6 @@ from typing import (
11
11
  List,
12
12
  Optional,
13
13
  Set,
14
- Tuple,
15
14
  Union,
16
15
  cast,
17
16
  )
@@ -60,16 +59,11 @@ try:
60
59
  except ImportError:
61
60
  TypeVarDef = TypeVarType
62
61
 
63
- PYDANTIC_VERSION: Optional[Tuple[int, ...]] = None
64
-
65
62
  # To be compatible with user who don't use pydantic
66
63
  try:
67
- import pydantic
68
64
  from pydantic.mypy import METADATA_KEY as PYDANTIC_METADATA_KEY
69
65
  from pydantic.mypy import PydanticModelField
70
66
 
71
- PYDANTIC_VERSION = tuple(map(int, pydantic.__version__.split(".")))
72
-
73
67
  from strawberry.experimental.pydantic._compat import IS_PYDANTIC_V1
74
68
  except ImportError:
75
69
  PYDANTIC_METADATA_KEY = ""
@@ -470,11 +464,6 @@ def strawberry_pydantic_class_callback(ctx: ClassDefContext) -> None:
470
464
  return_type=model_type,
471
465
  )
472
466
  else:
473
- extra = {}
474
-
475
- if PYDANTIC_VERSION and PYDANTIC_VERSION >= (2, 7, 0):
476
- extra["api"] = ctx.api
477
-
478
467
  add_method(
479
468
  ctx,
480
469
  "to_pydantic",
@@ -485,7 +474,6 @@ def strawberry_pydantic_class_callback(ctx: ClassDefContext) -> None:
485
474
  typed=True,
486
475
  force_optional=False,
487
476
  use_alias=True,
488
- **extra,
489
477
  )
490
478
  for f in missing_pydantic_fields
491
479
  ],
@@ -499,23 +487,12 @@ def strawberry_pydantic_class_callback(ctx: ClassDefContext) -> None:
499
487
  initializer=None,
500
488
  kind=ARG_OPT,
501
489
  )
502
- extra_type = ctx.api.named_type(
503
- "builtins.dict",
504
- [ctx.api.named_type("builtins.str"), AnyType(TypeOfAny.explicit)],
505
- )
506
-
507
- extra_argument = Argument(
508
- variable=Var(name="extra", type=UnionType([NoneType(), extra_type])),
509
- type_annotation=UnionType([NoneType(), extra_type]),
510
- initializer=None,
511
- kind=ARG_OPT,
512
- )
513
490
 
514
491
  add_static_method_to_class(
515
492
  ctx.api,
516
493
  ctx.cls,
517
494
  name="from_pydantic",
518
- args=[model_argument, extra_argument],
495
+ args=[model_argument],
519
496
  return_type=fill_typevars(ctx.cls.info),
520
497
  )
521
498
 
strawberry/object_type.py CHANGED
@@ -264,6 +264,60 @@ def type(
264
264
  return wrap(cls)
265
265
 
266
266
 
267
+ @overload
268
+ @dataclass_transform(
269
+ order_default=True, kw_only_default=True, field_specifiers=(field, StrawberryField)
270
+ )
271
+ def one_of_input(
272
+ cls: T,
273
+ *,
274
+ name: Optional[str] = None,
275
+ description: Optional[str] = None,
276
+ directives: Optional[Sequence[object]] = (),
277
+ ) -> T:
278
+ ...
279
+
280
+
281
+ @overload
282
+ @dataclass_transform(
283
+ order_default=True, kw_only_default=True, field_specifiers=(field, StrawberryField)
284
+ )
285
+ def one_of_input(
286
+ *,
287
+ name: Optional[str] = None,
288
+ description: Optional[str] = None,
289
+ directives: Optional[Sequence[object]] = (),
290
+ ) -> Callable[[T], T]:
291
+ ...
292
+
293
+
294
+ def one_of_input(
295
+ cls: Optional[T] = None,
296
+ *,
297
+ name: Optional[str] = None,
298
+ description: Optional[str] = None,
299
+ directives: Optional[Sequence[object]] = (),
300
+ ):
301
+ """Annotates a class as a GraphQL Input type with the @oneOf directive.
302
+ Example usage:
303
+ >>> @strawberry.one_of_input
304
+ >>> class X:
305
+ >>> field_abc: str = "ABC"
306
+ """
307
+
308
+ from strawberry.schema_directives import OneOf
309
+
310
+ directives = (*(directives or tuple()), OneOf())
311
+
312
+ return type( # type: ignore # not sure why mypy complains here
313
+ cls,
314
+ name=name,
315
+ description=description,
316
+ directives=directives,
317
+ is_input=True,
318
+ )
319
+
320
+
267
321
  @overload
268
322
  @dataclass_transform(
269
323
  order_default=True, kw_only_default=True, field_specifiers=(field, StrawberryField)
@@ -23,6 +23,7 @@ from graphql.validation import validate
23
23
 
24
24
  from strawberry.exceptions import MissingQueryError
25
25
  from strawberry.extensions.runner import SchemaExtensionsRunner
26
+ from strawberry.schema.validation_rules.one_of import OneOfInputValidationRule
26
27
  from strawberry.types import ExecutionResult
27
28
 
28
29
  from .exceptions import InvalidOperationTypeError
@@ -55,6 +56,7 @@ def validate_document(
55
56
  document: DocumentNode,
56
57
  validation_rules: Tuple[Type[ASTValidationRule], ...],
57
58
  ) -> List[GraphQLError]:
59
+ validation_rules += (OneOfInputValidationRule,)
58
60
  return validate(
59
61
  schema,
60
62
  document,
@@ -16,6 +16,8 @@ from typing import (
16
16
  )
17
17
 
18
18
  from graphql import (
19
+ GraphQLBoolean,
20
+ GraphQLField,
19
21
  GraphQLNamedType,
20
22
  GraphQLNonNull,
21
23
  GraphQLSchema,
@@ -168,6 +170,7 @@ class Schema(BaseSchema):
168
170
 
169
171
  self._warn_for_federation_directives()
170
172
  self._resolve_node_ids()
173
+ self._extend_introspection()
171
174
 
172
175
  # Validate schema early because we want developers to know about
173
176
  # possible issues as soon as possible
@@ -375,6 +378,14 @@ class Schema(BaseSchema):
375
378
  stacklevel=3,
376
379
  )
377
380
 
381
+ def _extend_introspection(self):
382
+ def _resolve_is_one_of(obj: Any, info: Any) -> bool:
383
+ return obj.extensions["strawberry-definition"].is_one_of
384
+
385
+ instrospection_type = self._schema.type_map["__Type"]
386
+ instrospection_type.fields["isOneOf"] = GraphQLField(GraphQLBoolean) # type: ignore[attr-defined]
387
+ instrospection_type.fields["isOneOf"].resolve = _resolve_is_one_of # type: ignore[attr-defined]
388
+
378
389
  def as_str(self) -> str:
379
390
  return print_schema(self)
380
391
 
@@ -26,6 +26,7 @@ from graphql import (
26
26
  GraphQLDirective,
27
27
  GraphQLEnumType,
28
28
  GraphQLEnumValue,
29
+ GraphQLError,
29
30
  GraphQLField,
30
31
  GraphQLInputField,
31
32
  GraphQLInputObjectType,
@@ -410,6 +411,37 @@ class GraphQLCoreConverter:
410
411
  assert isinstance(graphql_object_type, GraphQLInputObjectType) # For mypy
411
412
  return graphql_object_type
412
413
 
414
+ def check_one_of(value: dict[str, Any]) -> dict[str, Any]:
415
+ if len(value) != 1:
416
+ raise GraphQLError(
417
+ f"OneOf Input Object '{type_name}' must specify exactly one key."
418
+ )
419
+
420
+ first_key, first_value = next(iter(value.items()))
421
+
422
+ if first_value is None or first_value is UNSET:
423
+ raise GraphQLError(
424
+ f"Value for member field '{first_key}' must be non-null"
425
+ )
426
+
427
+ # We are populating all missing keys with `None`, so users
428
+ # don't have to set an explicit default for the input type
429
+ # The alternative is to tell them to use `UNSET`, but it looks
430
+ # a bit unfriendly to use
431
+
432
+ for field in type_definition.fields:
433
+ name = self.config.name_converter.from_field(field)
434
+ if name not in value:
435
+ value[name] = None
436
+
437
+ return value
438
+
439
+ out_type = (
440
+ check_one_of
441
+ if type_definition.is_input and type_definition.is_one_of
442
+ else None
443
+ )
444
+
413
445
  graphql_object_type = GraphQLInputObjectType(
414
446
  name=type_name,
415
447
  fields=lambda: self.get_graphql_input_fields(type_definition),
@@ -417,6 +449,7 @@ class GraphQLCoreConverter:
417
449
  extensions={
418
450
  GraphQLCoreConverter.DEFINITION_BACKREF: type_definition,
419
451
  },
452
+ out_type=out_type,
420
453
  )
421
454
 
422
455
  self.type_map[type_name] = ConcreteType(
File without changes
@@ -0,0 +1,80 @@
1
+ from typing import Any
2
+
3
+ from graphql import (
4
+ ExecutableDefinitionNode,
5
+ GraphQLError,
6
+ GraphQLNamedType,
7
+ ObjectValueNode,
8
+ ValidationContext,
9
+ ValidationRule,
10
+ VariableDefinitionNode,
11
+ get_named_type,
12
+ )
13
+
14
+
15
+ class OneOfInputValidationRule(ValidationRule):
16
+ def __init__(self, validation_context: ValidationContext) -> None:
17
+ super().__init__(validation_context)
18
+
19
+ def enter_operation_definition(
20
+ self, node: ExecutableDefinitionNode, *_args: Any
21
+ ) -> None:
22
+ self.variable_definitions: dict[str, VariableDefinitionNode] = {}
23
+
24
+ def enter_variable_definition(
25
+ self, node: VariableDefinitionNode, *_args: Any
26
+ ) -> None:
27
+ self.variable_definitions[node.variable.name.value] = node
28
+
29
+ def enter_object_value(self, node: ObjectValueNode, *_args: Any) -> None:
30
+ type_ = get_named_type(self.context.get_input_type())
31
+
32
+ if not type_:
33
+ return
34
+
35
+ strawberry_type = type_.extensions.get("strawberry-definition")
36
+
37
+ if strawberry_type and strawberry_type.is_one_of:
38
+ self.validate_one_of(node, type_)
39
+
40
+ def validate_one_of(self, node: ObjectValueNode, type: GraphQLNamedType) -> None:
41
+ field_node_map = {field.name.value: field for field in node.fields}
42
+ keys = list(field_node_map.keys())
43
+ is_not_exactly_one_field = len(keys) != 1
44
+
45
+ if is_not_exactly_one_field:
46
+ self.report_error(
47
+ GraphQLError(
48
+ f"OneOf Input Object '{type.name}' must specify exactly one key.",
49
+ nodes=[node],
50
+ )
51
+ )
52
+
53
+ return
54
+
55
+ value = field_node_map[keys[0]].value
56
+ is_null_literal = not value or value.kind == "null_value"
57
+ is_variable = value.kind == "variable"
58
+
59
+ if is_null_literal:
60
+ self.report_error(
61
+ GraphQLError(
62
+ f"Field '{type.name}.{keys[0]}' must be non-null.",
63
+ nodes=[node],
64
+ )
65
+ )
66
+
67
+ return
68
+
69
+ if is_variable:
70
+ variable_name = value.name.value # type: ignore
71
+ definition = self.variable_definitions[variable_name]
72
+ is_nullable_variable = definition.type.kind != "non_null_type"
73
+
74
+ if is_nullable_variable:
75
+ self.report_error(
76
+ GraphQLError(
77
+ f"Variable '{variable_name}' must be non-nullable to be used for OneOf Input Object '{type.name}'.",
78
+ nodes=[node],
79
+ )
80
+ )
@@ -0,0 +1,9 @@
1
+ from strawberry.schema_directive import Location, schema_directive
2
+
3
+
4
+ @schema_directive(locations=[Location.INPUT_OBJECT], name="oneOf")
5
+ class OneOf:
6
+ ...
7
+
8
+
9
+ __all__ = ["OneOf"]
strawberry/type.py CHANGED
@@ -37,6 +37,10 @@ class StrawberryType(ABC):
37
37
  def type_params(self) -> List[TypeVar]:
38
38
  return []
39
39
 
40
+ @property
41
+ def is_one_of(self) -> bool:
42
+ return False
43
+
40
44
  @abstractmethod
41
45
  def copy_with(
42
46
  self,
strawberry/types/types.py CHANGED
@@ -197,6 +197,17 @@ class StrawberryObjectDefinition(StrawberryType):
197
197
  # All field mappings succeeded. This is a match
198
198
  return True
199
199
 
200
+ @property
201
+ def is_one_of(self) -> bool:
202
+ from strawberry.schema_directives import OneOf
203
+
204
+ if not self.is_input or not self.directives:
205
+ return False
206
+
207
+ return any(
208
+ directive for directive in self.directives if isinstance(directive, OneOf)
209
+ )
210
+
200
211
 
201
212
  # TODO: remove when deprecating _type_definition
202
213
  if TYPE_CHECKING:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.226.2
3
+ Version: 0.227.0.dev1713463204
4
4
  Summary: A library for creating GraphQL APIs
5
5
  Home-page: https://strawberry.rocks/
6
6
  License: MIT
@@ -1,4 +1,4 @@
1
- strawberry/__init__.py,sha256=NP_R8Benm6W-v3Qqj3MSPm_CMickSCJIMaW2sZZ5oGs,1104
1
+ strawberry/__init__.py,sha256=O2Izq7j-7oMXp3U87Qvmadx2pVBrAf0BDbNV4Vtrh-o,1138
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/handlers/__init__.py,sha256=7EeGIIwrgJYHAS9XJnZLfRGL_GHrligKm39rrVt7qDA,241
@@ -96,7 +96,7 @@ strawberry/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
96
96
  strawberry/ext/dataclasses/LICENSE,sha256=WZgm35K_3NJwLqxpEHJJi7CWxVrwTumEz5D3Dtd7WnA,13925
97
97
  strawberry/ext/dataclasses/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
98
98
  strawberry/ext/dataclasses/dataclasses.py,sha256=Le32f96qmahuenVsMW5xjIr-EPnO7WKljbOPLpU800Q,2254
99
- strawberry/ext/mypy_plugin.py,sha256=iqqRtJk3YRt1-rxDDl7aa9QtxZ0QYcu9-o6OWaczkqo,19716
99
+ strawberry/ext/mypy_plugin.py,sha256=AGWu3xTguWMetqQP7bnaLRJBdLplPOtZ_eRGYt0Gfg8,18956
100
100
  strawberry/extensions/__init__.py,sha256=SZ-YEMnxAzoDZFo-uHXMHOaY_PPkYm1muPpK4ccJ3Xk,1248
101
101
  strawberry/extensions/add_validation_rules.py,sha256=l1cCl6VGQ8c2EELK3cIjmn6RftonHD1jKoWQ5-hMTf0,1366
102
102
  strawberry/extensions/base_extension.py,sha256=XvYKIsSaxfTCVWdphOFll-Fo0wJd5Ib4QdKuYule6S0,2000
@@ -160,7 +160,7 @@ strawberry/litestar/controller.py,sha256=CPVnXA36O3OQb9NnHdD3ycox21rarjrS-I2HiOO
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=PLCGcSkibQVU3Kb47OnysAKHWbzBTPgeIiKmiwmkUa4,11398
163
+ strawberry/object_type.py,sha256=BVrl_d7Y2hUPf7I6kjMggv4eavZkk30SaFyxShHRSnk,12662
164
164
  strawberry/parent.py,sha256=mCnJcLBQKwtokXcGxkm5HqGg7Wkst97rn61ViuaotrM,829
165
165
  strawberry/permission.py,sha256=dcKx4Zlg4ZhcxEDBOSWzz0CUN4WPkcc_kJUVuvLLs6w,5925
166
166
  strawberry/printer/__init__.py,sha256=DmepjmgtkdF5RxK_7yC6qUyRWn56U-9qeZMbkztYB9w,62
@@ -186,16 +186,19 @@ strawberry/schema/base.py,sha256=lQBJyzG2ZhKc544oLbXEbpYOPOjaXBop3lxp68h_lfI,297
186
186
  strawberry/schema/compat.py,sha256=n0r3UPUcGemMqK8vklgtCkkuCA1p6tWAYbc6Vl4iNOw,1684
187
187
  strawberry/schema/config.py,sha256=XkWwmxEsmecscH29o4qU0iSe-hgwJJ2X0DPBVlka2OE,640
188
188
  strawberry/schema/exceptions.py,sha256=T-DsvBtjx9svkegIm1YrVPGPswpVEpMTFc0_7flLEkM,542
189
- strawberry/schema/execute.py,sha256=6OE7_5v4G3t_wxp1_mfwu8TTiIkTJNBQaeGCVAljUYw,10982
189
+ strawberry/schema/execute.py,sha256=nmbcOeUih6mKgxLT6w6psjmwKSEw6FbIlJUply5tKyM,11113
190
190
  strawberry/schema/name_converter.py,sha256=UdNyd-QtqF2HsDCQK-nsOcLGxDTj4hJwYFNvMtZnpq4,6533
191
- strawberry/schema/schema.py,sha256=MOC8k6NHolFGrCyqrungv0ciCImLdXTlbmo7y7rLRas,13734
192
- strawberry/schema/schema_converter.py,sha256=DT6HWJeTdaFuEoVzlVGeEIXeg_vdaiJ4YGSakXaRTlQ,34785
191
+ strawberry/schema/schema.py,sha256=bfQdLmFXR_BQd80IGO8qa0431cQMUDr22XLNnBL7Tu0,14252
192
+ strawberry/schema/schema_converter.py,sha256=_DfYbWLhbtjBR-w596O5xUwTd3OvHS0P7e5G52JaKXI,35956
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
+ strawberry/schema/validation_rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
+ strawberry/schema/validation_rules/one_of.py,sha256=hO0Re1fQQWT9zIqo_7BHLM2bdSsmNJDbKia8AUTSXQQ,2588
197
199
  strawberry/schema_codegen/__init__.py,sha256=eHHr59CLzIlqb9b5h4PLK6RNPPvUHIJCQ0sAJa2l4aw,24059
198
200
  strawberry/schema_directive.py,sha256=GxiOedFB-RJAflpQNUZv00C5Z6gavR-AYdsvoCA_0jc,1963
201
+ strawberry/schema_directives.py,sha256=ZcaTeFfxBp5RsmVu2NDPP_hOL2WpPomQIQSmNp9BO3s,179
199
202
  strawberry/starlite/__init__.py,sha256=v209swT8H9MljVL-npvANhEO1zz3__PSfxb_Ix-NoeE,134
200
203
  strawberry/starlite/controller.py,sha256=oyGkcdhIKvY5BCxVqPhS-pn7Ae8SZKXnI5W5fk4p0zw,11916
201
204
  strawberry/starlite/handlers/graphql_transport_ws_handler.py,sha256=WhfFVWdjRSk4A48MaBLGWqZdi2OnHajxdQlA_Gc4XBE,1981
@@ -216,7 +219,7 @@ strawberry/test/client.py,sha256=N_AkxLp-kWVTgQDcL8FkruJpAd6NpkChIDptzneu_uM,575
216
219
  strawberry/tools/__init__.py,sha256=pdGpZx8wpq03VfUZJyF9JtYxZhGqzzxCiipsalWxJX4,127
217
220
  strawberry/tools/create_type.py,sha256=QxLRT9-DrSgo6vsu_L818wtlbO3wRtI0dOos0gmn1xk,1593
218
221
  strawberry/tools/merge_types.py,sha256=YZ2GSMoDD82bfuvCT0COpN6SLFVRZpTXFFm9LHUyi10,1014
219
- strawberry/type.py,sha256=10Pv74x4Yn2woztdlKe0YLnm46FfHN9c2v7Hq2cRlAA,6534
222
+ strawberry/type.py,sha256=jQh75TjgaKx1mP-AF6VjWacDAqbHABQuW06vrnsArnM,6603
220
223
  strawberry/types/__init__.py,sha256=APb1Cjy6bxqFxIfDfempP6eb9NE3LYDwQ3gX7r07lXI,139
221
224
  strawberry/types/execution.py,sha256=Dz4Y_M1ysKz3UxnBK_-h103DjvP6NwLElXXOEpQCkgw,2783
222
225
  strawberry/types/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -225,7 +228,7 @@ strawberry/types/graphql.py,sha256=3SWZEsa0Zy1eVW6vy75BnB7t9_lJVi6TBV3_1j3RNBs,6
225
228
  strawberry/types/info.py,sha256=b1ZWW_wUop6XrGNcGHKBQeUYjlX-y8u3s2Wm_XhKPYI,3412
226
229
  strawberry/types/nodes.py,sha256=5tTYmxGpVDshbydicHTTBWEiUe8A7p7mdiaSV8Ry80Y,5027
227
230
  strawberry/types/type_resolver.py,sha256=F0z_geS4VEun8EhD571LaTgI8ypjCeLfp910gF0Q3MY,6280
228
- strawberry/types/types.py,sha256=3zKJLPv4KW-BL4WspK-ik4acnLMR0bCPLoy1QHSSAvA,7147
231
+ strawberry/types/types.py,sha256=2iUj5ohnpXYTIEvwk1i-4LVasO0IuLv9GUJgd_jp7GM,7447
229
232
  strawberry/union.py,sha256=IyC1emthtgoEGDOrEOpicC7QyQ0sUexXMx4BT6tFIF8,9951
230
233
  strawberry/unset.py,sha256=4zYRN8vUD7lHQLLpulBFqEPfyvzpx8fl7ZDBUyfMqqk,1112
231
234
  strawberry/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -241,8 +244,8 @@ strawberry/utils/logging.py,sha256=flS7hV0JiIOEdXcrIjda4WyIWix86cpHHFNJL8gl1y4,7
241
244
  strawberry/utils/operation.py,sha256=Um-tBCPl3_bVFN2Ph7o1mnrxfxBes4HFCj6T0x4kZxE,1135
242
245
  strawberry/utils/str_converters.py,sha256=avIgPVLg98vZH9mA2lhzVdyyjqzLsK2NdBw9mJQ02Xk,813
243
246
  strawberry/utils/typing.py,sha256=Qxz1LwyVsNGV7LQW1dFsaUbsswj5LHBOdKLMom5eyEA,13491
244
- strawberry_graphql-0.226.2.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
245
- strawberry_graphql-0.226.2.dist-info/METADATA,sha256=j56ccpQGKWttSAIkUjsog3QlUzi3Tceumtonk8f3AWs,7740
246
- strawberry_graphql-0.226.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
247
- strawberry_graphql-0.226.2.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
248
- strawberry_graphql-0.226.2.dist-info/RECORD,,
247
+ strawberry_graphql-0.227.0.dev1713463204.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
248
+ strawberry_graphql-0.227.0.dev1713463204.dist-info/METADATA,sha256=euUQigHSQGfU2Zh4INE4XJReh9Q_2EH5Iw8_B4rlmOo,7754
249
+ strawberry_graphql-0.227.0.dev1713463204.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
250
+ strawberry_graphql-0.227.0.dev1713463204.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
251
+ strawberry_graphql-0.227.0.dev1713463204.dist-info/RECORD,,