mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-02-22 22:53:05 +03:00
handle connections without middleware
This commit is contained in:
parent
8c068fbc2b
commit
d3f8fcf906
|
@ -104,16 +104,6 @@ class DjangoSyncRequiredMiddleware:
|
||||||
):
|
):
|
||||||
return sync_to_async(next)(root, info, **args)
|
return sync_to_async(next)(root, info, **args)
|
||||||
|
|
||||||
## We can move this resolver logic into the field resolver itself and probably should
|
|
||||||
if hasattr(return_type, "graphene_type"):
|
|
||||||
if hasattr(return_type.graphene_type, "Edge"):
|
|
||||||
node_type = return_type.graphene_type.Edge.node.type
|
|
||||||
if hasattr(node_type, "_meta") and hasattr(node_type._meta, "model"):
|
|
||||||
if not inspect.iscoroutinefunction(
|
|
||||||
next
|
|
||||||
) and not inspect.isasyncgenfunction(next):
|
|
||||||
return sync_to_async(next)(root, info, **args)
|
|
||||||
|
|
||||||
if info.parent_type.name == "Mutation":
|
if info.parent_type.name == "Mutation":
|
||||||
if not inspect.iscoroutinefunction(next) and not inspect.isasyncgenfunction(
|
if not inspect.iscoroutinefunction(next) and not inspect.isasyncgenfunction(
|
||||||
next
|
next
|
||||||
|
|
|
@ -270,6 +270,17 @@ class DjangoConnectionField(ConnectionField):
|
||||||
|
|
||||||
# eventually leads to DjangoObjectType's get_queryset (accepts queryset)
|
# eventually leads to DjangoObjectType's get_queryset (accepts queryset)
|
||||||
# or a resolve_foo (does not accept queryset)
|
# or a resolve_foo (does not accept queryset)
|
||||||
|
|
||||||
|
try:
|
||||||
|
get_running_loop()
|
||||||
|
except RuntimeError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if not inspect.iscoroutinefunction(
|
||||||
|
resolver
|
||||||
|
) and not inspect.isasyncgenfunction(resolver):
|
||||||
|
resolver = sync_to_async(resolver)
|
||||||
|
|
||||||
iterable = resolver(root, info, **args)
|
iterable = resolver(root, info, **args)
|
||||||
|
|
||||||
if info.is_awaitable(iterable):
|
if info.is_awaitable(iterable):
|
||||||
|
@ -293,17 +304,24 @@ class DjangoConnectionField(ConnectionField):
|
||||||
iterable = default_manager
|
iterable = default_manager
|
||||||
# thus the iterable gets refiltered by resolve_queryset
|
# thus the iterable gets refiltered by resolve_queryset
|
||||||
# but iterable might be promise
|
# but iterable might be promise
|
||||||
iterable = queryset_resolver(connection, iterable, info, args)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
get_running_loop()
|
get_running_loop()
|
||||||
except RuntimeError:
|
except RuntimeError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
return sync_to_async(cls.resolve_connection)(
|
|
||||||
|
async def perform_resolve(iterable):
|
||||||
|
iterable = await sync_to_async(queryset_resolver)(
|
||||||
|
connection, iterable, info, args
|
||||||
|
)
|
||||||
|
return await sync_to_async(cls.resolve_connection)(
|
||||||
connection, args, iterable, max_limit=max_limit
|
connection, args, iterable, max_limit=max_limit
|
||||||
)
|
)
|
||||||
|
|
||||||
|
return perform_resolve(iterable)
|
||||||
|
|
||||||
|
iterable = queryset_resolver(connection, iterable, info, args)
|
||||||
return cls.resolve_connection(connection, args, iterable, max_limit=max_limit)
|
return cls.resolve_connection(connection, args, iterable, max_limit=max_limit)
|
||||||
|
|
||||||
def wrap_resolve(self, parent_resolver):
|
def wrap_resolve(self, parent_resolver):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user