mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-02 20:54:16 +03:00
Fixed runtime type resolution.
This commit is contained in:
parent
a0228ae6b2
commit
dbc981c6d2
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue
Block a user