From cb3bfe011f516032d78ee840e6779b6be02dae9a Mon Sep 17 00:00:00 2001 From: Jonathan Kim Date: Mon, 16 Mar 2020 16:20:04 +0000 Subject: [PATCH] =?UTF-8?q?Use=20default=5Fresolver=20to=20resolve=20value?= =?UTF-8?q?s=20when=20using=20the=20source=20at=E2=80=A6=20(#1155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- graphene/types/field.py | 3 ++- graphene/types/tests/test_field.py | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/graphene/types/field.py b/graphene/types/field.py index b2c7766a..2af73781 100644 --- a/graphene/types/field.py +++ b/graphene/types/field.py @@ -4,6 +4,7 @@ from functools import partial from .argument import Argument, to_arguments from .mountedtype import MountedType +from .resolver import default_resolver from .structures import NonNull from .unmountedtype import UnmountedType from .utils import get_type @@ -12,7 +13,7 @@ base_type = type def source_resolver(source, root, info, **args): - resolved = getattr(root, source, None) + resolved = default_resolver(source, None, root, info, **args) if inspect.isfunction(resolved) or inspect.ismethod(resolved): return resolved() return resolved diff --git a/graphene/types/tests/test_field.py b/graphene/types/tests/test_field.py index 70ac0910..669ada4f 100644 --- a/graphene/types/tests/test_field.py +++ b/graphene/types/tests/test_field.py @@ -66,6 +66,13 @@ def test_field_source(): assert field.resolver(MyInstance(), None) == MyInstance.value +def test_field_source_dict_or_attr(): + MyType = object() + field = Field(MyType, source="value") + assert field.resolver(MyInstance(), None) == MyInstance.value + assert field.resolver({"value": MyInstance.value}, None) == MyInstance.value + + def test_field_with_lazy_type(): MyType = object() field = Field(lambda: MyType)