mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-07-01 10:53:13 +03:00
Handle coroutine results from resolvers in connections and filter connections
This commit is contained in:
parent
28846f9ac9
commit
7ddaf9f5e6
|
@ -239,6 +239,20 @@ class DjangoConnectionField(ConnectionField):
|
|||
|
||||
iterable = resolver(root, info, **args)
|
||||
|
||||
if info.is_awaitable(iterable):
|
||||
async def resolve_connection_async():
|
||||
iterable = await iterable
|
||||
if iterable is None:
|
||||
iterable = default_manager
|
||||
## This could also be async
|
||||
iterable = queryset_resolver(connection, iterable, info, args)
|
||||
|
||||
if info.is_awaitable(iterable):
|
||||
iterable = await iterable
|
||||
|
||||
return await sync_to_async(cls.resolve_connection)(connection, args, iterable, max_limit=max_limit)
|
||||
return resolve_connection_async()
|
||||
|
||||
if iterable is None:
|
||||
iterable = default_manager
|
||||
# thus the iterable gets refiltered by resolve_queryset
|
||||
|
|
|
@ -7,6 +7,8 @@ from graphene.types.enum import EnumType
|
|||
from graphene.types.argument import to_arguments
|
||||
from graphene.utils.str_converters import to_snake_case
|
||||
|
||||
from asgiref.sync import sync_to_async
|
||||
|
||||
from ..fields import DjangoConnectionField
|
||||
from .utils import get_filtering_args_from_filterset, get_filterset_class
|
||||
|
||||
|
@ -92,6 +94,16 @@ class DjangoFilterConnectionField(DjangoConnectionField):
|
|||
|
||||
qs = super().resolve_queryset(connection, iterable, info, args)
|
||||
|
||||
if info.is_awaitable(qs):
|
||||
async def filter_async():
|
||||
filterset = filterset_class(
|
||||
data=filter_kwargs(), queryset=await qs, request=info.context
|
||||
)
|
||||
if await sync_to_async(filterset.is_valid)():
|
||||
return filterset.qs
|
||||
raise ValidationError(filterset.form.errors.as_json())
|
||||
return filter_async()
|
||||
|
||||
filterset = filterset_class(
|
||||
data=filter_kwargs(), queryset=qs, request=info.context
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue
Block a user