Fixed runtime type resolution.

This commit is contained in:
Syrus Akbary 2016-08-14 10:20:09 -07:00
parent a0228ae6b2
commit dbc981c6d2
4 changed files with 16 additions and 10 deletions

View File

@ -34,9 +34,7 @@ class InterfaceMeta(AbstractTypeMeta):
class Interface(six.with_metaclass(InterfaceMeta)):
@classmethod
def resolve_type(cls, root, args, info):
return type(root)
resolve_type = None
def __init__(self, *args, **kwargs):
raise Exception("An Interface cannot be intitialized")

View File

@ -17,7 +17,8 @@ class ObjectTypeMeta(AbstractTypeMeta):
if not is_base_type(bases, ObjectTypeMeta):
return type.__new__(cls, name, bases, attrs)
options = Options(
_meta = attrs.pop('_meta', None)
options = _meta or Options(
attrs.pop('Meta', None),
name=name,
description=attrs.get('__doc__'),
@ -49,8 +50,10 @@ class ObjectTypeMeta(AbstractTypeMeta):
class ObjectType(six.with_metaclass(ObjectTypeMeta)):
is_type_of = None
@classmethod
def is_type_of(cls, root, context, info):
if isinstance(root, cls):
return True
def __init__(self, *args, **kwargs):
# ObjectType acting as container

View File

@ -139,12 +139,15 @@ class TypeMap(GraphQLTypeMap):
@classmethod
def construct_interface(cls, map, type):
from .definitions import GrapheneInterfaceType
_resolve_type = None
if type.resolve_type:
_resolve_type = partial(resolve_type, type.resolve_type, map)
map[type._meta.name] = GrapheneInterfaceType(
graphene_type=type,
name=type._meta.name,
description=type._meta.description,
fields=None,
resolve_type=partial(resolve_type, type.resolve_type, map),
resolve_type=_resolve_type,
)
map[type._meta.name]._fields = cls.construct_fields_for_type(map, type)
# cls.reducer(map, map[type._meta.name])
@ -165,6 +168,9 @@ class TypeMap(GraphQLTypeMap):
@classmethod
def construct_union(cls, map, type):
from .definitions import GrapheneUnionType
_resolve_type = None
if type.resolve_type:
_resolve_type = partial(resolve_type, type.resolve_type, map)
types = []
for i in type._meta.types:
map = cls.construct_objecttype(map, i)
@ -173,7 +179,7 @@ class TypeMap(GraphQLTypeMap):
graphene_type=type,
name=type._meta.name,
types=types,
resolve_type=type.resolve_type,
resolve_type=_resolve_type,
)
map[type._meta.name].types = types
return map

View File

@ -31,8 +31,7 @@ class UnionMeta(type):
class Union(six.with_metaclass(UnionMeta)):
def resolve_type(self, _type):
return type(_type)
resolve_type = None
def __init__(self, *args, **kwargs):
raise Exception("An Union cannot be intitialized")