Skip to content

Commit a929e3f

Browse files
committed
Update types
1 parent fd26cc0 commit a929e3f

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

RELEASE.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
Release type: patch
2+
3+
This release updates the typing for the resolver argument in
4+
`strawberry.field`i to support async resolvers.
5+
This means that now you won't get any type
6+
error from Pyright when using async resolver, like the following example:
7+
8+
```python
9+
import strawberry
10+
11+
12+
async def get_user_age() -> int:
13+
return 0
14+
15+
16+
@strawberry.type
17+
class User:
18+
name: str
19+
age: int = strawberry.field(resolver=get_user_age)
20+
```

strawberry/field.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
_RESOLVER_TYPE = Union[
4040
StrawberryResolver[T],
4141
Callable[..., T],
42+
Callable[..., Awaitable[T]],
4243
"staticmethod[T]",
4344
"classmethod[T]",
4445
]
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from .utils import Result, requires_pyright, run_pyright, skip_on_windows
2+
3+
pytestmark = [skip_on_windows, requires_pyright]
4+
5+
CODE = """
6+
import strawberry
7+
8+
async def get_user_age() -> int:
9+
return 0
10+
11+
12+
@strawberry.type
13+
class User:
14+
name: str
15+
age: int = strawberry.field(resolver=get_user_age)
16+
17+
18+
User(name="Patrick")
19+
User(n="Patrick")
20+
21+
reveal_type(User)
22+
reveal_type(User.__init__)
23+
"""
24+
25+
26+
def test_pyright():
27+
results = run_pyright(CODE)
28+
29+
assert results == [
30+
Result(
31+
type="error",
32+
message='No parameter named "n" (reportGeneralTypeIssues)',
33+
line=15,
34+
column=6,
35+
),
36+
Result(
37+
type="error",
38+
message='Argument missing for parameter "name" (reportGeneralTypeIssues)',
39+
line=15,
40+
column=1,
41+
),
42+
Result(
43+
type="information",
44+
message='Type of "User" is "Type[User]"',
45+
line=17,
46+
column=13,
47+
),
48+
Result(
49+
type="information",
50+
message='Type of "User.__init__" is "(self: User, *, name: str) -> None"',
51+
line=18,
52+
column=13,
53+
),
54+
]

0 commit comments

Comments
 (0)