Fixed resolve context

This commit is contained in:
Syrus Akbary 2016-06-04 12:16:18 -07:00
parent 6c42877758
commit a1454fdd74
3 changed files with 33 additions and 15 deletions

View File

@ -22,7 +22,6 @@ class Human(graphene.ObjectType):
home_planet = graphene.String()
def resolve_friends(self, args, *_):
print 'resolve_friends'
# The character friends is a list of strings
return [get_character(f) for f in self.friends]
@ -32,10 +31,8 @@ class Droid(graphene.ObjectType):
primary_function = graphene.String()
def resolve_friends(self, args, *_):
print 'resolve_friends'
# print self.name
# The character friends is a list of strings
return [get_character() for f in self.friends]
return [get_character(f) for f in self.friends]
class Query(graphene.ObjectType):
@ -51,7 +48,6 @@ class Query(graphene.ObjectType):
@resolve_only_args
def resolve_hero(self, episode=None):
print 'get_hero', get_hero(episode)
return get_hero(episode)
@resolve_only_args

View File

@ -152,7 +152,7 @@ class GrapheneObjectType(GrapheneFieldsType, GraphQLObjectType):
from ..utils.get_graphql_type import get_graphql_type
try:
graphql_type = get_graphql_type(type(interface))
return graphql_type == self or graphql_type in self._provided_interfaces
return graphql_type == self
except:
return False

View File

@ -60,18 +60,40 @@ class Field(GraphQLField, OrderedType):
def type(self, type):
self._type = type
@property
def args(self):
return self._args
@args.setter
def args(self, args):
self._args = args
@property
def resolver(self):
return self._resolver or getattr(self.parent(), 'resolve_{}'.format(self.attname), None)
def default_resolver(root, args, context, info):
return getattr(root, self.source or self.attname, None)
resolver = getattr(self.parent, 'resolve_{}'.format(self.attname), default_resolver)
def resolver_wrapper(root, *args, **kwargs):
if not isinstance(root, self.parent):
root = self.parent()
return resolver(root, *args, **kwargs)
return self._resolver or resolver_wrapper
@resolver.setter
def resolver(self, resolver):
self._resolver = resolver
def __copy__(self):
field = Field(
type=self._type,
args=self.args,
resolver=self._resolver,
source=self.source,
deprecation_reason=self.deprecation_reason,
name=self._name,
description=self.description,
_creation_counter=self.creation_counter,
)
field.attname = self.attname
field.parent = self.parent
return field
def __str__(self):
if not self.parent:
return 'Not bounded field'
return "{}.{}".format(self.parent._meta.graphql_type, self.attname)