strawberry-graphql 0.168.2__py3-none-any.whl → 0.170.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.
@@ -2,15 +2,13 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import json
6
5
  from dataclasses import dataclass
7
6
  from datetime import timedelta
8
- from typing import TYPE_CHECKING, Any, Dict, Optional, Union, cast
7
+ from typing import TYPE_CHECKING, Any, Dict, Mapping, Optional, Tuple, Union, cast
9
8
 
10
9
  from starlite import (
11
10
  BackgroundTasks,
12
11
  Controller,
13
- HttpMethod,
14
12
  MediaType,
15
13
  Provide,
16
14
  Request,
@@ -22,29 +20,21 @@ from starlite import (
22
20
  )
23
21
  from starlite.exceptions import (
24
22
  NotFoundException,
25
- SerializationException,
26
23
  ValidationException,
27
24
  )
28
- from starlite.status_codes import (
29
- HTTP_200_OK,
30
- HTTP_400_BAD_REQUEST,
31
- HTTP_415_UNSUPPORTED_MEDIA_TYPE,
25
+ from starlite.status_codes import HTTP_200_OK
26
+ from strawberry.exceptions import InvalidCustomContext
27
+ from strawberry.http.async_base_view import AsyncBaseHTTPView, AsyncHTTPRequestAdapter
28
+ from strawberry.http.exceptions import HTTPException
29
+ from strawberry.http.types import FormData, HTTPMethod, QueryParams
30
+ from strawberry.http.typevars import (
31
+ Context,
32
+ RootValue,
32
33
  )
33
- from strawberry.exceptions import InvalidCustomContext, MissingQueryError
34
- from strawberry.file_uploads.utils import replace_placeholders_with_files
35
- from strawberry.http import (
36
- GraphQLHTTPResponse,
37
- parse_query_params,
38
- parse_request_data,
39
- process_result,
40
- )
41
- from strawberry.schema.exceptions import InvalidOperationTypeError
42
34
  from strawberry.subscriptions import GRAPHQL_TRANSPORT_WS_PROTOCOL, GRAPHQL_WS_PROTOCOL
43
35
  from strawberry.subscriptions.protocols.graphql_transport_ws import (
44
36
  WS_4406_PROTOCOL_NOT_ACCEPTABLE,
45
37
  )
46
- from strawberry.types.graphql import OperationType
47
- from strawberry.utils.debug import pretty_print_graphql_operation
48
38
  from strawberry.utils.graphiql import get_graphiql_html
49
39
 
50
40
  from .handlers.graphql_transport_ws_handler import (
@@ -53,19 +43,19 @@ from .handlers.graphql_transport_ws_handler import (
53
43
  from .handlers.graphql_ws_handler import GraphQLWSHandler as BaseGraphQLWSHandler
54
44
 
55
45
  if TYPE_CHECKING:
56
- from typing import FrozenSet, Iterable, List, Set, Tuple, Type
46
+ from typing import FrozenSet, List, Type
57
47
 
58
48
  from starlite.types import AnyCallable, Dependencies
49
+ from strawberry.http import GraphQLHTTPResponse
59
50
  from strawberry.schema import BaseSchema
60
- from strawberry.types import ExecutionResult
61
51
 
62
52
  MergedContext = Union[
63
53
  "BaseContext",
64
54
  Union[
65
55
  Dict[str, Any],
66
56
  Dict[str, BackgroundTasks],
67
- Dict[str, Request],
68
- Dict[str, Response],
57
+ Dict[str, Request[Any, Any]],
58
+ Dict[str, Response[Any]],
69
59
  Dict[str, websocket],
70
60
  ],
71
61
  ]
@@ -75,21 +65,27 @@ CustomContext = Union["BaseContext", Dict[str, Any]]
75
65
 
76
66
  async def _context_getter(
77
67
  custom_context: Optional[CustomContext],
78
- request: Request,
68
+ request: Request[Any, Any],
69
+ response: Response[Any],
79
70
  ) -> MergedContext:
80
71
  if isinstance(custom_context, BaseContext):
81
72
  custom_context.request = request
82
73
  return custom_context
74
+
83
75
  default_context = {
84
76
  "request": request,
77
+ "response": response,
85
78
  }
79
+
86
80
  if isinstance(custom_context, dict):
87
81
  return {
88
82
  **default_context,
89
83
  **custom_context,
90
84
  }
85
+
91
86
  if custom_context is None:
92
87
  return default_context
88
+
93
89
  raise InvalidCustomContext()
94
90
 
95
91
 
@@ -121,6 +117,35 @@ class GraphQLTransportWSHandler(BaseGraphQLTransportWSHandler):
121
117
  return await self._get_root_value()
122
118
 
123
119
 
120
+ class StarliteRequestAdapter(AsyncHTTPRequestAdapter):
121
+ def __init__(self, request: Request[Any, Any]):
122
+ self.request = request
123
+
124
+ @property
125
+ def query_params(self) -> QueryParams:
126
+ return self.request.query_params
127
+
128
+ @property
129
+ def method(self) -> HTTPMethod:
130
+ return cast(HTTPMethod, self.request.method.upper())
131
+
132
+ @property
133
+ def headers(self) -> Mapping[str, str]:
134
+ return self.request.headers
135
+
136
+ @property
137
+ def content_type(self) -> Optional[str]:
138
+ return self.request.content_type[0]
139
+
140
+ async def get_body(self) -> bytes:
141
+ return await self.request.body()
142
+
143
+ async def get_form_data(self) -> FormData:
144
+ multipart_data = await self.request.form()
145
+
146
+ return FormData(form=multipart_data, files=multipart_data)
147
+
148
+
124
149
  class BaseContext:
125
150
  def __init__(self):
126
151
  self.request: Optional[Union[Request, WebSocket]] = None
@@ -163,21 +188,32 @@ def make_graphql_controller(
163
188
  else:
164
189
  root_value_getter_ = root_value_getter
165
190
 
166
- class GraphQLController(Controller):
191
+ def response_getter() -> Response[Any]:
192
+ return Response({}, background=BackgroundTasks([]))
193
+
194
+ schema_ = schema
195
+ allow_queries_via_get_ = allow_queries_via_get
196
+ graphiql_ = graphiql
197
+
198
+ class GraphQLController(
199
+ Controller,
200
+ AsyncBaseHTTPView[
201
+ Request[Any, Any], Response[Any], Response[Any], Context, RootValue
202
+ ],
203
+ ):
204
+ request_adapter_class = StarliteRequestAdapter
167
205
  path: str = routes_path
168
206
  dependencies: Optional[Dependencies] = {
169
207
  "custom_context": Provide(custom_context_getter_),
170
208
  "context": Provide(_context_getter),
171
209
  "root_value": Provide(root_value_getter_),
210
+ "response": Provide(response_getter),
172
211
  }
173
212
  graphql_ws_handler_class: Type[GraphQLWSHandler] = GraphQLWSHandler
174
213
  graphql_transport_ws_handler_class: Type[
175
214
  GraphQLTransportWSHandler
176
215
  ] = GraphQLTransportWSHandler
177
216
 
178
- _schema: BaseSchema = schema
179
- _graphiql: bool = graphiql
180
- _allow_queries_via_get: bool = allow_queries_via_get
181
217
  _keep_alive: bool = keep_alive
182
218
  _keep_alive_interval: float = keep_alive_interval
183
219
  _debug: bool = debug
@@ -185,192 +221,98 @@ def make_graphql_controller(
185
221
  _connection_init_wait_timeout: timedelta = connection_init_wait_timeout
186
222
  _graphiql_allowed_accept: FrozenSet[str] = frozenset({"text/html", "*/*"})
187
223
 
188
- async def execute(
189
- self,
190
- query: Optional[str],
191
- variables: Optional[Dict[str, Any]] = None,
192
- context: Optional[CustomContext] = None,
193
- operation_name: Optional[str] = None,
194
- root_value: Optional[Any] = None,
195
- allowed_operation_types: Optional[Iterable[OperationType]] = None,
196
- ):
197
- if self._debug:
198
- pretty_print_graphql_operation(operation_name, query or "", variables)
199
-
200
- return await self._schema.execute(
201
- query,
202
- root_value=root_value,
203
- variable_values=variables,
204
- operation_name=operation_name,
205
- context_value=context,
206
- allowed_operation_types=allowed_operation_types,
207
- )
208
-
209
- async def process_result(self, result: ExecutionResult) -> GraphQLHTTPResponse:
210
- return process_result(result)
224
+ schema: BaseSchema = schema_
225
+ allow_queries_via_get = allow_queries_via_get_
226
+ graphiql = graphiql_
211
227
 
212
228
  async def execute_request(
213
229
  self,
214
- request: Request,
215
- data: dict,
230
+ request: Request[Any, Any],
216
231
  context: CustomContext,
217
232
  root_value: Any,
218
233
  ) -> Response[Union[GraphQLResource, str]]:
219
- request_data = parse_request_data(data or {})
220
-
221
- allowed_operation_types = OperationType.from_http(request.method)
222
-
223
- if not self._allow_queries_via_get and request.method == HttpMethod.GET:
224
- allowed_operation_types = allowed_operation_types - {
225
- OperationType.QUERY
226
- }
227
-
228
- response: Union[Response[dict], Response[BaseContext]] = Response(
229
- {}, background=BackgroundTasks([])
230
- )
231
-
232
- if isinstance(context, BaseContext):
233
- context.response = response
234
- elif isinstance(context, dict):
235
- context["response"] = response
236
234
  try:
237
- result = await self.execute(
238
- request_data.query,
239
- variables=request_data.variables,
240
- context=context,
241
- operation_name=request_data.operation_name,
235
+ return await self.run(
236
+ request,
237
+ # TODO: check the dependency, above, can we make it so that
238
+ # we don't need to type ignore here?
239
+ context=context, # type: ignore
242
240
  root_value=root_value,
243
- allowed_operation_types=allowed_operation_types,
244
241
  )
245
- except InvalidOperationTypeError as e:
242
+ except HTTPException as e:
246
243
  return Response(
247
- e.as_http_error_reason(request.method),
248
- status_code=HTTP_400_BAD_REQUEST,
249
- media_type=MediaType.TEXT,
250
- )
251
- except MissingQueryError:
252
- return Response(
253
- "No GraphQL query found in the request",
254
- status_code=HTTP_400_BAD_REQUEST,
244
+ e.reason,
245
+ status_code=e.status_code,
255
246
  media_type=MediaType.TEXT,
256
247
  )
257
248
 
258
- response_data = await self.process_result(result)
249
+ def render_graphiql(self, request: Request[Any, Any]) -> Response[str]:
250
+ html = get_graphiql_html()
251
+ return Response(html, media_type=MediaType.HTML)
259
252
 
260
- actual_response: Response[GraphQLHTTPResponse] = Response(
261
- response_data, status_code=HTTP_200_OK, media_type=MediaType.JSON
253
+ def create_response(
254
+ self, response_data: GraphQLHTTPResponse, sub_response: Response[bytes]
255
+ ) -> Response[bytes]:
256
+ response = Response(
257
+ self.encode_json(response_data).encode(),
258
+ status_code=HTTP_200_OK,
259
+ media_type=MediaType.JSON,
262
260
  )
263
261
 
264
- return self._merge_responses(response, actual_response)
262
+ response.headers.update(sub_response.headers)
263
+ response.cookies.extend(sub_response.cookies)
264
+ response.background = sub_response.background
265
265
 
266
- def should_render_graphiql(self, request: Request) -> bool:
267
- if not self._graphiql:
268
- return False
269
- accept: Set[str] = set()
270
- for value in request.headers.getall("accept", ""):
271
- accept.symmetric_difference_update(set(value.split(",")))
272
- return bool(self._graphiql_allowed_accept & accept)
266
+ if sub_response.status_code:
267
+ response.status_code = sub_response.status_code
273
268
 
274
- def get_graphiql_response(self) -> Response[str]:
275
- html = get_graphiql_html()
276
- return Response(html, media_type=MediaType.HTML)
277
-
278
- @staticmethod
279
- def _merge_responses(
280
- response: Response, actual_response: Response
281
- ) -> Response[Union[GraphQLResource, str]]:
282
- actual_response.headers.update(response.headers)
283
- actual_response.cookies.extend(response.cookies)
284
- actual_response.background = response.background
285
- if response.status_code:
286
- actual_response.status_code = response.status_code
287
-
288
- return actual_response
269
+ return response
289
270
 
290
271
  @get(raises=[ValidationException, NotFoundException])
291
272
  async def handle_http_get(
292
273
  self,
293
- request: Request,
274
+ request: Request[Any, Any],
294
275
  context: CustomContext,
295
276
  root_value: Any,
277
+ response: Response[Any],
296
278
  ) -> Response[Union[GraphQLResource, str]]:
297
- if request.query_params:
298
- try:
299
- query_data = parse_query_params(
300
- cast("Dict[str, Any]", request.query_params)
301
- )
302
- except json.JSONDecodeError as error:
303
- raise ValidationException(
304
- detail="Unable to parse request body as JSON"
305
- ) from error
306
- return await self.execute_request(
307
- request=request,
308
- data=query_data,
309
- context=context,
310
- root_value=root_value,
311
- )
312
- if self.should_render_graphiql(request):
313
- return cast(
314
- "Response[Union[GraphQLResource, str]]",
315
- self.get_graphiql_response(),
316
- )
317
- raise NotFoundException()
279
+ self.temporal_response = response
280
+
281
+ return await self.execute_request(
282
+ request=request,
283
+ context=context,
284
+ root_value=root_value,
285
+ )
318
286
 
319
287
  @post(status_code=HTTP_200_OK)
320
288
  async def handle_http_post(
321
289
  self,
322
- request: Request,
290
+ request: Request[Any, Any],
323
291
  context: CustomContext,
324
292
  root_value: Any,
293
+ response: Response[Any],
325
294
  ) -> Response[Union[GraphQLResource, str]]:
326
- actual_response: Response[Union[GraphQLResource, str]]
327
-
328
- content_type, _ = request.content_type
329
-
330
- if "application/json" in content_type:
331
- try:
332
- data = await request.json()
333
- except SerializationException:
334
- actual_response = Response(
335
- "Unable to parse request body as JSON",
336
- status_code=HTTP_400_BAD_REQUEST,
337
- media_type=MediaType.TEXT,
338
- )
339
- return actual_response
340
- elif content_type.startswith("multipart/form-data"):
341
- multipart_data = await request.form()
342
- operations: Dict[str, Any] = multipart_data.get("operations", "{}")
343
- files_map: Dict[str, List[str]] = multipart_data.get("map", "{}")
344
- try:
345
- data = replace_placeholders_with_files(
346
- operations, files_map, multipart_data
347
- )
348
- except KeyError:
349
- return Response(
350
- "File(s) missing in form data",
351
- status_code=HTTP_400_BAD_REQUEST,
352
- media_type=MediaType.TEXT,
353
- )
354
- except (TypeError, AttributeError):
355
- return Response(
356
- "Unable to parse the multipart body",
357
- status_code=HTTP_400_BAD_REQUEST,
358
- media_type=MediaType.TEXT,
359
- )
360
- else:
361
- return Response(
362
- "Unsupported Media Type",
363
- status_code=HTTP_415_UNSUPPORTED_MEDIA_TYPE,
364
- media_type=MediaType.TEXT,
365
- )
295
+ self.temporal_response = response
366
296
 
367
297
  return await self.execute_request(
368
298
  request=request,
369
- data=data,
370
299
  context=context,
371
300
  root_value=root_value,
372
301
  )
373
302
 
303
+ async def get_context(
304
+ self, request: Request[Any, Any], response: Response[Any]
305
+ ) -> Context: # pragma: no cover
306
+ raise ValueError("`get_context` is not used by Starlite's controller")
307
+
308
+ async def get_root_value(
309
+ self, request: Request[Any, Any]
310
+ ) -> Optional[RootValue]: # pragma: no cover
311
+ raise ValueError("`get_root_value` is not used by Starlite's controller")
312
+
313
+ async def get_sub_response(self, request: Request[Any, Any]) -> Response[Any]:
314
+ return self.temporal_response
315
+
374
316
  @websocket()
375
317
  async def websocket_endpoint(
376
318
  self,
@@ -387,7 +329,7 @@ def make_graphql_controller(
387
329
  preferred_protocol = self.pick_preferred_protocol(socket)
388
330
  if preferred_protocol == GRAPHQL_TRANSPORT_WS_PROTOCOL:
389
331
  await self.graphql_transport_ws_handler_class(
390
- schema=self._schema,
332
+ schema=self.schema,
391
333
  debug=self._debug,
392
334
  connection_init_wait_timeout=self._connection_init_wait_timeout,
393
335
  get_context=_get_context,
@@ -396,7 +338,7 @@ def make_graphql_controller(
396
338
  ).handle()
397
339
  elif preferred_protocol == GRAPHQL_WS_PROTOCOL:
398
340
  await self.graphql_ws_handler_class(
399
- schema=self._schema,
341
+ schema=self.schema,
400
342
  debug=self._debug,
401
343
  keep_alive=self._keep_alive,
402
344
  keep_alive_interval=self._keep_alive_interval,
@@ -1,7 +1,10 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import enum
4
- from typing import Set
4
+ from typing import TYPE_CHECKING, Set
5
+
6
+ if TYPE_CHECKING:
7
+ from strawberry.http.types import HTTPMethod
5
8
 
6
9
 
7
10
  class OperationType(enum.Enum):
@@ -10,7 +13,7 @@ class OperationType(enum.Enum):
10
13
  SUBSCRIPTION = "subscription"
11
14
 
12
15
  @staticmethod
13
- def from_http(method: str) -> Set[OperationType]:
16
+ def from_http(method: HTTPMethod) -> Set[OperationType]:
14
17
  if method == "GET":
15
18
  return {OperationType.QUERY}
16
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.168.2
3
+ Version: 0.170.0
4
4
  Summary: A library for creating GraphQL APIs
5
5
  Home-page: https://strawberry.rocks/
6
6
  License: MIT
@@ -1,25 +1,23 @@
1
1
  strawberry/__init__.py,sha256=peph4GFl7xjU9_3Dh7ftTxdbOil4I9abdLFUIlEhD7U,1002
2
2
  strawberry/__main__.py,sha256=3U77Eu21mJ-LY27RG-JEnpbh6Z63wGOom4i-EoLtUcY,59
3
3
  strawberry/aiohttp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- strawberry/aiohttp/handlers/__init__.py,sha256=gGNmjbb1qRuvdRyx_3zX9Aeb3J1nGZud1JoYyipmAv8,321
4
+ strawberry/aiohttp/handlers/__init__.py,sha256=7EeGIIwrgJYHAS9XJnZLfRGL_GHrligKm39rrVt7qDA,241
5
5
  strawberry/aiohttp/handlers/graphql_transport_ws_handler.py,sha256=Jk4GG8YTxvHCFG2AnaGp9ZjDqaAEwz5TIzOpOn3jrD8,2157
6
6
  strawberry/aiohttp/handlers/graphql_ws_handler.py,sha256=xP5ls2k5D6Zbx8yN6hSfHVw9hn7GurBTh6NJDWPhQFk,2204
7
- strawberry/aiohttp/handlers/http_handler.py,sha256=-rskCjH8bQHRdtUqbJizAe6NJkjtAvh8CG7I2rwJqBc,5998
8
7
  strawberry/aiohttp/test/__init__.py,sha256=4xxdUZtIISSOwjrcnmox7AvT4WWjowCm5bUuPdQneMg,71
9
8
  strawberry/aiohttp/test/client.py,sha256=tlpHymSWqhiQbLmKwodcaX2vdc8BW1IaNTFTHlWKlOY,1323
10
- strawberry/aiohttp/views.py,sha256=G9V9kJgPQEYspskArlFEhHHcjhSdqjiS0IjAaJZEMQ0,4105
9
+ strawberry/aiohttp/views.py,sha256=l85Dy_-e6-19t5szkWn2NQZAkkqSQ-qT47ZXRDXOyfE,5705
11
10
  strawberry/annotation.py,sha256=fabmzUZXfWX6RvfSOAC_LzlgbEs5TT-xliB8b6szB1o,9940
12
11
  strawberry/arguments.py,sha256=-QXnDMvyTyp-3GJvRMuCgwU8SqkgTDO8YmZfYdsc7y0,7837
13
- strawberry/asgi/__init__.py,sha256=zrHK9kuqk06mEhKqesunrZ5aylijw4dMMlubW7dyJVE,4459
14
- strawberry/asgi/handlers/__init__.py,sha256=IdCta7r1jfejGkBAcTn5AI-IIUSJrVzo4v3d-6b9D3s,312
12
+ strawberry/asgi/__init__.py,sha256=g2yc_zkN90sK2y9zt9OT2acXEaTjPeSH8QipN3JBjwY,6627
13
+ strawberry/asgi/handlers/__init__.py,sha256=rz5Gth2eJUn7tDq2--99KSNFeMdDPpLFCkfA7vge0cI,235
15
14
  strawberry/asgi/handlers/graphql_transport_ws_handler.py,sha256=q17qkfWbgR0NZNBBWI9cMdi3ej67L_mtLKSajUM6260,2136
16
15
  strawberry/asgi/handlers/graphql_ws_handler.py,sha256=uTBYGx3b2wW-MHR9wgaPbX1lJLlxxs6LAHJ0ZkZISuc,2319
17
- strawberry/asgi/handlers/http_handler.py,sha256=AiXRjlqAAbu1YpGgPKgiOldWupccSrTs5HH7T37hFP4,7699
18
16
  strawberry/asgi/test/__init__.py,sha256=4xxdUZtIISSOwjrcnmox7AvT4WWjowCm5bUuPdQneMg,71
19
17
  strawberry/asgi/test/client.py,sha256=SfcpTzipwFmpPPPBK1h4oxqKa9mFt0OEJg-CbB6bvsY,1402
20
18
  strawberry/auto.py,sha256=npbPB8-4Qbc0PZ3KgOKmfJs6SBFH69nXHZj6sxyBuyY,2565
21
19
  strawberry/chalice/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- strawberry/chalice/views.py,sha256=DjS_sxCBv6JJRas3XXSZDFSbU0MyVednqBTU_PsxJU4,7206
20
+ strawberry/chalice/views.py,sha256=pZhN0xGj2HJrmuP1cP382zripNjRUgzeqJZEZltoGCw,4293
23
21
  strawberry/channels/__init__.py,sha256=-zyz1y9jTpnzuECW5uU4Eh7bC0S2SalSfINpVlU5YkA,524
24
22
  strawberry/channels/context.py,sha256=IVzYw57VF-CNS_2Vs_TlFII85SX_QmGxaAYe5uwnuKA,523
25
23
  strawberry/channels/handlers/base.py,sha256=3ZuiOJ5rg_YSLn9c5wjLZPF4iWpdh0v5y7hvQUfrqag,5510
@@ -35,7 +33,7 @@ strawberry/cli/commands/codegen.py,sha256=LBu5s0IbFFZjWU5NHHh-k1v8OfdZsZsr7RwP1b
35
33
  strawberry/cli/commands/export_schema.py,sha256=ex4AXavEWaiE9UT1vryT2px7HqtHnZHYpdVlG-M9eXs,651
36
34
  strawberry/cli/commands/server.py,sha256=mIvM8VfIK1vS1Yd_vUfxLPJpQi2EJxfuw1TnpvkYRRM,2025
37
35
  strawberry/cli/constants.py,sha256=GhhDZOl9lN4glq50OI1oSbPSGqQXEarZ6r_Grq8pcpI,138
38
- strawberry/cli/debug_server.py,sha256=6bg3BOpSdxPJyzM_ugyk-2LXlKUprpXMzovzfA_Eco4,934
36
+ strawberry/cli/debug_server.py,sha256=wyczYrKHT-XHLQNkW72nY5eHuKoIscHAXpI4G-DRxLg,967
39
37
  strawberry/cli/utils/__init__.py,sha256=ayHhf4I6hAlMFJeg3jBmB1wm3havkLlr_QnoLEqSj9Y,612
40
38
  strawberry/cli/utils/load_schema.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
39
  strawberry/codegen/__init__.py,sha256=J391-vRPHeeNBJuUlyf2AUZO_mkqMCyJZ_1l4DaRY8w,170
@@ -54,7 +52,7 @@ strawberry/django/apps.py,sha256=ZWw3Mzv1Cgy0T9xT8Jr2_dkCTZjT5WQABb34iqnu5pc,135
54
52
  strawberry/django/context.py,sha256=KHZ-u9tc2ip3FAEj4mXoFPeKVyq3KyVjHqCZM9uFc7c,607
55
53
  strawberry/django/test/__init__.py,sha256=4xxdUZtIISSOwjrcnmox7AvT4WWjowCm5bUuPdQneMg,71
56
54
  strawberry/django/test/client.py,sha256=lPEbe_4lNL1pSgtywq4O-b6n7ALCW3U9_uvoWz3EaSM,592
57
- strawberry/django/views.py,sha256=jrscYudUS835sJJE6P1FBBOFcnL676A7IaOUvWsjVcQ,11362
55
+ strawberry/django/views.py,sha256=NCp75DKa1Jt4YSVKcbh0zTsr-VDrlx8A19CmJOS7Bp8,7927
58
56
  strawberry/enum.py,sha256=lkQa6QOnAXnlkQnQsGY1ybF-1yVTranptpM49c6HOGQ,4230
59
57
  strawberry/exceptions/__init__.py,sha256=VppVQCi94XbBcoZUM7VmRQKprL6ahCEftN9K2wSesXw,6131
60
58
  strawberry/exceptions/duplicated_type_name.py,sha256=N4Y9yQ-WG7B1PjP--pUMp_4x6EUqrUi7EGZEv1y6NQ0,2225
@@ -113,7 +111,7 @@ strawberry/fastapi/context.py,sha256=hxLoihS9TM16iyUPiAGQf-0i4wv975CJYHHI6EwOewA
113
111
  strawberry/fastapi/handlers/__init__.py,sha256=TziBHyibYBOGiidjpCkjNThYbVY7K_nt0hnRLVHVh3I,241
114
112
  strawberry/fastapi/handlers/graphql_transport_ws_handler.py,sha256=k8BhP1xQAFc1GnbQoFhi8KQSWwY1x-ngR9qIDVJW_ic,549
115
113
  strawberry/fastapi/handlers/graphql_ws_handler.py,sha256=U84lpd7Lxl2bEnFr9QroswmEaMO5ipLCZTeYRAaZH-g,504
116
- strawberry/fastapi/router.py,sha256=-sgJg0KmDjO4lNX-olUJJv2gUDeMHVmM0y1JRodxuUk,14232
114
+ strawberry/fastapi/router.py,sha256=EbbxDf21fH5DXkUg_LcSR5kTNVHscoNEUeXclpJgSw8,11360
117
115
  strawberry/federation/__init__.py,sha256=FeUxLiBVuk9TKBmJJi51SeUaI8c80rS8hbl9No-hjII,535
118
116
  strawberry/federation/argument.py,sha256=5qyJYlQGEZd6iXWseQ7dnnejCYj5HyglfK10jOCIJBg,802
119
117
  strawberry/federation/enum.py,sha256=g_f_Pl43vNLoboR4YSocPzY9aWIB9uz5sOhZIG4NvgQ,2117
@@ -129,12 +127,18 @@ strawberry/federation/union.py,sha256=PN8TtF5h5BvT1-QMDTNdc-y3Wk_HSwyMfGHNLPfIir
129
127
  strawberry/field.py,sha256=6hwWoVSMJ48Dikz29PwARtL8_Fj4nAn6myrXXHdTx5s,16814
130
128
  strawberry/file_uploads/__init__.py,sha256=v2-6FGBqnTnMPSUTFOiXpIutDMl-ga0PFtw5tKlcagk,50
131
129
  strawberry/file_uploads/scalars.py,sha256=jccJh-h7t4naRiDzrszGoYsp95zdF30c7y5Ht0Zrk_s,131
132
- strawberry/file_uploads/utils.py,sha256=JjrruBy4-QHvFP9re7YcS6N_dhKI2eXoP0yq9KkmZt0,1124
130
+ strawberry/file_uploads/utils.py,sha256=U8gk1aHjWOBa_Opyvc47h6OpYToGq1QiSnEkI2kphdo,1112
133
131
  strawberry/flask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
134
132
  strawberry/flask/graphiql.py,sha256=YnLRPOJRdzyG62T2TuFOqQ1WX0uiIU6xHLtOvmyBpw4,275
135
- strawberry/flask/views.py,sha256=IKIY-wOy0FnEOTYvV6yJaEc5xez19GEXdFyJyEsZNas,8248
133
+ strawberry/flask/views.py,sha256=GlK2zovhrcwVirl3qoacM1oHrPzVXHk7xEpKm_4wRC8,4966
136
134
  strawberry/http/__init__.py,sha256=MMp6ZM0nqV5NrqCwhpSr9KZE5UklJIxRDwd_OgsQnhs,1493
137
- strawberry/http/temporal_response.py,sha256=rZErM6lwWAwNAspYxyaFIsuT4Rd1RDO3JUzKRG4fFWs,98
135
+ strawberry/http/async_base_view.py,sha256=sNnUXszBJnHzGnl4ssXoH9GhBcJzkx4_VKQIqzQ2V5M,6894
136
+ strawberry/http/base.py,sha256=GkpqEJ2Xxr3G5TQVKOlOfn2dmOkv0tFBlXEp5Qbu5lY,1865
137
+ strawberry/http/exceptions.py,sha256=4lgbMQ-UF2HHu2PczqkS1vGAcU08cEGY03FMrVvjqeA,155
138
+ strawberry/http/sync_base_view.py,sha256=b6yBnrW-gzoNX3ffbk0HQlSqjhTxlXb2C0IyaXG7Y3s,6581
139
+ strawberry/http/temporal_response.py,sha256=6w_Nn3CNiU54jzEQP8pwzzHhGuh7eJw7S0wIneASJT8,187
140
+ strawberry/http/types.py,sha256=5alxKekKDASeQS0RkeJYo1CG5HKTXCSfclWPtbYOaPE,348
141
+ strawberry/http/typevars.py,sha256=Kc2xRx3Jic7AruCtv3FOuv2hqeQQzcCLP1E53Nwmpts,207
138
142
  strawberry/lazy_type.py,sha256=CP-qKPUmeAHkj6raUwY8FalCdFgnK4B_C5evmPOPcjs,3079
139
143
  strawberry/mutation.py,sha256=NROPvHJU1BBxZB7Wj4Okxw4hDIYM59MCpukAGEmSNYA,255
140
144
  strawberry/object_type.py,sha256=MbCwjaGt-m5WUn-X7ajyKUxeSWHWxPqt5AV0vuJYrH0,11020
@@ -148,8 +152,8 @@ strawberry/resolvers.py,sha256=g7_g3jmXszziGydY1UG6IItf9s6B1lGLUCnwW1kb8U0,224
148
152
  strawberry/sanic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
153
  strawberry/sanic/context.py,sha256=qfoj8QMaAiWbCQFAdm2KPPJGNc7ilXeKAl5z0XJ2nzo,805
150
154
  strawberry/sanic/graphiql.py,sha256=QqAgPCrXh0_RDweBXBTTKv3dOEeWd7-GW-EHW_sBnY4,377
151
- strawberry/sanic/utils.py,sha256=y7TC4FzJ8ctA-Zicy-UqQpe5k3eUmMdHNEVu_zIze2U,864
152
- strawberry/sanic/views.py,sha256=lPESh48UlHPcQBZydW5mQLt4REqDhfTDoyo6I-NPn4w,7696
155
+ strawberry/sanic/utils.py,sha256=eDiJPJYpELj4hFsx8CCAHomqe7dDEpStDPm6OfkstJ0,998
156
+ strawberry/sanic/views.py,sha256=I6RKiYFdPuu7uosJsSmfL0xg_SfJ9UEye-E-tuXzo28,5148
153
157
  strawberry/scalars.py,sha256=CSxTGSvpFyT9H83NxZeiBerl_WPGe43TlSxcrn60960,2076
154
158
  strawberry/schema/__init__.py,sha256=u1QCyDVQExUVDA20kyosKPz3TS5HMCN2NrXclhiFAL4,92
155
159
  strawberry/schema/base.py,sha256=rj4pMnVSdTclZpYIPoyWlwEtSYohqJPJzEgInsoON08,2895
@@ -157,16 +161,16 @@ strawberry/schema/compat.py,sha256=fEOig4-X5Q3TrbuHcWXk1t69TzMfOr8vy3U-xB03yEU,1
157
161
  strawberry/schema/config.py,sha256=G1MC5DNKvSFNmg4bcu9XjQhceW8xZMIHf1hG3aS4SGA,599
158
162
  strawberry/schema/exceptions.py,sha256=_9Ua-lLRCJfbtd8B6MXILNKGI2SwHkcBNkAHYM7ITp8,534
159
163
  strawberry/schema/execute.py,sha256=vUjrEGzbO5L4YMIosx3RTVt9TQyogf6AeBbKWoMFdO0,10085
160
- strawberry/schema/name_converter.py,sha256=vhCSHlly0O-EA3qbI1Kzy4WtfjU2OFuE4FhUD9-7Yms,6158
164
+ strawberry/schema/name_converter.py,sha256=eQh4A-8fQAkhwgFhGk0_qFUQ2NPfqKO8DzKJVrxf0vk,6284
161
165
  strawberry/schema/schema.py,sha256=X_i3TE0Vvm9AV9QrV9qDBdSisbxAkpajpv1RXmQoYG8,11915
162
- strawberry/schema/schema_converter.py,sha256=eaVRlsHKD9pftGYCBGItGMoEqMdXiXnY_CAmpy3JxQM,30253
166
+ strawberry/schema/schema_converter.py,sha256=qG0-M90_xbUJlYf-hchHduAB3awKTfZBBpIHbzqa2z0,30382
163
167
  strawberry/schema/types/__init__.py,sha256=oHO3COWhL3L1KLYCJNY1XFf5xt2GGtHiMC-UaYbFfnA,68
164
168
  strawberry/schema/types/base_scalars.py,sha256=yg5Z7jGonN477L5-edMWLZuoehIpm0tdQJ9ATVV3kgc,1831
165
169
  strawberry/schema/types/concrete_type.py,sha256=4HUFIWPfAodU1cj0VAAuU1IrAnsG3XIX_P3X-6n_1IE,708
166
170
  strawberry/schema/types/scalar.py,sha256=MQUnxLjNf13PokHnOJymnjcRF1OPstviEAg0I8_t1Sk,2203
167
171
  strawberry/schema_directive.py,sha256=JI5-pTpSRgtrJjmJmL-z3Z3ECD6yGe2d21gB9IISO5Y,1968
168
172
  strawberry/starlite/__init__.py,sha256=v209swT8H9MljVL-npvANhEO1zz3__PSfxb_Ix-NoeE,134
169
- strawberry/starlite/controller.py,sha256=LkaGfL7egTemdtk48I7XBSpxv7F75WiookVViQALc-c,14662
173
+ strawberry/starlite/controller.py,sha256=ullES3DqIQUgYFWoU9aK02kcdWseuwD8-2DthJVIZmo,11479
170
174
  strawberry/starlite/handlers/graphql_transport_ws_handler.py,sha256=5mJgJilNtU6hzVT3xV7l1EhfDOPQr0J7ElxS7Jb-xOc,2070
171
175
  strawberry/starlite/handlers/graphql_ws_handler.py,sha256=1o--kbz2GUAnS245G2kw52hXQK6ZW3CBjSqre0dJqaE,2211
172
176
  strawberry/static/graphiql.html,sha256=MnaLNPv0WV9yKYY3-VPd8f7ydgbhnLU6AlDEc0WaVz0,4432
@@ -188,7 +192,7 @@ strawberry/types/__init__.py,sha256=APb1Cjy6bxqFxIfDfempP6eb9NE3LYDwQ3gX7r07lXI,
188
192
  strawberry/types/execution.py,sha256=fKvwWwOeB6zBXMyPh8GCApeL5HsJZOsqPOyeYifL9dc,2476
189
193
  strawberry/types/fields/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
194
  strawberry/types/fields/resolver.py,sha256=gvhjPbBhjaZVPe5jbt61hgKwpMIutC3IzKTMi8JgaYg,12010
191
- strawberry/types/graphql.py,sha256=3AT7mZW9ICmbJjRWUF-4z-qs6ZY7Q038dm2ul7LyGKc,597
195
+ strawberry/types/graphql.py,sha256=3SWZEsa0Zy1eVW6vy75BnB7t9_lJVi6TBV3_1j3RNBs,687
192
196
  strawberry/types/info.py,sha256=OsqYMzJ6L0xcE80uvS_Oz-b75zsQ66Iv9tvi7f48Q58,2335
193
197
  strawberry/types/nodes.py,sha256=6SA3BFh756S5IZ0NuZc9cLXdQ7gy73TvS3AnFU5Mk6I,4911
194
198
  strawberry/types/type_resolver.py,sha256=gBFuXK4rBgJWCMof1nu36S2Po33z4vP3Kdwt0RFvyAI,7313
@@ -208,8 +212,8 @@ strawberry/utils/logging.py,sha256=pz1pRJtx5xX2ejGKNN-fG8zPA4SJjnq1HK9xaQpjd4s,1
208
212
  strawberry/utils/operation.py,sha256=-b2Qo6PtMO86emY-opS9ak-knRW_NQbXvEVPmscFRlk,1152
209
213
  strawberry/utils/str_converters.py,sha256=VdOnzaxhwJnmQl1Lon0VOjl72uXhM8tLfGxoGwn3arI,657
210
214
  strawberry/utils/typing.py,sha256=KtfgwoTTNYSw6IDZWf1McwzxZs5D1guNCVmXt8Mh9z8,10071
211
- strawberry_graphql-0.168.2.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
212
- strawberry_graphql-0.168.2.dist-info/METADATA,sha256=UAXM5PP917F8sMKMTwAn_bTwDQhObpth0Iqh6L8SAMg,7551
213
- strawberry_graphql-0.168.2.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
214
- strawberry_graphql-0.168.2.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
215
- strawberry_graphql-0.168.2.dist-info/RECORD,,
215
+ strawberry_graphql-0.170.0.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
216
+ strawberry_graphql-0.170.0.dist-info/METADATA,sha256=2Q4B8EhcP0C-6LW6_k_Qj4_uU0H_7d6-I7l1udCzv_g,7551
217
+ strawberry_graphql-0.170.0.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
218
+ strawberry_graphql-0.170.0.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
219
+ strawberry_graphql-0.170.0.dist-info/RECORD,,