Skip to content

Commit ca9188a

Browse files
jkimboekampf
authored andcommitted
Dict or attr default resolver (#638)
* Add dict_or_attr resolver and set it as default * Add some tests * Dry up code * Updated formatting
1 parent bbe11c9 commit ca9188a

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

graphene/types/resolver.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@ def dict_resolver(attname, default_value, root, info, **args):
66
return root.get(attname, default_value)
77

88

9-
default_resolver = attr_resolver
9+
def dict_or_attr_resolver(attname, default_value, root, info, **args):
10+
resolver = attr_resolver
11+
if isinstance(root, dict):
12+
resolver = dict_resolver
13+
return resolver(attname, default_value, root, info, **args)
14+
15+
16+
default_resolver = dict_or_attr_resolver
1017

1118

1219
def set_default_resolver(resolver):

graphene/types/tests/test_resolver.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from ..resolver import (
22
attr_resolver,
33
dict_resolver,
4+
dict_or_attr_resolver,
45
get_default_resolver,
56
set_default_resolver,
67
)
@@ -36,8 +37,16 @@ def test_dict_resolver_default_value():
3637
assert resolved == "default"
3738

3839

40+
def test_dict_or_attr_resolver():
41+
resolved = dict_or_attr_resolver("attr", None, demo_dict, info, **args)
42+
assert resolved == "value"
43+
44+
resolved = dict_or_attr_resolver("attr", None, demo_obj, info, **args)
45+
assert resolved == "value"
46+
47+
3948
def test_get_default_resolver_is_attr_resolver():
40-
assert get_default_resolver() == attr_resolver
49+
assert get_default_resolver() == dict_or_attr_resolver
4150

4251

4352
def test_set_default_resolver_workd():

0 commit comments

Comments
 (0)