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)):
|
class Interface(six.with_metaclass(InterfaceMeta)):
|
||||||
@classmethod
|
resolve_type = None
|
||||||
def resolve_type(cls, root, args, info):
|
|
||||||
return type(root)
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
raise Exception("An Interface cannot be intitialized")
|
raise Exception("An Interface cannot be intitialized")
|
||||||
|
|
|
@ -17,7 +17,8 @@ class ObjectTypeMeta(AbstractTypeMeta):
|
||||||
if not is_base_type(bases, ObjectTypeMeta):
|
if not is_base_type(bases, ObjectTypeMeta):
|
||||||
return type.__new__(cls, name, bases, attrs)
|
return type.__new__(cls, name, bases, attrs)
|
||||||
|
|
||||||
options = Options(
|
_meta = attrs.pop('_meta', None)
|
||||||
|
options = _meta or Options(
|
||||||
attrs.pop('Meta', None),
|
attrs.pop('Meta', None),
|
||||||
name=name,
|
name=name,
|
||||||
description=attrs.get('__doc__'),
|
description=attrs.get('__doc__'),
|
||||||
|
@ -49,8 +50,10 @@ class ObjectTypeMeta(AbstractTypeMeta):
|
||||||
|
|
||||||
|
|
||||||
class ObjectType(six.with_metaclass(ObjectTypeMeta)):
|
class ObjectType(six.with_metaclass(ObjectTypeMeta)):
|
||||||
|
@classmethod
|
||||||
is_type_of = None
|
def is_type_of(cls, root, context, info):
|
||||||
|
if isinstance(root, cls):
|
||||||
|
return True
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
# ObjectType acting as container
|
# ObjectType acting as container
|
||||||
|
|
|
@ -139,12 +139,15 @@ class TypeMap(GraphQLTypeMap):
|
||||||
@classmethod
|
@classmethod
|
||||||
def construct_interface(cls, map, type):
|
def construct_interface(cls, map, type):
|
||||||
from .definitions import GrapheneInterfaceType
|
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(
|
map[type._meta.name] = GrapheneInterfaceType(
|
||||||
graphene_type=type,
|
graphene_type=type,
|
||||||
name=type._meta.name,
|
name=type._meta.name,
|
||||||
description=type._meta.description,
|
description=type._meta.description,
|
||||||
fields=None,
|
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)
|
map[type._meta.name]._fields = cls.construct_fields_for_type(map, type)
|
||||||
# cls.reducer(map, map[type._meta.name])
|
# cls.reducer(map, map[type._meta.name])
|
||||||
|
@ -165,6 +168,9 @@ class TypeMap(GraphQLTypeMap):
|
||||||
@classmethod
|
@classmethod
|
||||||
def construct_union(cls, map, type):
|
def construct_union(cls, map, type):
|
||||||
from .definitions import GrapheneUnionType
|
from .definitions import GrapheneUnionType
|
||||||
|
_resolve_type = None
|
||||||
|
if type.resolve_type:
|
||||||
|
_resolve_type = partial(resolve_type, type.resolve_type, map)
|
||||||
types = []
|
types = []
|
||||||
for i in type._meta.types:
|
for i in type._meta.types:
|
||||||
map = cls.construct_objecttype(map, i)
|
map = cls.construct_objecttype(map, i)
|
||||||
|
@ -173,7 +179,7 @@ class TypeMap(GraphQLTypeMap):
|
||||||
graphene_type=type,
|
graphene_type=type,
|
||||||
name=type._meta.name,
|
name=type._meta.name,
|
||||||
types=types,
|
types=types,
|
||||||
resolve_type=type.resolve_type,
|
resolve_type=_resolve_type,
|
||||||
)
|
)
|
||||||
map[type._meta.name].types = types
|
map[type._meta.name].types = types
|
||||||
return map
|
return map
|
||||||
|
|
|
@ -31,8 +31,7 @@ class UnionMeta(type):
|
||||||
|
|
||||||
|
|
||||||
class Union(six.with_metaclass(UnionMeta)):
|
class Union(six.with_metaclass(UnionMeta)):
|
||||||
def resolve_type(self, _type):
|
resolve_type = None
|
||||||
return type(_type)
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
raise Exception("An Union cannot be intitialized")
|
raise Exception("An Union cannot be intitialized")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user