cleanup get_queryset API to match proposal as close as possible

This commit is contained in:
Jason Kraus 2018-10-05 09:47:23 -07:00
parent 857b20a2f2
commit 2c6faa63c2
2 changed files with 9 additions and 24 deletions

View File

@ -68,18 +68,8 @@ class DjangoConnectionField(ConnectionField):
return self.model._default_manager return self.model._default_manager
@classmethod @classmethod
def resolve_queryset(cls, connection, queryset, info): def resolve_queryset(cls, connection, queryset, info, args):
default_queryset = maybe_queryset(connection._meta.node.get_queryset(info)) return connection._meta.node.get_queryset(queryset, info)
if queryset:
return cls.merge_querysets(default_queryset, queryset)
return default_queryset
def get_queryset_resolver(self):
return partial(
self.resolve_queryset,
self.type,
maybe_queryset(getattr(self.model, self.on)) if self.on else None,
)
@classmethod @classmethod
def merge_querysets(cls, default_queryset, queryset): def merge_querysets(cls, default_queryset, queryset):
@ -120,7 +110,7 @@ class DjangoConnectionField(ConnectionField):
cls, cls,
resolver, resolver,
connection, connection,
queryset_resolver, default_manager,
max_limit, max_limit,
enforce_first_or_last, enforce_first_or_last,
root, root,
@ -149,13 +139,7 @@ class DjangoConnectionField(ConnectionField):
args["last"] = min(last, max_limit) args["last"] = min(last, max_limit)
iterable = resolver(root, info, **args) iterable = resolver(root, info, **args)
if callable(queryset_resolver): queryset = cls.resolve_queryset(connection, default_manager, info, args)
queryset = queryset_resolver(info)
else:
assert isinstance(queryset_resolver, QuerySet), "The type {} is not a QuerySet".format(
type(queryset_resolver)
)
queryset = queryset_resolver
on_resolve = partial(cls.resolve_connection, connection, queryset, args) on_resolve = partial(cls.resolve_connection, connection, queryset, args)
if Promise.is_thenable(iterable): if Promise.is_thenable(iterable):
@ -168,7 +152,7 @@ class DjangoConnectionField(ConnectionField):
self.connection_resolver, self.connection_resolver,
parent_resolver, parent_resolver,
self.type, self.type,
self.get_queryset_resolver(), self.get_manager(),
self.max_limit, self.max_limit,
self.enforce_first_or_last, self.enforce_first_or_last,
) )

View File

@ -128,12 +128,13 @@ class DjangoObjectType(ObjectType):
return model == cls._meta.model return model == cls._meta.model
@classmethod @classmethod
def get_queryset(cls, info): def get_queryset(cls, queryset, info):
return cls._meta.model.objects return queryset
@classmethod @classmethod
def get_node(cls, info, id): def get_node(cls, info, id):
queryset = cls.get_queryset(cls._meta.model.objects, info)
try: try:
return cls.get_queryset(info).get(pk=id) return queryset.get(pk=id)
except cls._meta.model.DoesNotExist: except cls._meta.model.DoesNotExist:
return None return None