mirror of
https://github.com/graphql-python/graphene-django.git
synced 2025-04-26 03:53:46 +03:00
Add DataLoaderField
This commit is contained in:
parent
200353d014
commit
ee50031cf6
|
@ -1,13 +1,11 @@
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from django.db.models.query import QuerySet
|
from django.db.models.query import QuerySet
|
||||||
|
|
||||||
from promise import Promise
|
|
||||||
|
|
||||||
from graphene.types import Field, List
|
from graphene.types import Field, List
|
||||||
from graphene.relay import ConnectionField, PageInfo
|
from graphene.relay import ConnectionField, PageInfo
|
||||||
from graphene.utils.get_unbound_function import get_unbound_function
|
from graphene.utils.get_unbound_function import get_unbound_function
|
||||||
from graphql_relay.connection.arrayconnection import connection_from_list_slice
|
from graphql_relay.connection.arrayconnection import connection_from_list_slice
|
||||||
|
from promise import Promise
|
||||||
|
|
||||||
from .settings import graphene_settings
|
from .settings import graphene_settings
|
||||||
from .utils import maybe_queryset, auth_resolver
|
from .utils import maybe_queryset, auth_resolver
|
||||||
|
@ -170,3 +168,27 @@ class DjangoField(Field):
|
||||||
return partial(get_unbound_function(self.permissions_resolver), parent_resolver, self.permissions, None,
|
return partial(get_unbound_function(self.permissions_resolver), parent_resolver, self.permissions, None,
|
||||||
None, True)
|
None, True)
|
||||||
return parent_resolver
|
return parent_resolver
|
||||||
|
|
||||||
|
|
||||||
|
class DataLoaderField(DjangoField):
|
||||||
|
"""Class to manage access to dataloader when resolve the field"""
|
||||||
|
|
||||||
|
def __init__(self, data_loader, source_loader, type, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
Initialization of dataloader to resolve field
|
||||||
|
:param data_loader: dataloader to resolve field
|
||||||
|
:param source_loader: field to obtain the key for dataloading
|
||||||
|
:param kwargs: Extra arguments
|
||||||
|
"""
|
||||||
|
self.data_loader = data_loader
|
||||||
|
self.source_loader = source_loader
|
||||||
|
|
||||||
|
super(DataLoaderField, self).__init__(type, *args, **kwargs)
|
||||||
|
|
||||||
|
# If no resolver is explicitly provided, use dataloader
|
||||||
|
self.resolver = self.resolver or self.resolver_data_loader
|
||||||
|
|
||||||
|
def resolver_data_loader(self, root, info, *args):
|
||||||
|
"""Resolve field through dataloader"""
|
||||||
|
source_loader = getattr(root, self.source_loader)
|
||||||
|
return self.data_loader.load(source_loader)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user