Skip to content

Commit

Permalink
Dict or attr default resolver (#638)
Browse files Browse the repository at this point in the history
* Add dict_or_attr resolver and set it as default

* Add some tests

* Dry up code

* Updated formatting
  • Loading branch information
jkimbo authored and ekampf committed Mar 11, 2019
1 parent bbe11c9 commit ca9188a
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
9 changes: 8 additions & 1 deletion graphene/types/resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,14 @@ def dict_resolver(attname, default_value, root, info, **args):
return root.get(attname, default_value)


default_resolver = attr_resolver
def dict_or_attr_resolver(attname, default_value, root, info, **args):
resolver = attr_resolver
if isinstance(root, dict):
resolver = dict_resolver
return resolver(attname, default_value, root, info, **args)


default_resolver = dict_or_attr_resolver


def set_default_resolver(resolver):
Expand Down
11 changes: 10 additions & 1 deletion graphene/types/tests/test_resolver.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from ..resolver import (
attr_resolver,
dict_resolver,
dict_or_attr_resolver,
get_default_resolver,
set_default_resolver,
)
Expand Down Expand Up @@ -36,8 +37,16 @@ def test_dict_resolver_default_value():
assert resolved == "default"


def test_dict_or_attr_resolver():
resolved = dict_or_attr_resolver("attr", None, demo_dict, info, **args)
assert resolved == "value"

resolved = dict_or_attr_resolver("attr", None, demo_obj, info, **args)
assert resolved == "value"


def test_get_default_resolver_is_attr_resolver():
assert get_default_resolver() == attr_resolver
assert get_default_resolver() == dict_or_attr_resolver


def test_set_default_resolver_workd():
Expand Down

0 comments on commit ca9188a

Please sign in to comment.