strawberry-graphql 0.260.2__py3-none-any.whl → 0.260.4__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.
@@ -5,11 +5,19 @@ from functools import cached_property
5
5
  from inspect import isawaitable
6
6
  from typing import TYPE_CHECKING, Any, Callable, Optional
7
7
 
8
- from ddtrace import Span, tracer
8
+ import ddtrace
9
+ from packaging import version
9
10
 
10
11
  from strawberry.extensions import LifecycleStep, SchemaExtension
11
12
  from strawberry.extensions.tracing.utils import should_skip_tracing
12
13
 
14
+ parsed_ddtrace_version = version.parse(ddtrace.__version__)
15
+ if parsed_ddtrace_version >= version.parse("3.0.0"):
16
+ from ddtrace.trace import Span, tracer
17
+ else:
18
+ from ddtrace import Span, tracer
19
+
20
+
13
21
  if TYPE_CHECKING:
14
22
  from collections.abc import Generator, Iterator
15
23
 
@@ -15,22 +15,59 @@ from strawberry.types.field import field as base_field
15
15
  from strawberry.types.unset import UNSET
16
16
 
17
17
  if TYPE_CHECKING:
18
- from collections.abc import Iterable, Sequence
18
+ from collections.abc import Iterable, Mapping, Sequence
19
19
  from typing_extensions import Literal
20
20
 
21
21
  from strawberry.extensions.field_extension import FieldExtension
22
22
  from strawberry.permission import BasePermission
23
- from strawberry.types.field import _RESOLVER_TYPE, StrawberryField
23
+ from strawberry.types.field import (
24
+ _RESOLVER_TYPE,
25
+ _RESOLVER_TYPE_ASYNC,
26
+ _RESOLVER_TYPE_SYNC,
27
+ StrawberryField,
28
+ )
24
29
 
25
30
  from .schema_directives import Override
26
31
 
27
32
  T = TypeVar("T")
28
33
 
34
+ # NOTE: we are separating the sync and async resolvers because using both
35
+ # in the same function will cause mypy to raise an error. Not sure if it is a bug
36
+
37
+
38
+ @overload
39
+ def field(
40
+ *,
41
+ resolver: _RESOLVER_TYPE_ASYNC[T],
42
+ name: Optional[str] = None,
43
+ is_subscription: bool = False,
44
+ description: Optional[str] = None,
45
+ authenticated: bool = False,
46
+ external: bool = False,
47
+ inaccessible: bool = False,
48
+ policy: Optional[list[list[str]]] = None,
49
+ provides: Optional[list[str]] = None,
50
+ override: Optional[Union[Override, str]] = None,
51
+ requires: Optional[list[str]] = None,
52
+ requires_scopes: Optional[list[list[str]]] = None,
53
+ tags: Optional[Iterable[str]] = (),
54
+ shareable: bool = False,
55
+ init: Literal[False] = False,
56
+ permission_classes: Optional[list[type[BasePermission]]] = None,
57
+ deprecation_reason: Optional[str] = None,
58
+ default: Any = dataclasses.MISSING,
59
+ default_factory: Union[Callable[..., object], object] = dataclasses.MISSING,
60
+ metadata: Optional[Mapping[Any, Any]] = None,
61
+ directives: Optional[Sequence[object]] = (),
62
+ extensions: Optional[list[FieldExtension]] = None,
63
+ graphql_type: Optional[Any] = None,
64
+ ) -> T: ...
65
+
29
66
 
30
67
  @overload
31
68
  def field(
32
69
  *,
33
- resolver: _RESOLVER_TYPE[T],
70
+ resolver: _RESOLVER_TYPE_SYNC[T],
34
71
  name: Optional[str] = None,
35
72
  is_subscription: bool = False,
36
73
  description: Optional[str] = None,
@@ -47,9 +84,10 @@ def field(
47
84
  init: Literal[False] = False,
48
85
  permission_classes: Optional[list[type[BasePermission]]] = None,
49
86
  deprecation_reason: Optional[str] = None,
50
- default: Any = UNSET,
51
- default_factory: Union[Callable[..., object], object] = UNSET,
52
- directives: Sequence[object] = (),
87
+ default: Any = dataclasses.MISSING,
88
+ default_factory: Union[Callable[..., object], object] = dataclasses.MISSING,
89
+ metadata: Optional[Mapping[Any, Any]] = None,
90
+ directives: Optional[Sequence[object]] = (),
53
91
  extensions: Optional[list[FieldExtension]] = None,
54
92
  graphql_type: Optional[Any] = None,
55
93
  ) -> T: ...
@@ -74,9 +112,10 @@ def field(
74
112
  init: Literal[True] = True,
75
113
  permission_classes: Optional[list[type[BasePermission]]] = None,
76
114
  deprecation_reason: Optional[str] = None,
77
- default: Any = UNSET,
78
- default_factory: Union[Callable[..., object], object] = UNSET,
79
- directives: Sequence[object] = (),
115
+ default: Any = dataclasses.MISSING,
116
+ default_factory: Union[Callable[..., object], object] = dataclasses.MISSING,
117
+ metadata: Optional[Mapping[Any, Any]] = None,
118
+ directives: Optional[Sequence[object]] = (),
80
119
  extensions: Optional[list[FieldExtension]] = None,
81
120
  graphql_type: Optional[Any] = None,
82
121
  ) -> Any: ...
@@ -84,7 +123,7 @@ def field(
84
123
 
85
124
  @overload
86
125
  def field(
87
- resolver: _RESOLVER_TYPE[T],
126
+ resolver: _RESOLVER_TYPE_ASYNC[T],
88
127
  *,
89
128
  name: Optional[str] = None,
90
129
  is_subscription: bool = False,
@@ -101,9 +140,38 @@ def field(
101
140
  shareable: bool = False,
102
141
  permission_classes: Optional[list[type[BasePermission]]] = None,
103
142
  deprecation_reason: Optional[str] = None,
104
- default: Any = UNSET,
105
- default_factory: Union[Callable[..., object], object] = UNSET,
106
- directives: Sequence[object] = (),
143
+ default: Any = dataclasses.MISSING,
144
+ default_factory: Union[Callable[..., object], object] = dataclasses.MISSING,
145
+ metadata: Optional[Mapping[Any, Any]] = None,
146
+ directives: Optional[Sequence[object]] = (),
147
+ extensions: Optional[list[FieldExtension]] = None,
148
+ graphql_type: Optional[Any] = None,
149
+ ) -> StrawberryField: ...
150
+
151
+
152
+ @overload
153
+ def field(
154
+ resolver: _RESOLVER_TYPE_SYNC[T],
155
+ *,
156
+ name: Optional[str] = None,
157
+ is_subscription: bool = False,
158
+ description: Optional[str] = None,
159
+ authenticated: bool = False,
160
+ external: bool = False,
161
+ inaccessible: bool = False,
162
+ policy: Optional[list[list[str]]] = None,
163
+ provides: Optional[list[str]] = None,
164
+ override: Optional[Union[Override, str]] = None,
165
+ requires: Optional[list[str]] = None,
166
+ requires_scopes: Optional[list[list[str]]] = None,
167
+ tags: Optional[Iterable[str]] = (),
168
+ shareable: bool = False,
169
+ permission_classes: Optional[list[type[BasePermission]]] = None,
170
+ deprecation_reason: Optional[str] = None,
171
+ default: Any = dataclasses.MISSING,
172
+ default_factory: Union[Callable[..., object], object] = dataclasses.MISSING,
173
+ metadata: Optional[Mapping[Any, Any]] = None,
174
+ directives: Optional[Sequence[object]] = (),
107
175
  extensions: Optional[list[FieldExtension]] = None,
108
176
  graphql_type: Optional[Any] = None,
109
177
  ) -> StrawberryField: ...
@@ -129,7 +197,8 @@ def field(
129
197
  deprecation_reason: Optional[str] = None,
130
198
  default: Any = dataclasses.MISSING,
131
199
  default_factory: Union[Callable[..., object], object] = dataclasses.MISSING,
132
- directives: Sequence[object] = (),
200
+ metadata: Optional[Mapping[Any, Any]] = None,
201
+ directives: Optional[Sequence[object]] = (),
133
202
  extensions: Optional[list[FieldExtension]] = None,
134
203
  graphql_type: Optional[Any] = None,
135
204
  # This init parameter is used by PyRight to determine whether this field
@@ -150,7 +219,7 @@ def field(
150
219
  Tag,
151
220
  )
152
221
 
153
- directives = list(directives)
222
+ directives = list(directives or [])
154
223
 
155
224
  if authenticated:
156
225
  directives.append(Authenticated())
@@ -197,6 +266,7 @@ def field(
197
266
  default_factory=default_factory,
198
267
  init=init, # type: ignore
199
268
  directives=directives,
269
+ metadata=metadata,
200
270
  extensions=extensions,
201
271
  graphql_type=graphql_type,
202
272
  )
@@ -386,7 +386,7 @@ def connection(
386
386
  default_factory: Union[Callable[..., object], object] = dataclasses.MISSING,
387
387
  metadata: Optional[Mapping[Any, Any]] = None,
388
388
  directives: Optional[Sequence[object]] = (),
389
- extensions: list[FieldExtension] = (), # type: ignore
389
+ extensions: list[FieldExtension] | None = None,
390
390
  max_results: Optional[int] = None,
391
391
  # This init parameter is used by pyright to determine whether this field
392
392
  # is added in the constructor or not. It is not used to change
@@ -473,6 +473,7 @@ def connection(
473
473
  https://relay.dev/graphql/connections.htm
474
474
 
475
475
  """
476
+ extensions = extensions or []
476
477
  f = StrawberryField(
477
478
  python_name=None,
478
479
  graphql_name=name,
@@ -76,8 +76,7 @@ class BaseGraphQLWSHandler(Generic[Context, RootValue]):
76
76
  with suppress(BaseException):
77
77
  await self.keep_alive_task
78
78
 
79
- for operation_id in list(self.subscriptions.keys()):
80
- await self.cleanup_operation(operation_id)
79
+ await self.cleanup()
81
80
 
82
81
  async def handle_message(
83
82
  self,
@@ -202,6 +201,10 @@ class BaseGraphQLWSHandler(Generic[Context, RootValue]):
202
201
  await self.tasks[operation_id]
203
202
  del self.tasks[operation_id]
204
203
 
204
+ async def cleanup(self) -> None:
205
+ for operation_id in list(self.tasks.keys()):
206
+ await self.cleanup_operation(operation_id)
207
+
205
208
  async def send_data_message(
206
209
  self, execution_result: ExecutionResult, operation_id: str
207
210
  ) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: strawberry-graphql
3
- Version: 0.260.2
3
+ Version: 0.260.4
4
4
  Summary: A library for creating GraphQL APIs
5
5
  License: MIT
6
6
  Keywords: graphql,api,rest,starlette,async
@@ -103,7 +103,7 @@ strawberry/extensions/query_depth_limiter.py,sha256=qhVLfZTpp1gpx4O6Qe6bpNBWO7tI
103
103
  strawberry/extensions/runner.py,sha256=LCUSzKUrwTYhoIr1nS8uFDN15_YEQ_3BFK1zpPfOfsA,1873
104
104
  strawberry/extensions/tracing/__init__.py,sha256=igoDJBlfh7vGhytJ5njx1qQzpxZOUmdfIaH4j5Kmt3E,1112
105
105
  strawberry/extensions/tracing/apollo.py,sha256=GONBVew2K4j3clAHrVYfIMDQTLAwFtag-uBaYI2yqfk,5900
106
- strawberry/extensions/tracing/datadog.py,sha256=9hICpmLWKj7dWNRECGHc3TVX69SI9arbwm4GBu9z_Dg,5587
106
+ strawberry/extensions/tracing/datadog.py,sha256=-5zVf5JSjujzNJQvpu7EANumhL1qeMET2ffjmaf8AU4,5800
107
107
  strawberry/extensions/tracing/opentelemetry.py,sha256=4czsWhJnwXbFii3vs4kqKD7r0iOakvnlGr2dlsQ7OwI,7207
108
108
  strawberry/extensions/tracing/utils.py,sha256=tXZNyqfct6YNSWi3GRj4GU1fKQGvSce8ZESfoVeys7U,654
109
109
  strawberry/extensions/utils.py,sha256=sjhxItHzbDhqHtnR63WbE35qzHhTyf9NSffidet79Hc,995
@@ -114,7 +114,7 @@ strawberry/fastapi/router.py,sha256=4CqapWgqma_mU-s7TpFhpJwlO7UzBClAgouD7HN8NKs,
114
114
  strawberry/federation/__init__.py,sha256=Pw01N0rG9o0NaUxXLMNGeW5oLENeWVx_d8Kuef1ES4s,549
115
115
  strawberry/federation/argument.py,sha256=rs71S1utiNUd4XOLRa9KVtSMA3yqvKJnR_qdJqX6PPM,860
116
116
  strawberry/federation/enum.py,sha256=MdtblT4Z8_-2L8gUdo0ROnw3aY8RAAtTvyfHbCBBPrA,3033
117
- strawberry/federation/field.py,sha256=QMMxKP4F3ZsedpT-Tfi-K-2mg-t8zA9ZFibq-SuA0eM,6215
117
+ strawberry/federation/field.py,sha256=pcFgl33xgJcunb6TxfOPuzsAQTGbbzjKi41SUUSV3w4,8914
118
118
  strawberry/federation/mutation.py,sha256=5t2E419m4K2W6LoWEOzWgMdL2J0PwHnsffYkpChqqDQ,67
119
119
  strawberry/federation/object_type.py,sha256=tuUn_YqtOcvivVSHrXESSFr2kae79xW_SLUV3oNINdE,9381
120
120
  strawberry/federation/scalar.py,sha256=sOVmhYnogew6hP6-7PQMMYQHHWE-BEyo52BT7_IYGiw,4649
@@ -152,7 +152,7 @@ strawberry/quart/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
152
152
  strawberry/quart/views.py,sha256=Xo7n5cu85fUZW-SGKTbZ4e4UuFrQvRb9PkMPjk0uPSM,4431
153
153
  strawberry/relay/__init__.py,sha256=Vi4btvA_g6Cj9Tk_F9GCSegapIf2WqkOWV8y3P0cTCs,553
154
154
  strawberry/relay/exceptions.py,sha256=KjqzBhOo4qp38GZ7O8aRtAb82sijc1wJKllhGFaRvt4,4029
155
- strawberry/relay/fields.py,sha256=wAee3lZE4dCbyzQEFaRpWGq6xBQmbEcv7JoxH83A0nk,18059
155
+ strawberry/relay/fields.py,sha256=3J5py9uXGDowSxlG-NvwjTquw1abUIUtgyZd8egGtD4,18086
156
156
  strawberry/relay/types.py,sha256=0JFO3HYGM1YlRQ11ZGiL89WLr5cvLMN_PMSEC0Vv2n4,30168
157
157
  strawberry/relay/utils.py,sha256=OqeeTy_3TFMjmERnCNleUpW3bFf-yuQDzra8l5PNlyY,5817
158
158
  strawberry/resolvers.py,sha256=Vdidc3YFc4-olSQZD_xQ1icyAFbyzqs_8I3eSpMFlA4,260
@@ -187,7 +187,7 @@ strawberry/subscriptions/protocols/graphql_transport_ws/__init__.py,sha256=wN6dk
187
187
  strawberry/subscriptions/protocols/graphql_transport_ws/handlers.py,sha256=wqE30sf07aaZwM1DYtHdOgcJuRiYiAPwAZ5LpA7Me-g,14931
188
188
  strawberry/subscriptions/protocols/graphql_transport_ws/types.py,sha256=N9r2mXg5jmmjYoZV5rWf3lAzgylCOUrbKGmClXCoOso,2169
189
189
  strawberry/subscriptions/protocols/graphql_ws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
- strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=CsZJKyvxxcanTo1fu_zqCGDc2ASJqGai4s7Uwc8e_p0,8119
190
+ strawberry/subscriptions/protocols/graphql_ws/handlers.py,sha256=ZJ790BiXuUc8or3DdRcTukJMHMETkkzUi7jmmUuSoNM,8174
191
191
  strawberry/subscriptions/protocols/graphql_ws/types.py,sha256=Uumiz-1O5qQnx-ERBaQtaf7db5yx-V9LMypOn9oGKwM,2003
192
192
  strawberry/test/__init__.py,sha256=lKVbKJDBnrYSPYHIKrg54UpaZcSoL93Z01zOpA1IzZM,115
193
193
  strawberry/test/client.py,sha256=ILAttb6A3jplH5wJNMeyyT1u_Q8KnollfpYLP_BVZR4,6438
@@ -228,8 +228,8 @@ strawberry/utils/logging.py,sha256=U1cseHGquN09YFhFmRkiphfASKCyK0HUZREImPgVb0c,7
228
228
  strawberry/utils/operation.py,sha256=SSXxN-vMqdHO6W2OZtip-1z7y4_A-eTVFdhDvhKeLCk,1193
229
229
  strawberry/utils/str_converters.py,sha256=-eH1Cl16IO_wrBlsGM-km4IY0IKsjhjnSNGRGOwQjVM,897
230
230
  strawberry/utils/typing.py,sha256=Ux0Hl46lhuXvOKK-C5hj6nlz3zDn8P4CUGH2nUVD2vU,13373
231
- strawberry_graphql-0.260.2.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
232
- strawberry_graphql-0.260.2.dist-info/METADATA,sha256=rmiNESgOWHoH9dBpw6p66qztTShT-VZifhel1rgGqj0,7539
233
- strawberry_graphql-0.260.2.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
234
- strawberry_graphql-0.260.2.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
235
- strawberry_graphql-0.260.2.dist-info/RECORD,,
231
+ strawberry_graphql-0.260.4.dist-info/LICENSE,sha256=m-XnIVUKqlG_AWnfi9NReh9JfKhYOB-gJfKE45WM1W8,1072
232
+ strawberry_graphql-0.260.4.dist-info/METADATA,sha256=SjBQ_1CMFk8FTGTww7hfjll7xXFu0eJzhHHr21YobMQ,7539
233
+ strawberry_graphql-0.260.4.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
234
+ strawberry_graphql-0.260.4.dist-info/entry_points.txt,sha256=Nk7-aT3_uEwCgyqtHESV9H6Mc31cK-VAvhnQNTzTb4k,49
235
+ strawberry_graphql-0.260.4.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.0.1
2
+ Generator: poetry-core 2.1.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any