From 2225ed62e1fd05f11fc0f0939e864351e1e53aa7 Mon Sep 17 00:00:00 2001 From: Paul Craciunoiu Date: Sat, 9 May 2020 10:35:09 -0600 Subject: [PATCH] Do not access the internals of `SimpleLazyObject` (#945) --- graphene_django/tests/test_query.py | 25 +++++++++++++++++++++++++ graphene_django/types.py | 5 +---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/graphene_django/tests/test_query.py b/graphene_django/tests/test_query.py index 698ca23..bb9cc88 100644 --- a/graphene_django/tests/test_query.py +++ b/graphene_django/tests/test_query.py @@ -60,6 +60,31 @@ def test_should_query_simplelazy_objects(): assert result.data == {"reporter": {"id": "1"}} +def test_should_query_wrapped_simplelazy_objects(): + class ReporterType(DjangoObjectType): + class Meta: + model = Reporter + fields = ("id",) + + class Query(graphene.ObjectType): + reporter = graphene.Field(ReporterType) + + def resolve_reporter(self, info): + return SimpleLazyObject(lambda: SimpleLazyObject(lambda: Reporter(id=1))) + + schema = graphene.Schema(query=Query) + query = """ + query { + reporter { + id + } + } + """ + result = schema.execute(query) + assert not result.errors + assert result.data == {"reporter": {"id": "1"}} + + def test_should_query_well(): class ReporterType(DjangoObjectType): class Meta: diff --git a/graphene_django/types.py b/graphene_django/types.py index 18dccb2..b31fd0f 100644 --- a/graphene_django/types.py +++ b/graphene_django/types.py @@ -272,12 +272,9 @@ class DjangoObjectType(ObjectType): @classmethod def is_type_of(cls, root, info): - if isinstance(root, SimpleLazyObject): - root._setup() - root = root._wrapped if isinstance(root, cls): return True - if not is_valid_django_model(type(root)): + if not is_valid_django_model(root.__class__): raise Exception(('Received incompatible instance "{}".').format(root)) if cls._meta.model._meta.proxy: