strawberry-graphql 0.253.1__py3-none-any.whl → 0.254.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.
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from functools import cached_property
4
- from typing import TYPE_CHECKING, Optional, Set, Union
4
+ from typing import TYPE_CHECKING, Dict, Optional, Set, Union
5
5
 
6
6
  from graphql import GraphQLError
7
7
 
@@ -157,6 +157,13 @@ class StrawberryGraphQLError(GraphQLError):
157
157
  """Use it when you want to override the graphql.GraphQLError in custom extensions."""
158
158
 
159
159
 
160
+ class ConnectionRejectionError(Exception):
161
+ """Use it when you want to reject a WebSocket connection."""
162
+
163
+ def __init__(self, payload: Dict[str, object] = {}) -> None:
164
+ self.payload = payload
165
+
166
+
160
167
  __all__ = [
161
168
  "StrawberryException",
162
169
  "UnableToFindExceptionSource",
@@ -134,7 +134,7 @@ class PydanticV2Compat:
134
134
  type_=field.annotation,
135
135
  outer_type_=field.annotation,
136
136
  default=field.default,
137
- default_factory=field.default_factory,
137
+ default_factory=field.default_factory, # type: ignore
138
138
  required=field.is_required(),
139
139
  alias=field.alias,
140
140
  # v2 doesn't have allow_none
@@ -13,6 +13,7 @@ from typing import (
13
13
  Mapping,
14
14
  Optional,
15
15
  Tuple,
16
+ Type,
16
17
  Union,
17
18
  cast,
18
19
  overload,
@@ -21,7 +22,6 @@ from typing_extensions import Literal, TypeGuard
21
22
 
22
23
  from graphql import GraphQLError
23
24
 
24
- from strawberry import UNSET
25
25
  from strawberry.exceptions import MissingQueryError
26
26
  from strawberry.file_uploads.utils import replace_placeholders_with_files
27
27
  from strawberry.http import (
@@ -39,6 +39,7 @@ from strawberry.subscriptions.protocols.graphql_transport_ws.handlers import (
39
39
  from strawberry.subscriptions.protocols.graphql_ws.handlers import BaseGraphQLWSHandler
40
40
  from strawberry.types import ExecutionResult, SubscriptionExecutionResult
41
41
  from strawberry.types.graphql import OperationType
42
+ from strawberry.types.unset import UNSET, UnsetType
42
43
 
43
44
  from .base import BaseView
44
45
  from .exceptions import HTTPException
@@ -116,11 +117,19 @@ class AsyncBaseHTTPView(
116
117
  connection_init_wait_timeout: timedelta = timedelta(minutes=1)
117
118
  request_adapter_class: Callable[[Request], AsyncHTTPRequestAdapter]
118
119
  websocket_adapter_class: Callable[
119
- ["AsyncBaseHTTPView", WebSocketRequest, WebSocketResponse],
120
+ [
121
+ "AsyncBaseHTTPView[Any, Any, Any, Any, Any, Context, RootValue]",
122
+ WebSocketRequest,
123
+ WebSocketResponse,
124
+ ],
120
125
  AsyncWebSocketAdapter,
121
126
  ]
122
- graphql_transport_ws_handler_class = BaseGraphQLTransportWSHandler
123
- graphql_ws_handler_class = BaseGraphQLWSHandler
127
+ graphql_transport_ws_handler_class: Type[
128
+ BaseGraphQLTransportWSHandler[Context, RootValue]
129
+ ] = BaseGraphQLTransportWSHandler[Context, RootValue]
130
+ graphql_ws_handler_class: Type[BaseGraphQLWSHandler[Context, RootValue]] = (
131
+ BaseGraphQLWSHandler[Context, RootValue]
132
+ )
124
133
 
125
134
  @property
126
135
  @abc.abstractmethod
@@ -279,18 +288,20 @@ class AsyncBaseHTTPView(
279
288
 
280
289
  if websocket_subprotocol == GRAPHQL_TRANSPORT_WS_PROTOCOL:
281
290
  await self.graphql_transport_ws_handler_class(
291
+ view=self,
282
292
  websocket=websocket,
283
- context=context,
284
- root_value=root_value,
293
+ context=context, # type: ignore
294
+ root_value=root_value, # type: ignore
285
295
  schema=self.schema,
286
296
  debug=self.debug,
287
297
  connection_init_wait_timeout=self.connection_init_wait_timeout,
288
298
  ).handle()
289
299
  elif websocket_subprotocol == GRAPHQL_WS_PROTOCOL:
290
300
  await self.graphql_ws_handler_class(
301
+ view=self,
291
302
  websocket=websocket,
292
- context=context,
293
- root_value=root_value,
303
+ context=context, # type: ignore
304
+ root_value=root_value, # type: ignore
294
305
  schema=self.schema,
295
306
  debug=self.debug,
296
307
  keep_alive=self.keep_alive,
@@ -476,5 +487,10 @@ class AsyncBaseHTTPView(
476
487
  ) -> GraphQLHTTPResponse:
477
488
  return process_result(result)
478
489
 
490
+ async def on_ws_connect(
491
+ self, context: Context
492
+ ) -> Union[UnsetType, None, Dict[str, object]]:
493
+ return UNSET
494
+
479
495
 
480
496
  __all__ = ["AsyncBaseHTTPView"]
@@ -1,20 +1,20 @@
1
- from typing import TypeVar
1
+ from typing_extensions import TypeVar
2
2
 
3
3
  Request = TypeVar("Request", contravariant=True)
4
4
  Response = TypeVar("Response")
5
5
  SubResponse = TypeVar("SubResponse")
6
6
  WebSocketRequest = TypeVar("WebSocketRequest")
7
7
  WebSocketResponse = TypeVar("WebSocketResponse")
8
- Context = TypeVar("Context")
9
- RootValue = TypeVar("RootValue")
8
+ Context = TypeVar("Context", default=None)
9
+ RootValue = TypeVar("RootValue", default=None)
10
10
 
11
11
 
12
12
  __all__ = [
13
+ "Context",
13
14
  "Request",
14
15
  "Response",
16
+ "RootValue",
15
17
  "SubResponse",
16
18
  "WebSocketRequest",
17
19
  "WebSocketResponse",
18
- "Context",
19
- "RootValue",
20
20
  ]
@@ -5,8 +5,10 @@ import logging
5
5
  from contextlib import suppress
6
6
  from typing import (
7
7
  TYPE_CHECKING,
8
+ Any,
8
9
  Awaitable,
9
10
  Dict,
11
+ Generic,
10
12
  List,
11
13
  Optional,
12
14
  cast,
@@ -14,11 +16,13 @@ from typing import (
14
16
 
15
17
  from graphql import GraphQLError, GraphQLSyntaxError, parse
16
18
 
19
+ from strawberry.exceptions import ConnectionRejectionError
17
20
  from strawberry.http.exceptions import (
18
21
  NonJsonMessageReceived,
19
22
  NonTextMessageReceived,
20
23
  WebSocketDisconnected,
21
24
  )
25
+ from strawberry.http.typevars import Context, RootValue
22
26
  from strawberry.subscriptions.protocols.graphql_transport_ws.types import (
23
27
  CompleteMessage,
24
28
  ConnectionInitMessage,
@@ -31,29 +35,32 @@ from strawberry.subscriptions.protocols.graphql_transport_ws.types import (
31
35
  from strawberry.types import ExecutionResult
32
36
  from strawberry.types.execution import PreExecutionError
33
37
  from strawberry.types.graphql import OperationType
38
+ from strawberry.types.unset import UnsetType
34
39
  from strawberry.utils.debug import pretty_print_graphql_operation
35
40
  from strawberry.utils.operation import get_operation_type
36
41
 
37
42
  if TYPE_CHECKING:
38
43
  from datetime import timedelta
39
44
 
40
- from strawberry.http.async_base_view import AsyncWebSocketAdapter
45
+ from strawberry.http.async_base_view import AsyncBaseHTTPView, AsyncWebSocketAdapter
41
46
  from strawberry.schema import BaseSchema
42
47
  from strawberry.schema.subscribe import SubscriptionResult
43
48
 
44
49
 
45
- class BaseGraphQLTransportWSHandler:
50
+ class BaseGraphQLTransportWSHandler(Generic[Context, RootValue]):
46
51
  task_logger: logging.Logger = logging.getLogger("strawberry.ws.task")
47
52
 
48
53
  def __init__(
49
54
  self,
55
+ view: AsyncBaseHTTPView[Any, Any, Any, Any, Any, Context, RootValue],
50
56
  websocket: AsyncWebSocketAdapter,
51
- context: object,
52
- root_value: object,
57
+ context: Context,
58
+ root_value: RootValue,
53
59
  schema: BaseSchema,
54
60
  debug: bool,
55
61
  connection_init_wait_timeout: timedelta,
56
62
  ) -> None:
63
+ self.view = view
57
64
  self.websocket = websocket
58
65
  self.context = context
59
66
  self.root_value = root_value
@@ -64,9 +71,8 @@ class BaseGraphQLTransportWSHandler:
64
71
  self.connection_init_received = False
65
72
  self.connection_acknowledged = False
66
73
  self.connection_timed_out = False
67
- self.operations: Dict[str, Operation] = {}
74
+ self.operations: Dict[str, Operation[Context, RootValue]] = {}
68
75
  self.completed_tasks: List[asyncio.Task] = []
69
- self.connection_params: Optional[Dict[str, object]] = None
70
76
 
71
77
  async def handle(self) -> None:
72
78
  self.on_request_accepted()
@@ -169,15 +175,33 @@ class BaseGraphQLTransportWSHandler:
169
175
  )
170
176
  return
171
177
 
172
- self.connection_params = payload
173
-
174
178
  if self.connection_init_received:
175
179
  reason = "Too many initialisation requests"
176
180
  await self.websocket.close(code=4429, reason=reason)
177
181
  return
178
182
 
179
183
  self.connection_init_received = True
180
- await self.send_message({"type": "connection_ack"})
184
+
185
+ if isinstance(self.context, dict):
186
+ self.context["connection_params"] = payload
187
+ elif hasattr(self.context, "connection_params"):
188
+ self.context.connection_params = payload
189
+
190
+ self.context = cast(Context, self.context)
191
+
192
+ try:
193
+ connection_ack_payload = await self.view.on_ws_connect(self.context)
194
+ except ConnectionRejectionError:
195
+ await self.websocket.close(code=4403, reason="Forbidden")
196
+ return
197
+
198
+ if isinstance(connection_ack_payload, UnsetType):
199
+ await self.send_message({"type": "connection_ack"})
200
+ else:
201
+ await self.send_message(
202
+ {"type": "connection_ack", "payload": connection_ack_payload}
203
+ )
204
+
181
205
  self.connection_acknowledged = True
182
206
 
183
207
  async def handle_ping(self, message: PingMessage) -> None:
@@ -219,11 +243,6 @@ class BaseGraphQLTransportWSHandler:
219
243
  message["payload"].get("variables"),
220
244
  )
221
245
 
222
- if isinstance(self.context, dict):
223
- self.context["connection_params"] = self.connection_params
224
- elif hasattr(self.context, "connection_params"):
225
- self.context.connection_params = self.connection_params
226
-
227
246
  operation = Operation(
228
247
  self,
229
248
  message["id"],
@@ -236,7 +255,7 @@ class BaseGraphQLTransportWSHandler:
236
255
  operation.task = asyncio.create_task(self.run_operation(operation))
237
256
  self.operations[message["id"]] = operation
238
257
 
239
- async def run_operation(self, operation: Operation) -> None:
258
+ async def run_operation(self, operation: Operation[Context, RootValue]) -> None:
240
259
  """The operation task's top level method. Cleans-up and de-registers the operation once it is done."""
241
260
  # TODO: Handle errors in this method using self.handle_task_exception()
242
261
 
@@ -320,7 +339,7 @@ class BaseGraphQLTransportWSHandler:
320
339
  await task
321
340
 
322
341
 
323
- class Operation:
342
+ class Operation(Generic[Context, RootValue]):
324
343
  """A class encapsulating a single operation with its id. Helps enforce protocol state transition."""
325
344
 
326
345
  __slots__ = [
@@ -336,7 +355,7 @@ class Operation:
336
355
 
337
356
  def __init__(
338
357
  self,
339
- handler: BaseGraphQLTransportWSHandler,
358
+ handler: BaseGraphQLTransportWSHandler[Context, RootValue],
340
359
  id: str,
341
360
  operation_type: OperationType,
342
361
  query: str,
@@ -4,13 +4,17 @@ import asyncio
4
4
  from contextlib import suppress
5
5
  from typing import (
6
6
  TYPE_CHECKING,
7
+ Any,
7
8
  AsyncGenerator,
8
9
  Dict,
10
+ Generic,
9
11
  Optional,
10
12
  cast,
11
13
  )
12
14
 
15
+ from strawberry.exceptions import ConnectionRejectionError
13
16
  from strawberry.http.exceptions import NonTextMessageReceived, WebSocketDisconnected
17
+ from strawberry.http.typevars import Context, RootValue
14
18
  from strawberry.subscriptions.protocols.graphql_ws.types import (
15
19
  ConnectionInitMessage,
16
20
  ConnectionTerminateMessage,
@@ -20,24 +24,30 @@ from strawberry.subscriptions.protocols.graphql_ws.types import (
20
24
  StopMessage,
21
25
  )
22
26
  from strawberry.types.execution import ExecutionResult, PreExecutionError
27
+ from strawberry.types.unset import UnsetType
23
28
  from strawberry.utils.debug import pretty_print_graphql_operation
24
29
 
25
30
  if TYPE_CHECKING:
26
- from strawberry.http.async_base_view import AsyncWebSocketAdapter
31
+ from strawberry.http.async_base_view import AsyncBaseHTTPView, AsyncWebSocketAdapter
27
32
  from strawberry.schema import BaseSchema
28
33
 
29
34
 
30
- class BaseGraphQLWSHandler:
35
+ class BaseGraphQLWSHandler(Generic[Context, RootValue]):
36
+ context: Context
37
+ root_value: RootValue
38
+
31
39
  def __init__(
32
40
  self,
41
+ view: AsyncBaseHTTPView[Any, Any, Any, Any, Any, Context, RootValue],
33
42
  websocket: AsyncWebSocketAdapter,
34
- context: object,
35
- root_value: object,
43
+ context: Context,
44
+ root_value: RootValue,
36
45
  schema: BaseSchema,
37
46
  debug: bool,
38
47
  keep_alive: bool,
39
48
  keep_alive_interval: Optional[float],
40
49
  ) -> None:
50
+ self.view = view
41
51
  self.websocket = websocket
42
52
  self.context = context
43
53
  self.root_value = root_value
@@ -48,7 +58,6 @@ class BaseGraphQLWSHandler:
48
58
  self.keep_alive_task: Optional[asyncio.Task] = None
49
59
  self.subscriptions: Dict[str, AsyncGenerator] = {}
50
60
  self.tasks: Dict[str, asyncio.Task] = {}
51
- self.connection_params: Optional[Dict[str, object]] = None
52
61
 
53
62
  async def handle(self) -> None:
54
63
  try:
@@ -92,9 +101,29 @@ class BaseGraphQLWSHandler:
92
101
  await self.websocket.close(code=1000, reason="")
93
102
  return
94
103
 
95
- self.connection_params = payload
104
+ if isinstance(self.context, dict):
105
+ self.context["connection_params"] = payload
106
+ elif hasattr(self.context, "connection_params"):
107
+ self.context.connection_params = payload
108
+
109
+ self.context = cast(Context, self.context)
96
110
 
97
- await self.send_message({"type": "connection_ack"})
111
+ try:
112
+ connection_ack_payload = await self.view.on_ws_connect(self.context)
113
+ except ConnectionRejectionError as e:
114
+ await self.send_message({"type": "connection_error", "payload": e.payload})
115
+ await self.websocket.close(code=1011, reason="")
116
+ return
117
+
118
+ if (
119
+ isinstance(connection_ack_payload, UnsetType)
120
+ or connection_ack_payload is None
121
+ ):
122
+ await self.send_message({"type": "connection_ack"})
123
+ else:
124
+ await self.send_message(
125
+ {"type": "connection_ack", "payload": connection_ack_payload}
126
+ )
98
127
 
99
128
  if self.keep_alive:
100
129
  keep_alive_handler = self.handle_keep_alive()
@@ -112,11 +141,6 @@ class BaseGraphQLWSHandler:
112
141
  operation_name = payload.get("operationName")
113
142
  variables = payload.get("variables")
114
143
 
115
- if isinstance(self.context, dict):
116
- self.context["connection_params"] = self.connection_params
117
- elif hasattr(self.context, "connection_params"):
118
- self.context.connection_params = self.connection_params
119
-
120
144
  if self.debug:
121
145
  pretty_print_graphql_operation(operation_name, query, variables)
122
146
 
@@ -37,6 +37,7 @@ class ConnectionErrorMessage(TypedDict):
37
37
 
38
38
  class ConnectionAckMessage(TypedDict):
39
39
  type: Literal["connection_ack"]
40
+ payload: NotRequired[Dict[str, object]]
40
41
 
41
42
 
42
43
  class DataMessagePayload(TypedDict):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.253.1
3
+ Version: 0.254.1
4
4
  Summary: A library for creating GraphQL APIs
5
5
  Home-page: https://strawberry.rocks/
6
6
  License: MIT
@@ -50,7 +50,7 @@ strawberry/django/context.py,sha256=XL85jDGAVnb2pwgm5uRUvIXwlGia3i-8ZVfKihf0T24,
50
50
  strawberry/django/test/__init__.py,sha256=4xxdUZtIISSOwjrcnmox7AvT4WWjowCm5bUuPdQneMg,71
51
51
  strawberry/django/test/client.py,sha256=6dorWECd0wdn8fu3dabE-dfGK3uza58mGrdJ-xPct-w,626
52
52
  strawberry/django/views.py,sha256=ySmuTx5ZKBAyC4LPziMqzLJoRimLDF4bRsnrUYWf_oM,9612
53
- strawberry/exceptions/__init__.py,sha256=-yYcgv3cxEyDSxWyFId9j-yy2pNnXQC4lIpk7bHr8fs,6257
53
+ strawberry/exceptions/__init__.py,sha256=JSzn0hQDXOf2EgVdBOYT5UtxRDcRNj68yDZN-_dp5dQ,6470
54
54
  strawberry/exceptions/conflicting_arguments.py,sha256=68f6kMSXdjuEjZkoe8o2I9PSIjwTS1kXsSGaQBPk_hI,1587
55
55
  strawberry/exceptions/duplicated_type_name.py,sha256=-FG5qG_Mvkd7ROdOxCB9bijf8QR6Olryf07mbAFC0-U,2210
56
56
  strawberry/exceptions/exception.py,sha256=1NrsTAzko1fUrSpXjYpNoCk2XuYJerEKj_CDeqGe_eA,3447
@@ -73,7 +73,7 @@ strawberry/exceptions/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
73
73
  strawberry/exceptions/utils/source_finder.py,sha256=0IBbOOsdrNAYVZ1eg5WMR01js-5w6uDAN82P8fTVjaw,20078
74
74
  strawberry/experimental/__init__.py,sha256=2HP5XtxL8ZKsPp4EDRAbMCqiP7p2V4Cca278JUGxnt0,102
75
75
  strawberry/experimental/pydantic/__init__.py,sha256=jlsYH1j_9W4ieRpUKgt5zQPERDL7nc1ZBNQ3dAhJs8w,241
76
- strawberry/experimental/pydantic/_compat.py,sha256=-qJvpNzsDuY5E2NF87FL7QiakrhJXWqiCjCoS0tr1_g,8371
76
+ strawberry/experimental/pydantic/_compat.py,sha256=9nh4wF_rF3imsvCi0epviHnkNlrvp3Spr7i12--JEK8,8387
77
77
  strawberry/experimental/pydantic/conversion.py,sha256=n2wLlzMgFooTHe7GeVsIihM-9SVY1Sp2V8yfqwpLDBY,4250
78
78
  strawberry/experimental/pydantic/conversion_types.py,sha256=LdLFp0e7_YPntmHDwZDpPbozfANp3TWgBrHGRFBWPf8,937
79
79
  strawberry/experimental/pydantic/error_type.py,sha256=kHqACk3F8kKT3V8PZr2h7-KI9M4UNpMjtq_TiOwYI38,4382
@@ -131,7 +131,7 @@ strawberry/file_uploads/utils.py,sha256=2zsXg3QsKgGLD7of2dW-vgQn_Naf7I3Men9PhEAF
131
131
  strawberry/flask/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
132
  strawberry/flask/views.py,sha256=3gd1Xgxg3IT72dz2nrMBK094dMNxTUHciu3oofGOAG4,6235
133
133
  strawberry/http/__init__.py,sha256=ANVqO7G43gUzY4RCBvm1xyNZibf1SSfYnEdbdzxLhRI,1134
134
- strawberry/http/async_base_view.py,sha256=prPO8MfNwPjoOIEQLHkC-miL-mprg7XYcrJI4JBYTbs,15852
134
+ strawberry/http/async_base_view.py,sha256=aQbxZeESazWJNgpPz7EVQwoChd0g-B7FqOl-I8u7JWo,16412
135
135
  strawberry/http/base.py,sha256=rfOH64-_b040YWRwqTCCA3ALjPoGxc110rmCxqfS4M4,2358
136
136
  strawberry/http/exceptions.py,sha256=9E2dreS1crRoJVUEPuHyx23NcDELDHNzkAOa-rGv-8I,348
137
137
  strawberry/http/ides.py,sha256=njYI2b5R0PnY27ll1ePdIvgPQU3m6Aod_JTBrcZYs0U,638
@@ -139,7 +139,7 @@ strawberry/http/parse_content_type.py,sha256=sgtcOO_ZOFg7WWWibYyLc4SU58K-SErcW56
139
139
  strawberry/http/sync_base_view.py,sha256=qA9o-Ic4ZcTXiKF02lBsrN7ET6VeXGYWf9m9mjhlfWU,7199
140
140
  strawberry/http/temporal_response.py,sha256=QrGYSg7Apu7Mh-X_uPKDZby-UicXw2J_ywxaqhS8a_4,220
141
141
  strawberry/http/types.py,sha256=cAuaiUuvaMI_XhZ2Ey6Ej23WyQKqMGFxzzpVHDjVazY,371
142
- strawberry/http/typevars.py,sha256=8hK5PfNPZXb2EhZmqlobYyfwJJcO2Wb96T91MlLEVJs,450
142
+ strawberry/http/typevars.py,sha256=Uu6NkKe3h7o29ZWwldq6sJy4ioSSeXODTCDRvY2hUpE,489
143
143
  strawberry/litestar/__init__.py,sha256=zsXzg-mglCGUVO9iNXLm-yadoDSCK7k-zuyRqyvAh1w,237
144
144
  strawberry/litestar/controller.py,sha256=5F7J0mbVzyDJCP1MJFpDp3kS6b82xrN33DA9ONHEOLs,14090
145
145
  strawberry/parent.py,sha256=sXURm0lauSpjUADsmfNGY-Zl7kHs0A67BFcWuWKzRxw,771
@@ -186,11 +186,11 @@ strawberry/static/pathfinder.html,sha256=0DPx9AmJ2C_sJstFXnWOz9k5tVQHeHaK7qdVY4l
186
186
  strawberry/subscriptions/__init__.py,sha256=1VGmiCzFepqRFyCikagkUoHHdoTG3XYlFu9GafoQMws,170
187
187
  strawberry/subscriptions/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
188
188
  strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py,sha256=wN6dkMu6WiaIZTE19PGoN9xXpIN_RdDE_q7F7ZgjCxk,138
189
- strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py,sha256=R9QCGHJ_lf0gmNf_wzt4Ow-HFA5ulFsGUiNo_K3CHkI,14104
189
+ strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py,sha256=mN-exZX7bvZHmEwXyWtiD2aTZ5vIhNiH3Q-yE2JjKy0,14875
190
190
  strawberry/subscriptions/protocols/graphql_transport_ws/types.py,sha256=AtKPEyFuNIKgnIIBD-MC4kAYFQ6uhXeq3xyRF6Dh-hg,2181
191
191
  strawberry/subscriptions/protocols/graphql_ws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
- strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=BmUh_IRJRW7xKCvZD7ewJK0rT8iERzkff53FaJJGRlk,7224
193
- strawberry/subscriptions/protocols/graphql_ws/types.py,sha256=WvCZVhxFRkojvOFKiDuXPtighsEJkQU-I9y4Vgo5c4w,1971
192
+ strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=Pt4RGGl9_cghKT2aftcik4YSnFDKwWAe7Z9pBvLGc5k,8106
193
+ strawberry/subscriptions/protocols/graphql_ws/types.py,sha256=9cR5iqPRU_MGJuqkPEiwP_WfeVQUACIVDP7U1ZF-IDc,2015
194
194
  strawberry/test/__init__.py,sha256=U3B5Ng7C_H8GpCpfvgZZcfADMw6cor5hm78gS3nDdMI,115
195
195
  strawberry/test/client.py,sha256=Va7J1tIjZ6PxbOqPl57jSp5lNLOZSueHPmrUuUx5sRY,6462
196
196
  strawberry/tools/__init__.py,sha256=pdGpZx8wpq03VfUZJyF9JtYxZhGqzzxCiipsalWxJX4,127
@@ -229,8 +229,8 @@ strawberry/utils/logging.py,sha256=U1cseHGquN09YFhFmRkiphfASKCyK0HUZREImPgVb0c,7
229
229
  strawberry/utils/operation.py,sha256=SSXxN-vMqdHO6W2OZtip-1z7y4_A-eTVFdhDvhKeLCk,1193
230
230
  strawberry/utils/str_converters.py,sha256=KGd7QH90RevaJjH6SQEkiVVsb8KuhJr_wv5AsI7UzQk,897
231
231
  strawberry/utils/typing.py,sha256=G6k2wWD1TDQ9WFk-Togekj_hTVFqHV-g7Phf2Wu41ms,14380
232
- strawberry_graphql-0.253.1.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
233
- strawberry_graphql-0.253.1.dist-info/METADATA,sha256=_YihcF0ZMLR2uPzfQWePQFe_TFxLO2UYvxXGwybKtSw,7758
234
- strawberry_graphql-0.253.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
235
- strawberry_graphql-0.253.1.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
236
- strawberry_graphql-0.253.1.dist-info/RECORD,,
232
+ strawberry_graphql-0.254.1.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
233
+ strawberry_graphql-0.254.1.dist-info/METADATA,sha256=rX9JFLcC-8e7Fp53AiOM463AhtDvZHWe7Gb43TXCUdk,7758
234
+ strawberry_graphql-0.254.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
235
+ strawberry_graphql-0.254.1.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
236
+ strawberry_graphql-0.254.1.dist-info/RECORD,,