strawberry-graphql 0.254.0__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.
@@ -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,
@@ -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
@@ -281,8 +290,8 @@ class AsyncBaseHTTPView(
281
290
  await self.graphql_transport_ws_handler_class(
282
291
  view=self,
283
292
  websocket=websocket,
284
- context=context,
285
- root_value=root_value,
293
+ context=context, # type: ignore
294
+ root_value=root_value, # type: ignore
286
295
  schema=self.schema,
287
296
  debug=self.debug,
288
297
  connection_init_wait_timeout=self.connection_init_wait_timeout,
@@ -291,8 +300,8 @@ class AsyncBaseHTTPView(
291
300
  await self.graphql_ws_handler_class(
292
301
  view=self,
293
302
  websocket=websocket,
294
- context=context,
295
- root_value=root_value,
303
+ context=context, # type: ignore
304
+ root_value=root_value, # type: ignore
296
305
  schema=self.schema,
297
306
  debug=self.debug,
298
307
  keep_alive=self.keep_alive,
@@ -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,
@@ -20,6 +22,7 @@ from strawberry.http.exceptions import (
20
22
  NonTextMessageReceived,
21
23
  WebSocketDisconnected,
22
24
  )
25
+ from strawberry.http.typevars import Context, RootValue
23
26
  from strawberry.subscriptions.protocols.graphql_transport_ws.types import (
24
27
  CompleteMessage,
25
28
  ConnectionInitMessage,
@@ -44,15 +47,15 @@ if TYPE_CHECKING:
44
47
  from strawberry.schema.subscribe import SubscriptionResult
45
48
 
46
49
 
47
- class BaseGraphQLTransportWSHandler:
50
+ class BaseGraphQLTransportWSHandler(Generic[Context, RootValue]):
48
51
  task_logger: logging.Logger = logging.getLogger("strawberry.ws.task")
49
52
 
50
53
  def __init__(
51
54
  self,
52
- view: AsyncBaseHTTPView,
55
+ view: AsyncBaseHTTPView[Any, Any, Any, Any, Any, Context, RootValue],
53
56
  websocket: AsyncWebSocketAdapter,
54
- context: object,
55
- root_value: object,
57
+ context: Context,
58
+ root_value: RootValue,
56
59
  schema: BaseSchema,
57
60
  debug: bool,
58
61
  connection_init_wait_timeout: timedelta,
@@ -68,7 +71,7 @@ class BaseGraphQLTransportWSHandler:
68
71
  self.connection_init_received = False
69
72
  self.connection_acknowledged = False
70
73
  self.connection_timed_out = False
71
- self.operations: Dict[str, Operation] = {}
74
+ self.operations: Dict[str, Operation[Context, RootValue]] = {}
72
75
  self.completed_tasks: List[asyncio.Task] = []
73
76
 
74
77
  async def handle(self) -> None:
@@ -184,6 +187,8 @@ class BaseGraphQLTransportWSHandler:
184
187
  elif hasattr(self.context, "connection_params"):
185
188
  self.context.connection_params = payload
186
189
 
190
+ self.context = cast(Context, self.context)
191
+
187
192
  try:
188
193
  connection_ack_payload = await self.view.on_ws_connect(self.context)
189
194
  except ConnectionRejectionError:
@@ -250,7 +255,7 @@ class BaseGraphQLTransportWSHandler:
250
255
  operation.task = asyncio.create_task(self.run_operation(operation))
251
256
  self.operations[message["id"]] = operation
252
257
 
253
- async def run_operation(self, operation: Operation) -> None:
258
+ async def run_operation(self, operation: Operation[Context, RootValue]) -> None:
254
259
  """The operation task's top level method. Cleans-up and de-registers the operation once it is done."""
255
260
  # TODO: Handle errors in this method using self.handle_task_exception()
256
261
 
@@ -334,7 +339,7 @@ class BaseGraphQLTransportWSHandler:
334
339
  await task
335
340
 
336
341
 
337
- class Operation:
342
+ class Operation(Generic[Context, RootValue]):
338
343
  """A class encapsulating a single operation with its id. Helps enforce protocol state transition."""
339
344
 
340
345
  __slots__ = [
@@ -350,7 +355,7 @@ class Operation:
350
355
 
351
356
  def __init__(
352
357
  self,
353
- handler: BaseGraphQLTransportWSHandler,
358
+ handler: BaseGraphQLTransportWSHandler[Context, RootValue],
354
359
  id: str,
355
360
  operation_type: OperationType,
356
361
  query: str,
@@ -4,14 +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
 
13
15
  from strawberry.exceptions import ConnectionRejectionError
14
16
  from strawberry.http.exceptions import NonTextMessageReceived, WebSocketDisconnected
17
+ from strawberry.http.typevars import Context, RootValue
15
18
  from strawberry.subscriptions.protocols.graphql_ws.types import (
16
19
  ConnectionInitMessage,
17
20
  ConnectionTerminateMessage,
@@ -29,13 +32,16 @@ if TYPE_CHECKING:
29
32
  from strawberry.schema import BaseSchema
30
33
 
31
34
 
32
- class BaseGraphQLWSHandler:
35
+ class BaseGraphQLWSHandler(Generic[Context, RootValue]):
36
+ context: Context
37
+ root_value: RootValue
38
+
33
39
  def __init__(
34
40
  self,
35
- view: AsyncBaseHTTPView,
41
+ view: AsyncBaseHTTPView[Any, Any, Any, Any, Any, Context, RootValue],
36
42
  websocket: AsyncWebSocketAdapter,
37
- context: object,
38
- root_value: object,
43
+ context: Context,
44
+ root_value: RootValue,
39
45
  schema: BaseSchema,
40
46
  debug: bool,
41
47
  keep_alive: bool,
@@ -100,6 +106,8 @@ class BaseGraphQLWSHandler:
100
106
  elif hasattr(self.context, "connection_params"):
101
107
  self.context.connection_params = payload
102
108
 
109
+ self.context = cast(Context, self.context)
110
+
103
111
  try:
104
112
  connection_ack_payload = await self.view.on_ws_connect(self.context)
105
113
  except ConnectionRejectionError as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strawberry-graphql
3
- Version: 0.254.0
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
@@ -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=IyrTJRi-MdDF_v0ZcVVoBzxWUBPFiTjdAnOFMNBahwQ,16071
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,10 +186,10 @@ 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=F3CLtF5KWwaGQO7_dWhs4R-4VjAtyPXbGFcW6IND9V8,14578
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=l3hnX48WNdmbKHVg4zygV8vw45ORfma9o6oJffvmFco,7850
192
+ strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=Pt4RGGl9_cghKT2aftcik4YSnFDKwWAe7Z9pBvLGc5k,8106
193
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
@@ -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.254.0.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
233
- strawberry_graphql-0.254.0.dist-info/METADATA,sha256=xifgSk7zQGPc4EcWySXXewvAp1mtCv06oLd_wOFXlQM,7758
234
- strawberry_graphql-0.254.0.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
235
- strawberry_graphql-0.254.0.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
236
- strawberry_graphql-0.254.0.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,,