Skip to content

Commit 7ddaf9f

Browse files
committed
Handle coroutine results from resolvers in connections and filter connections
1 parent 28846f9 commit 7ddaf9f

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

graphene_django/fields.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,20 @@ def connection_resolver(
239239

240240
iterable = resolver(root, info, **args)
241241

242+
if info.is_awaitable(iterable):
243+
async def resolve_connection_async():
244+
iterable = await iterable
245+
if iterable is None:
246+
iterable = default_manager
247+
## This could also be async
248+
iterable = queryset_resolver(connection, iterable, info, args)
249+
250+
if info.is_awaitable(iterable):
251+
iterable = await iterable
252+
253+
return await sync_to_async(cls.resolve_connection)(connection, args, iterable, max_limit=max_limit)
254+
return resolve_connection_async()
255+
242256
if iterable is None:
243257
iterable = default_manager
244258
# thus the iterable gets refiltered by resolve_queryset

graphene_django/filter/fields.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
from graphene.types.argument import to_arguments
88
from graphene.utils.str_converters import to_snake_case
99

10+
from asgiref.sync import sync_to_async
11+
1012
from ..fields import DjangoConnectionField
1113
from .utils import get_filtering_args_from_filterset, get_filterset_class
1214

@@ -92,6 +94,16 @@ def filter_kwargs():
9294

9395
qs = super().resolve_queryset(connection, iterable, info, args)
9496

97+
if info.is_awaitable(qs):
98+
async def filter_async():
99+
filterset = filterset_class(
100+
data=filter_kwargs(), queryset=await qs, request=info.context
101+
)
102+
if await sync_to_async(filterset.is_valid)():
103+
return filterset.qs
104+
raise ValidationError(filterset.form.errors.as_json())
105+
return filter_async()
106+
95107
filterset = filterset_class(
96108
data=filter_kwargs(), queryset=qs, request=info.context
97109
)

0 commit comments

Comments
 (0)