strawberry-graphql 0.247.2__py3-none-any.whl → 0.248.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,6 +1,5 @@
1
1
  from __future__ import annotations
2
2
 
3
- import dataclasses
4
3
  import uuid
5
4
  from typing import (
6
5
  TYPE_CHECKING,
@@ -26,10 +25,14 @@ from strawberry.subscriptions.protocols.graphql_transport_ws.types import (
26
25
  SubscribeMessage,
27
26
  SubscribeMessagePayload,
28
27
  )
29
- from strawberry.subscriptions.protocols.graphql_ws import (
30
- GQL_CONNECTION_ACK,
31
- GQL_CONNECTION_INIT,
32
- GQL_START,
28
+ from strawberry.subscriptions.protocols.graphql_ws.types import (
29
+ ConnectionAckMessage as GraphQLWSConnectionAckMessage,
30
+ )
31
+ from strawberry.subscriptions.protocols.graphql_ws.types import (
32
+ ConnectionInitMessage as GraphQLWSConnectionInitMessage,
33
+ )
34
+ from strawberry.subscriptions.protocols.graphql_ws.types import (
35
+ StartMessage as GraphQLWSStartMessage,
33
36
  )
34
37
  from strawberry.types import ExecutionResult
35
38
 
@@ -108,13 +111,17 @@ class GraphQLWebsocketCommunicator(WebsocketCommunicator):
108
111
  await self.send_json_to(
109
112
  ConnectionInitMessage(payload=self.connection_params).as_dict()
110
113
  )
111
- response = await self.receive_json_from()
112
- assert response == ConnectionAckMessage().as_dict()
114
+ graphql_transport_ws_response = await self.receive_json_from()
115
+ assert graphql_transport_ws_response == ConnectionAckMessage().as_dict()
113
116
  else:
114
117
  assert res == (True, GRAPHQL_WS_PROTOCOL)
115
- await self.send_json_to({"type": GQL_CONNECTION_INIT})
116
- response = await self.receive_json_from()
117
- assert response["type"] == GQL_CONNECTION_ACK
118
+ await self.send_json_to(
119
+ GraphQLWSConnectionInitMessage({"type": "connection_init"})
120
+ )
121
+ graphql_ws_response: GraphQLWSConnectionAckMessage = (
122
+ await self.receive_json_from()
123
+ )
124
+ assert graphql_ws_response["type"] == "connection_ack"
118
125
 
119
126
  # Actual `ExecutionResult`` objects are not available client-side, since they
120
127
  # get transformed into `FormattedExecutionResult` on the wire, but we attempt
@@ -123,22 +130,28 @@ class GraphQLWebsocketCommunicator(WebsocketCommunicator):
123
130
  self, query: str, variables: Optional[Dict] = None
124
131
  ) -> Union[ExecutionResult, AsyncIterator[ExecutionResult]]:
125
132
  id_ = uuid.uuid4().hex
126
- sub_payload = SubscribeMessagePayload(query=query, variables=variables)
133
+
127
134
  if self.protocol == GRAPHQL_TRANSPORT_WS_PROTOCOL:
128
135
  await self.send_json_to(
129
136
  SubscribeMessage(
130
137
  id=id_,
131
- payload=sub_payload,
138
+ payload=SubscribeMessagePayload(query=query, variables=variables),
132
139
  ).as_dict()
133
140
  )
134
141
  else:
135
- await self.send_json_to(
136
- {
137
- "type": GQL_START,
138
- "id": id_,
139
- "payload": dataclasses.asdict(sub_payload),
140
- }
141
- )
142
+ start_message: GraphQLWSStartMessage = {
143
+ "type": "start",
144
+ "id": id_,
145
+ "payload": {
146
+ "query": query,
147
+ },
148
+ }
149
+
150
+ if variables is not None:
151
+ start_message["payload"]["variables"] = variables
152
+
153
+ await self.send_json_to(start_message)
154
+
142
155
  while True:
143
156
  response = await self.receive_json_from(timeout=5)
144
157
  message_type = response["type"]
@@ -4,7 +4,7 @@ import functools
4
4
  import importlib
5
5
  import inspect
6
6
  from pathlib import Path # noqa: TCH003
7
- from typing import List, Optional, Type
7
+ from typing import List, Optional, Type, Union, cast
8
8
 
9
9
  import rich
10
10
  import typer
@@ -61,7 +61,9 @@ def _import_plugin(plugin: str) -> Optional[Type[QueryCodegenPlugin]]:
61
61
 
62
62
 
63
63
  @functools.lru_cache
64
- def _load_plugin(plugin_path: str) -> Type[QueryCodegenPlugin]:
64
+ def _load_plugin(
65
+ plugin_path: str,
66
+ ) -> Union[Type[QueryCodegenPlugin], Type[ConsolePlugin]]:
65
67
  # try to import plugin_name from current folder
66
68
  # then try to import from strawberry.codegen.plugins
67
69
 
@@ -77,7 +79,9 @@ def _load_plugin(plugin_path: str) -> Type[QueryCodegenPlugin]:
77
79
  return plugin
78
80
 
79
81
 
80
- def _load_plugins(plugin_ids: List[str], query: Path) -> List[QueryCodegenPlugin]:
82
+ def _load_plugins(
83
+ plugin_ids: List[str], query: Path
84
+ ) -> List[Union[QueryCodegenPlugin, ConsolePlugin]]:
81
85
  plugins = []
82
86
  for ptype_id in plugin_ids:
83
87
  ptype = _load_plugin(ptype_id)
@@ -127,11 +131,11 @@ def codegen(
127
131
 
128
132
  console_plugin_type = _load_plugin(cli_plugin) if cli_plugin else ConsolePlugin
129
133
  console_plugin = console_plugin_type(output_dir)
134
+ assert isinstance(console_plugin, ConsolePlugin)
130
135
  console_plugin.before_any_start()
131
136
 
132
137
  for q in query:
133
- plugins = _load_plugins(selected_plugins, q)
134
- console_plugin.query = q # update the query in the console plugin.
138
+ plugins = cast(List[QueryCodegenPlugin], _load_plugins(selected_plugins, q))
135
139
 
136
140
  code_generator = QueryCodegen(
137
141
  schema_symbol, plugins=plugins, console_plugin=console_plugin
@@ -105,7 +105,7 @@ def _build_dataclass_creation_fields(
105
105
 
106
106
  return DataclassCreationFields(
107
107
  name=field.name,
108
- field_type=field_type,
108
+ field_type=field_type, # type: ignore
109
109
  field=strawberry_field,
110
110
  )
111
111
 
@@ -198,7 +198,7 @@ def type(
198
198
  all_model_fields = [
199
199
  DataclassCreationFields(
200
200
  name=field.name,
201
- field_type=field.type,
201
+ field_type=field.type, # type: ignore
202
202
  field=field,
203
203
  )
204
204
  for field in extra_fields + private_fields
@@ -1,24 +0,0 @@
1
- GQL_CONNECTION_INIT = "connection_init"
2
- GQL_CONNECTION_ACK = "connection_ack"
3
- GQL_CONNECTION_ERROR = "connection_error"
4
- GQL_CONNECTION_TERMINATE = "connection_terminate"
5
- GQL_CONNECTION_KEEP_ALIVE = "ka"
6
- GQL_START = "start"
7
- GQL_DATA = "data"
8
- GQL_ERROR = "error"
9
- GQL_COMPLETE = "complete"
10
- GQL_STOP = "stop"
11
-
12
-
13
- __all__ = [
14
- "GQL_CONNECTION_INIT",
15
- "GQL_CONNECTION_ACK",
16
- "GQL_CONNECTION_ERROR",
17
- "GQL_CONNECTION_TERMINATE",
18
- "GQL_CONNECTION_KEEP_ALIVE",
19
- "GQL_START",
20
- "GQL_DATA",
21
- "GQL_ERROR",
22
- "GQL_COMPLETE",
23
- "GQL_STOP",
24
- ]
@@ -11,24 +11,18 @@ from typing import (
11
11
  )
12
12
 
13
13
  from strawberry.http.exceptions import NonTextMessageReceived, WebSocketDisconnected
14
- from strawberry.subscriptions.protocols.graphql_ws import (
15
- GQL_COMPLETE,
16
- GQL_CONNECTION_ACK,
17
- GQL_CONNECTION_ERROR,
18
- GQL_CONNECTION_INIT,
19
- GQL_CONNECTION_KEEP_ALIVE,
20
- GQL_CONNECTION_TERMINATE,
21
- GQL_DATA,
22
- GQL_ERROR,
23
- GQL_START,
24
- GQL_STOP,
25
- )
26
14
  from strawberry.subscriptions.protocols.graphql_ws.types import (
27
- ConnectionInitPayload,
28
- DataPayload,
15
+ CompleteMessage,
16
+ ConnectionAckMessage,
17
+ ConnectionErrorMessage,
18
+ ConnectionInitMessage,
19
+ ConnectionKeepAliveMessage,
20
+ ConnectionTerminateMessage,
21
+ DataMessage,
22
+ ErrorMessage,
29
23
  OperationMessage,
30
- OperationMessagePayload,
31
- StartPayload,
24
+ StartMessage,
25
+ StopMessage,
32
26
  )
33
27
  from strawberry.types.execution import ExecutionResult, PreExecutionError
34
28
  from strawberry.utils.debug import pretty_print_graphql_operation
@@ -59,7 +53,7 @@ class BaseGraphQLWSHandler:
59
53
  self.keep_alive_task: Optional[asyncio.Task] = None
60
54
  self.subscriptions: Dict[str, AsyncGenerator] = {}
61
55
  self.tasks: Dict[str, asyncio.Task] = {}
62
- self.connection_params: Optional[ConnectionInitPayload] = None
56
+ self.connection_params: Optional[Dict[str, object]] = None
63
57
 
64
58
  async def handle(self) -> None:
65
59
  try:
@@ -87,41 +81,40 @@ class BaseGraphQLWSHandler:
87
81
  self,
88
82
  message: OperationMessage,
89
83
  ) -> None:
90
- message_type = message["type"]
91
-
92
- if message_type == GQL_CONNECTION_INIT:
84
+ if message["type"] == "connection_init":
93
85
  await self.handle_connection_init(message)
94
- elif message_type == GQL_CONNECTION_TERMINATE:
86
+ elif message["type"] == "connection_terminate":
95
87
  await self.handle_connection_terminate(message)
96
- elif message_type == GQL_START:
88
+ elif message["type"] == "start":
97
89
  await self.handle_start(message)
98
- elif message_type == GQL_STOP:
90
+ elif message["type"] == "stop":
99
91
  await self.handle_stop(message)
100
92
 
101
- async def handle_connection_init(self, message: OperationMessage) -> None:
93
+ async def handle_connection_init(self, message: ConnectionInitMessage) -> None:
102
94
  payload = message.get("payload")
103
95
  if payload is not None and not isinstance(payload, dict):
104
- error_message: OperationMessage = {"type": GQL_CONNECTION_ERROR}
96
+ error_message: ConnectionErrorMessage = {"type": "connection_error"}
105
97
  await self.websocket.send_json(error_message)
106
98
  await self.websocket.close(code=1000, reason="")
107
99
  return
108
100
 
109
- payload = cast(Optional["ConnectionInitPayload"], payload)
110
101
  self.connection_params = payload
111
102
 
112
- acknowledge_message: OperationMessage = {"type": GQL_CONNECTION_ACK}
113
- await self.websocket.send_json(acknowledge_message)
103
+ connection_ack_message: ConnectionAckMessage = {"type": "connection_ack"}
104
+ await self.websocket.send_json(connection_ack_message)
114
105
 
115
106
  if self.keep_alive:
116
107
  keep_alive_handler = self.handle_keep_alive()
117
108
  self.keep_alive_task = asyncio.create_task(keep_alive_handler)
118
109
 
119
- async def handle_connection_terminate(self, message: OperationMessage) -> None:
110
+ async def handle_connection_terminate(
111
+ self, message: ConnectionTerminateMessage
112
+ ) -> None:
120
113
  await self.websocket.close(code=1000, reason="")
121
114
 
122
- async def handle_start(self, message: OperationMessage) -> None:
115
+ async def handle_start(self, message: StartMessage) -> None:
123
116
  operation_id = message["id"]
124
- payload = cast("StartPayload", message["payload"])
117
+ payload = message["payload"]
125
118
  query = payload["query"]
126
119
  operation_name = payload.get("operationName")
127
120
  variables = payload.get("variables")
@@ -139,14 +132,14 @@ class BaseGraphQLWSHandler:
139
132
  )
140
133
  self.tasks[operation_id] = asyncio.create_task(result_handler)
141
134
 
142
- async def handle_stop(self, message: OperationMessage) -> None:
135
+ async def handle_stop(self, message: StopMessage) -> None:
143
136
  operation_id = message["id"]
144
137
  await self.cleanup_operation(operation_id)
145
138
 
146
139
  async def handle_keep_alive(self) -> None:
147
140
  assert self.keep_alive_interval
148
141
  while True:
149
- data: OperationMessage = {"type": GQL_CONNECTION_KEEP_ALIVE}
142
+ data: ConnectionKeepAliveMessage = {"type": "ka"}
150
143
  await self.websocket.send_json(data)
151
144
  await asyncio.sleep(self.keep_alive_interval)
152
145
 
@@ -168,14 +161,25 @@ class BaseGraphQLWSHandler:
168
161
  if isinstance(agen_or_err, PreExecutionError):
169
162
  assert agen_or_err.errors
170
163
  error_payload = agen_or_err.errors[0].formatted
171
- await self.send_message(GQL_ERROR, operation_id, error_payload)
164
+ error_message: ErrorMessage = {
165
+ "type": "error",
166
+ "id": operation_id,
167
+ "payload": error_payload,
168
+ }
169
+ await self.websocket.send_json(error_message)
172
170
  else:
173
171
  self.subscriptions[operation_id] = agen_or_err
172
+
174
173
  async for result in agen_or_err:
175
174
  await self.send_data(result, operation_id)
176
- await self.send_message(GQL_COMPLETE, operation_id, None)
175
+
176
+ await self.websocket.send_json(
177
+ CompleteMessage({"type": "complete", "id": operation_id})
178
+ )
177
179
  except asyncio.CancelledError:
178
- await self.send_message(GQL_COMPLETE, operation_id, None)
180
+ await self.websocket.send_json(
181
+ CompleteMessage({"type": "complete", "id": operation_id})
182
+ )
179
183
 
180
184
  async def cleanup_operation(self, operation_id: str) -> None:
181
185
  if operation_id in self.subscriptions:
@@ -188,26 +192,24 @@ class BaseGraphQLWSHandler:
188
192
  await self.tasks[operation_id]
189
193
  del self.tasks[operation_id]
190
194
 
191
- async def send_message(
192
- self,
193
- type_: str,
194
- operation_id: str,
195
- payload: Optional[OperationMessagePayload] = None,
196
- ) -> None:
197
- data: OperationMessage = {"type": type_, "id": operation_id}
198
- if payload is not None:
199
- data["payload"] = payload
200
- await self.websocket.send_json(data)
201
-
202
195
  async def send_data(
203
196
  self, execution_result: ExecutionResult, operation_id: str
204
197
  ) -> None:
205
- payload: DataPayload = {"data": execution_result.data}
198
+ data_message: DataMessage = {
199
+ "type": "data",
200
+ "id": operation_id,
201
+ "payload": {"data": execution_result.data},
202
+ }
203
+
206
204
  if execution_result.errors:
207
- payload["errors"] = [err.formatted for err in execution_result.errors]
205
+ data_message["payload"]["errors"] = [
206
+ err.formatted for err in execution_result.errors
207
+ ]
208
+
208
209
  if execution_result.extensions:
209
- payload["extensions"] = execution_result.extensions
210
- await self.send_message(GQL_DATA, operation_id, payload)
210
+ data_message["payload"]["extensions"] = execution_result.extensions
211
+
212
+ await self.websocket.send_json(data_message)
211
213
 
212
214
 
213
215
  __all__ = ["BaseGraphQLWSHandler"]
@@ -1,52 +1,96 @@
1
- from typing import Any, Dict, List, Optional, Union
2
- from typing_extensions import TypedDict
1
+ from typing import Dict, List, TypedDict, Union
2
+ from typing_extensions import Literal, NotRequired
3
3
 
4
4
  from graphql import GraphQLFormattedError
5
5
 
6
- ConnectionInitPayload = Dict[str, Any]
7
6
 
7
+ class ConnectionInitMessage(TypedDict):
8
+ type: Literal["connection_init"]
9
+ payload: NotRequired[Dict[str, object]]
8
10
 
9
- ConnectionErrorPayload = Dict[str, Any]
10
11
 
11
-
12
- class StartPayload(TypedDict, total=False):
12
+ class StartMessagePayload(TypedDict):
13
13
  query: str
14
- variables: Optional[Dict[str, Any]]
15
- operationName: Optional[str]
14
+ variables: NotRequired[Dict[str, object]]
15
+ operationName: NotRequired[str]
16
+
17
+
18
+ class StartMessage(TypedDict):
19
+ type: Literal["start"]
20
+ id: str
21
+ payload: StartMessagePayload
16
22
 
17
23
 
18
- class DataPayload(TypedDict, total=False):
19
- data: Any
24
+ class StopMessage(TypedDict):
25
+ type: Literal["stop"]
26
+ id: str
20
27
 
21
- # Optional list of formatted graphql.GraphQLError objects
22
- errors: Optional[List[GraphQLFormattedError]]
23
- extensions: Optional[Dict[str, Any]]
24
28
 
29
+ class ConnectionTerminateMessage(TypedDict):
30
+ type: Literal["connection_terminate"]
25
31
 
26
- ErrorPayload = GraphQLFormattedError
27
32
 
33
+ class ConnectionErrorMessage(TypedDict):
34
+ type: Literal["connection_error"]
35
+ payload: NotRequired[Dict[str, object]]
28
36
 
29
- OperationMessagePayload = Union[
30
- ConnectionInitPayload,
31
- ConnectionErrorPayload,
32
- StartPayload,
33
- DataPayload,
34
- ErrorPayload,
35
- ]
36
37
 
38
+ class ConnectionAckMessage(TypedDict):
39
+ type: Literal["connection_ack"]
37
40
 
38
- class OperationMessage(TypedDict, total=False):
39
- type: str
41
+
42
+ class DataMessagePayload(TypedDict):
43
+ data: object
44
+ errors: NotRequired[List[GraphQLFormattedError]]
45
+
46
+ # Non-standard field:
47
+ extensions: NotRequired[Dict[str, object]]
48
+
49
+
50
+ class DataMessage(TypedDict):
51
+ type: Literal["data"]
40
52
  id: str
41
- payload: OperationMessagePayload
53
+ payload: DataMessagePayload
54
+
55
+
56
+ class ErrorMessage(TypedDict):
57
+ type: Literal["error"]
58
+ id: str
59
+ payload: GraphQLFormattedError
60
+
61
+
62
+ class CompleteMessage(TypedDict):
63
+ type: Literal["complete"]
64
+ id: str
65
+
66
+
67
+ class ConnectionKeepAliveMessage(TypedDict):
68
+ type: Literal["ka"]
69
+
70
+
71
+ OperationMessage = Union[
72
+ ConnectionInitMessage,
73
+ StartMessage,
74
+ StopMessage,
75
+ ConnectionTerminateMessage,
76
+ ConnectionErrorMessage,
77
+ ConnectionAckMessage,
78
+ DataMessage,
79
+ ErrorMessage,
80
+ CompleteMessage,
81
+ ]
42
82
 
43
83
 
44
84
  __all__ = [
45
- "ConnectionInitPayload",
46
- "ConnectionErrorPayload",
47
- "StartPayload",
48
- "DataPayload",
49
- "ErrorPayload",
50
- "OperationMessagePayload",
85
+ "ConnectionInitMessage",
86
+ "StartMessage",
87
+ "StopMessage",
88
+ "ConnectionTerminateMessage",
89
+ "ConnectionErrorMessage",
90
+ "ConnectionAckMessage",
91
+ "DataMessage",
92
+ "ErrorMessage",
93
+ "CompleteMessage",
94
+ "ConnectionKeepAliveMessage",
51
95
  "OperationMessage",
52
96
  ]
@@ -350,7 +350,12 @@ def eval_type(
350
350
  assert ast_unparse
351
351
  type_ = ForwardRef(ast_unparse(ast_obj))
352
352
 
353
- return _eval_type(type_, globalns, localns)
353
+ extra: Dict[str, Any] = {}
354
+
355
+ if sys.version_info >= (3, 13):
356
+ extra = {"type_params": None}
357
+
358
+ return _eval_type(type_, globalns, localns, **extra)
354
359
 
355
360
  origin = get_origin(type_)
356
361
  if origin is not None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.247.2
3
+ Version: 0.248.1
4
4
  Summary: A library for creating GraphQL APIs
5
5
  Home-page: https://strawberry.rocks/
6
6
  License: MIT
@@ -16,11 +16,11 @@ strawberry/channels/handlers/base.py,sha256=KV4KA0eF5NRtikV9m4ssoPI5pmCZvDuRkfoT
16
16
  strawberry/channels/handlers/http_handler.py,sha256=fnQcPwdUz2CboVlnI3s1urQ_ZnZyNZvRx7SM_xPLLEA,11577
17
17
  strawberry/channels/handlers/ws_handler.py,sha256=k9xax8S1g0tfEFSe76UOHkheHqIrnYjEioYlLm4UPLo,6052
18
18
  strawberry/channels/router.py,sha256=DKIbl4zuRBhfvViUVpyu0Rf_WRT41E6uZC-Yic9Ltvo,2024
19
- strawberry/channels/testing.py,sha256=GZqYu_rhrT1gLHmdI219L1fctVDmrv7AMHs0bwhXitc,6166
19
+ strawberry/channels/testing.py,sha256=2cZvF9S4ofYLLRh2G8iyWZTphfQi7XrUcFpRqGjUmPQ,6688
20
20
  strawberry/cli/__init__.py,sha256=byS5VrEiTJatAH6YS4V1Kd4SOwMRAQO2M1oJdIddivg,585
21
21
  strawberry/cli/app.py,sha256=tTMBV1pdWqMcwjWO2yn-8oLDhMhfJvUzyQtWs75LWJ0,54
22
22
  strawberry/cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- strawberry/cli/commands/codegen.py,sha256=f3TKQVeg0iMYV3qcSXlvTNgG73ZWC60zjbeuK_RkQ3M,3825
23
+ strawberry/cli/commands/codegen.py,sha256=79CRVa01AScZ0dactJzMMpWP_2O00urNIjBAyWjPzA8,3910
24
24
  strawberry/cli/commands/export_schema.py,sha256=8XBqbejk0kT2fHky74DzW2TnE8APNMs0cKtatEjErUA,1024
25
25
  strawberry/cli/commands/schema_codegen.py,sha256=G6eV08a51sjVxCm3jn75oPn9hC8YarKiAKOY5bpTuKU,749
26
26
  strawberry/cli/commands/server.py,sha256=M175Etn4163oqP3egHBpZ8ga2Ilk8XgdDJtz6zfHPxM,2189
@@ -79,7 +79,7 @@ strawberry/experimental/pydantic/conversion_types.py,sha256=LdLFp0e7_YPntmHDwZDp
79
79
  strawberry/experimental/pydantic/error_type.py,sha256=kHqACk3F8kKT3V8PZr2h7-KI9M4UNpMjtq_TiOwYI38,4382
80
80
  strawberry/experimental/pydantic/exceptions.py,sha256=Q8Deq3bNkMgc8fwvIYdcfxHSONXVMu-ZB6jcsh1NQYo,1498
81
81
  strawberry/experimental/pydantic/fields.py,sha256=pmBqlq1DUtNkmDlXdA0Hmp3Xy252P6v5uyDF4WGcnl0,2588
82
- strawberry/experimental/pydantic/object_type.py,sha256=4CUtBR5wxe4dP-bpKBwNLU6trje7zygkD39_GoiPVBM,12432
82
+ strawberry/experimental/pydantic/object_type.py,sha256=KWpKIPpCsZRmURJOlkce5qODgWm7xgaJ49YZlJQcB80,12464
83
83
  strawberry/experimental/pydantic/utils.py,sha256=ViR7HGtnlYmyjUwIqGaEoBPo6dcibckwTFgp0GgwO6A,4073
84
84
  strawberry/ext/LICENSE,sha256=_oY0TZg0b_sW0--0T44aMTpy2e2zF1Kiyn8E1qDiivo,1249
85
85
  strawberry/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -189,9 +189,9 @@ strawberry/subscriptions/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQe
189
189
  strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py,sha256=wN6dkMu6WiaIZTE19PGoN9xXpIN_RdDE_q7F7ZgjCxk,138
190
190
  strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py,sha256=_h-xNf_ZRtjn8PGbxZk3u9qTR-NNNCevdgaFF0uXciw,14728
191
191
  strawberry/subscriptions/protocols/graphql_transport_ws/types.py,sha256=udYxzGtwjETYvY5f23org0t-aY4cimTjEGFYUR3idaY,2596
192
- strawberry/subscriptions/protocols/graphql_ws/__init__.py,sha256=ijn1A1O0Fzv5p9n-jw3T5H7M3oxbN4gbxRaepN7HyJk,553
193
- strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=tQmQjoA-x4yXLHbjmq7r7fFnNPluIcc7EiYgQSFbiZ0,7740
194
- strawberry/subscriptions/protocols/graphql_ws/types.py,sha256=CKm4Hy95p6H9u_-QyWdxipwzNeeDIWtilP3RRp8vjPw,1050
192
+ strawberry/subscriptions/protocols/graphql_ws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
193
+ strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=oM0o85zC24LpBjtVq8VakKx2hBGL0kb3Q9yl0GyFLS8,7614
194
+ strawberry/subscriptions/protocols/graphql_ws/types.py,sha256=diZ36w56Nb_YmgfWXe6uXGiQOKmWIVjNEkcM-PkjaSs,1939
195
195
  strawberry/test/__init__.py,sha256=U3B5Ng7C_H8GpCpfvgZZcfADMw6cor5hm78gS3nDdMI,115
196
196
  strawberry/test/client.py,sha256=Va7J1tIjZ6PxbOqPl57jSp5lNLOZSueHPmrUuUx5sRY,6462
197
197
  strawberry/tools/__init__.py,sha256=pdGpZx8wpq03VfUZJyF9JtYxZhGqzzxCiipsalWxJX4,127
@@ -229,9 +229,9 @@ strawberry/utils/inspect.py,sha256=2WOeK3o8pjVkIH-rP_TaaLDa_AvroKC1WXc0gSE0Suc,3
229
229
  strawberry/utils/logging.py,sha256=U1cseHGquN09YFhFmRkiphfASKCyK0HUZREImPgVb0c,746
230
230
  strawberry/utils/operation.py,sha256=SSXxN-vMqdHO6W2OZtip-1z7y4_A-eTVFdhDvhKeLCk,1193
231
231
  strawberry/utils/str_converters.py,sha256=KGd7QH90RevaJjH6SQEkiVVsb8KuhJr_wv5AsI7UzQk,897
232
- strawberry/utils/typing.py,sha256=3xws5kxSQGsp8BnYyUwClvxXNzZakMAuOPoq1rjHRuk,14252
233
- strawberry_graphql-0.247.2.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
234
- strawberry_graphql-0.247.2.dist-info/METADATA,sha256=UNSXeMuxxVcoA8hC-8-CP-I7jeo-4R8Syg8W-kIA-ZE,7758
235
- strawberry_graphql-0.247.2.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
236
- strawberry_graphql-0.247.2.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
237
- strawberry_graphql-0.247.2.dist-info/RECORD,,
232
+ strawberry/utils/typing.py,sha256=G6k2wWD1TDQ9WFk-Togekj_hTVFqHV-g7Phf2Wu41ms,14380
233
+ strawberry_graphql-0.248.1.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
234
+ strawberry_graphql-0.248.1.dist-info/METADATA,sha256=4QSuJdbk6cKZOzgkTHqSSja1u2TpyxIH1XdfBysw-5E,7758
235
+ strawberry_graphql-0.248.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
236
+ strawberry_graphql-0.248.1.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
237
+ strawberry_graphql-0.248.1.dist-info/RECORD,,