strawberry-graphql 0.234.3__py3-none-any.whl → 0.235.1__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/annotation.py CHANGED
@@ -54,7 +54,7 @@ ASYNC_TYPES = (
54
54
 
55
55
 
56
56
  class StrawberryAnnotation:
57
- __slots__ = "raw_annotation", "namespace", "__eval_cache__"
57
+ __slots__ = "raw_annotation", "namespace", "__resolve_cache__"
58
58
 
59
59
  def __init__(
60
60
  self,
@@ -65,7 +65,7 @@ class StrawberryAnnotation:
65
65
  self.raw_annotation = annotation
66
66
  self.namespace = namespace
67
67
 
68
- self.__eval_cache__: Optional[Type[Any]] = None
68
+ self.__resolve_cache__: Optional[Union[StrawberryType, type]] = None
69
69
 
70
70
  def __eq__(self, other: object) -> bool:
71
71
  if not isinstance(other, StrawberryAnnotation):
@@ -101,19 +101,17 @@ class StrawberryAnnotation:
101
101
  def annotation(self, value: Union[object, str]) -> None:
102
102
  self.raw_annotation = value
103
103
 
104
+ self.__resolve_cache__ = None
105
+
104
106
  def evaluate(self) -> type:
105
107
  """Return evaluated annotation using `strawberry.util.typing.eval_type`."""
106
- evaled_type = self.__eval_cache__
107
- if evaled_type:
108
- return evaled_type
109
-
110
108
  annotation = self.raw_annotation
109
+
111
110
  if isinstance(annotation, str):
112
111
  annotation = ForwardRef(annotation)
113
112
 
114
113
  evaled_type = eval_type(annotation, self.namespace, None)
115
114
 
116
- self.__eval_cache__ = evaled_type
117
115
  return evaled_type
118
116
 
119
117
  def _get_type_with_args(
@@ -131,6 +129,12 @@ class StrawberryAnnotation:
131
129
 
132
130
  def resolve(self) -> Union[StrawberryType, type]:
133
131
  """Return resolved (transformed) annotation."""
132
+ if self.__resolve_cache__ is None:
133
+ self.__resolve_cache__ = self._resolve()
134
+
135
+ return self.__resolve_cache__
136
+
137
+ def _resolve(self) -> Union[StrawberryType, type]:
134
138
  evaled_type = cast(Any, self.evaluate())
135
139
 
136
140
  if is_private(evaled_type):
@@ -172,7 +176,7 @@ class StrawberryAnnotation:
172
176
  module = sys.modules[field.origin.__module__]
173
177
  self.namespace = module.__dict__
174
178
 
175
- self.__eval_cache__ = None # Invalidate cache to allow re-evaluation
179
+ self.__resolve_cache__ = None # Invalidate cache to allow re-evaluation
176
180
 
177
181
  def create_concrete_type(self, evaled_type: type) -> type:
178
182
  if has_object_definition(evaled_type):
strawberry/arguments.py CHANGED
@@ -129,7 +129,6 @@ class StrawberryArgument:
129
129
 
130
130
  @property
131
131
  def is_graphql_generic(self) -> bool:
132
- # TODO: double check this
133
132
  from strawberry.schema.compat import is_graphql_generic
134
133
 
135
134
  return is_graphql_generic(self.type)
strawberry/schema/base.py CHANGED
@@ -87,6 +87,25 @@ class BaseSchema(Protocol):
87
87
  def as_str(self) -> str:
88
88
  raise NotImplementedError
89
89
 
90
+ @staticmethod
91
+ def remove_field_suggestion(error: GraphQLError) -> None:
92
+ if (
93
+ error.message.startswith("Cannot query field")
94
+ and "Did you mean" in error.message
95
+ ):
96
+ error.message = error.message.split("Did you mean")[0].strip()
97
+
98
+ def _process_errors(
99
+ self,
100
+ errors: List[GraphQLError],
101
+ execution_context: Optional[ExecutionContext] = None,
102
+ ) -> None:
103
+ if self.config.disable_field_suggestions:
104
+ for error in errors:
105
+ self.remove_field_suggestion(error)
106
+
107
+ self.process_errors(errors, execution_context)
108
+
90
109
  def process_errors(
91
110
  self,
92
111
  errors: List[GraphQLError],
@@ -12,6 +12,7 @@ class StrawberryConfig:
12
12
  name_converter: NameConverter = field(default_factory=NameConverter)
13
13
  default_resolver: Callable[[Any, str], object] = getattr
14
14
  relay_max_results: int = 100
15
+ disable_field_suggestions: bool = False
15
16
 
16
17
  def __post_init__(
17
18
  self,
@@ -269,7 +269,7 @@ class Schema(BaseSchema):
269
269
  execution_context_class=self.execution_context_class,
270
270
  execution_context=execution_context,
271
271
  allowed_operation_types=allowed_operation_types,
272
- process_errors=self.process_errors,
272
+ process_errors=self._process_errors,
273
273
  )
274
274
 
275
275
  return result
@@ -301,7 +301,7 @@ class Schema(BaseSchema):
301
301
  execution_context_class=self.execution_context_class,
302
302
  execution_context=execution_context,
303
303
  allowed_operation_types=allowed_operation_types,
304
- process_errors=self.process_errors,
304
+ process_errors=self._process_errors,
305
305
  )
306
306
 
307
307
  return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.234.3
3
+ Version: 0.235.1
4
4
  Summary: A library for creating GraphQL APIs
5
5
  Home-page: https://strawberry.rocks/
6
6
  License: MIT
@@ -7,8 +7,8 @@ strawberry/aiohttp/handlers/graphql_ws_handler.py,sha256=Zi1y_XLsZwqX52vvy0Se3S0
7
7
  strawberry/aiohttp/test/__init__.py,sha256=4xxdUZtIISSOwjrcnmox7AvT4WWjowCm5bUuPdQneMg,71
8
8
  strawberry/aiohttp/test/client.py,sha256=tlpHymSWqhiQbLmKwodcaX2vdc8BW1IaNTFTHlWKlOY,1323
9
9
  strawberry/aiohttp/views.py,sha256=l5Gb_9twQo1TQuWk7v0dGFry0yM1ivnGztUtwQ_N5-c,6063
10
- strawberry/annotation.py,sha256=YYWKjDUxgwFLuTtHYjrCZTub0R4knUngidDauXovDg8,12887
11
- strawberry/arguments.py,sha256=bIfpFN2kcs4cjmeI8UPV1Xxzm5bb4jmbggejOyouulw,8440
10
+ strawberry/annotation.py,sha256=JiQTFbDLaq8gWhUjdTlKiiE5K1jUuIobizEV8DCLxL0,13005
11
+ strawberry/arguments.py,sha256=yFbL1o9vFemrJSVGadt80wN_ajU1khw2--S0nDjrx78,8406
12
12
  strawberry/asgi/__init__.py,sha256=9s_6505Aa68y_qAgzQV3yXE0IrGVZbuhQ7rIUNPXOlE,6985
13
13
  strawberry/asgi/handlers/__init__.py,sha256=rz5Gth2eJUn7tDq2--99KSNFeMdDPpLFCkfA7vge0cI,235
14
14
  strawberry/asgi/handlers/graphql_transport_ws_handler.py,sha256=obBZ1bQ1R9eZL1_Xcr5eKQObjSPB0FFLtMFj9EAmFc0,2105
@@ -183,13 +183,13 @@ strawberry/sanic/utils.py,sha256=eDiJPJYpELj4hFsx8CCAHomqe7dDEpStDPm6OfkstJ0,998
183
183
  strawberry/sanic/views.py,sha256=CyhR9RCS4atekEorOH6wAOqfJgmi-h-hAfHA1rq8sA8,5584
184
184
  strawberry/scalars.py,sha256=usENRKCwl60KstV9sBGYhk2dqW5zw2wGX5eTpOWQiqg,2106
185
185
  strawberry/schema/__init__.py,sha256=u1QCyDVQExUVDA20kyosKPz3TS5HMCN2NrXclhiFAL4,92
186
- strawberry/schema/base.py,sha256=lQBJyzG2ZhKc544oLbXEbpYOPOjaXBop3lxp68h_lfI,2976
186
+ strawberry/schema/base.py,sha256=RNacxV0AdRSG2kFDitiB2G59mUjp-tFBf2mU3ZkcBbc,3607
187
187
  strawberry/schema/compat.py,sha256=n0r3UPUcGemMqK8vklgtCkkuCA1p6tWAYbc6Vl4iNOw,1684
188
- strawberry/schema/config.py,sha256=XkWwmxEsmecscH29o4qU0iSe-hgwJJ2X0DPBVlka2OE,640
188
+ strawberry/schema/config.py,sha256=X83kbrNUCocueAwkDWuwq0GZD2Spgfjo4-zqR5b_r_E,684
189
189
  strawberry/schema/exceptions.py,sha256=T-DsvBtjx9svkegIm1YrVPGPswpVEpMTFc0_7flLEkM,542
190
190
  strawberry/schema/execute.py,sha256=dwxMrJrR2Qdd1nPGcIS9-Viq7h5qtPfsD6qdujALoMw,11153
191
191
  strawberry/schema/name_converter.py,sha256=UdNyd-QtqF2HsDCQK-nsOcLGxDTj4hJwYFNvMtZnpq4,6533
192
- strawberry/schema/schema.py,sha256=aYvznvDecNbcqT0H0kLHwlnYHdwQQhiU-Jd5ean2BtU,14368
192
+ strawberry/schema/schema.py,sha256=RWR28Nu8RpFxr5vFaswnp-0sWkO6-ZZcbfJVq2mgVEQ,14370
193
193
  strawberry/schema/schema_converter.py,sha256=_kufIUo71mWCAC7QaXcW8KxKXa86vdvh75mBdjbJE7Y,36795
194
194
  strawberry/schema/types/__init__.py,sha256=oHO3COWhL3L1KLYCJNY1XFf5xt2GGtHiMC-UaYbFfnA,68
195
195
  strawberry/schema/types/base_scalars.py,sha256=NzGQmDtHdCcBeJpRpyeZQ6EgYRpQBTd8fUf1p9cMWlQ,1847
@@ -245,8 +245,8 @@ strawberry/utils/logging.py,sha256=flS7hV0JiIOEdXcrIjda4WyIWix86cpHHFNJL8gl1y4,7
245
245
  strawberry/utils/operation.py,sha256=Um-tBCPl3_bVFN2Ph7o1mnrxfxBes4HFCj6T0x4kZxE,1135
246
246
  strawberry/utils/str_converters.py,sha256=avIgPVLg98vZH9mA2lhzVdyyjqzLsK2NdBw9mJQ02Xk,813
247
247
  strawberry/utils/typing.py,sha256=G92wuT2WhEGQrwjek_On2K8l0nyVFtBW3P7I_cfjG-8,13870
248
- strawberry_graphql-0.234.3.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
249
- strawberry_graphql-0.234.3.dist-info/METADATA,sha256=PlHR6aVWRNm-JxNjj4yUJ6ItDcvzEAKgNIW4D0-kgQk,7821
250
- strawberry_graphql-0.234.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
251
- strawberry_graphql-0.234.3.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
252
- strawberry_graphql-0.234.3.dist-info/RECORD,,
248
+ strawberry_graphql-0.235.1.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
249
+ strawberry_graphql-0.235.1.dist-info/METADATA,sha256=VV9Bw1wq9Ep6V2KOZKP6mQnl-QyFtb3oSiYNFTTMFdo,7821
250
+ strawberry_graphql-0.235.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
251
+ strawberry_graphql-0.235.1.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
252
+ strawberry_graphql-0.235.1.dist-info/RECORD,,