Allow InputObjectType instances to be Type proxies

This commit is contained in:
Syrus Akbary 2016-06-04 16:04:21 -07:00
parent 50c1ab62ba
commit 0f10ae884f
5 changed files with 13 additions and 12 deletions

View File

@ -11,7 +11,7 @@ class Address(graphene.ObjectType):
class Query(graphene.ObjectType): class Query(graphene.ObjectType):
address = graphene.Field(Address, geo=graphene.Argument(GeoInput)) address = graphene.Field(Address, geo=GeoInput())
def resolve_address(self, args, context, info): def resolve_address(self, args, context, info):
geo = args.get('geo') geo = args.get('geo')

View File

@ -1,5 +1,4 @@
from .objecttype import ObjectType, implements from .objecttype import ObjectType, implements
from .inputobjecttype import InputObjectType
from .interface import Interface from .interface import Interface
from .scalars import Scalar, String, ID, Int, Float, Boolean from .scalars import Scalar, String, ID, Int, Float, Boolean
from .schema import Schema from .schema import Schema
@ -7,5 +6,6 @@ from .structures import List, NonNull
from .enum import Enum from .enum import Enum
from .field import Field, InputField from .field import Field, InputField
from .argument import Argument from .argument import Argument
from .inputobjecttype import InputObjectType
__all__ = ['ObjectType', 'InputObjectType', 'Interface', 'implements', 'Enum', 'Field', 'InputField', 'Schema', 'Scalar', 'String', 'ID', 'Int', 'Float', 'Boolean', 'List', 'NonNull', 'Argument'] __all__ = ['ObjectType', 'InputObjectType', 'Interface', 'implements', 'Enum', 'Field', 'InputField', 'Schema', 'Scalar', 'String', 'ID', 'Int', 'Float', 'Boolean', 'List', 'NonNull', 'Argument']

View File

@ -3,9 +3,6 @@ import inspect
from graphql.type import GraphQLField, GraphQLInputObjectField from graphql.type import GraphQLField, GraphQLInputObjectField
from graphql.utils.assert_valid_name import assert_valid_name from graphql.utils.assert_valid_name import assert_valid_name
from .objecttype import ObjectType
from .inputobjecttype import InputObjectType
from .interface import Interface
from ..utils.orderedtype import OrderedType from ..utils.orderedtype import OrderedType
from ..utils.str_converters import to_camel_case from ..utils.str_converters import to_camel_case
from .argument import to_arguments from .argument import to_arguments
@ -66,6 +63,9 @@ class Field(AbstractField, GraphQLField, OrderedType):
) )
def contribute_to_class(self, cls, attname): def contribute_to_class(self, cls, attname):
from .objecttype import ObjectType
from .interface import Interface
assert issubclass(cls, (ObjectType, Interface)), self.mount_error_message(cls) assert issubclass(cls, (ObjectType, Interface)), self.mount_error_message(cls)
self.attname = attname self.attname = attname
self.parent = cls self.parent = cls
@ -131,6 +131,8 @@ class InputField(AbstractField, GraphQLInputObjectField, OrderedType):
) )
def contribute_to_class(self, cls, attname): def contribute_to_class(self, cls, attname):
from .inputobjecttype import InputObjectType
assert issubclass(cls, (InputObjectType)), self.mount_error_message(cls) assert issubclass(cls, (InputObjectType)), self.mount_error_message(cls)
self.attname = attname self.attname = attname
self.parent = cls self.parent = cls

View File

@ -3,6 +3,7 @@ import six
from graphql import GraphQLInputObjectType from graphql import GraphQLInputObjectType
from .definitions import ClassTypeMeta, GrapheneFieldsType, FieldMap from .definitions import ClassTypeMeta, GrapheneFieldsType, FieldMap
from .proxy import TypeProxy
class GrapheneInputObjectType(GrapheneFieldsType, GraphQLInputObjectType): class GrapheneInputObjectType(GrapheneFieldsType, GraphQLInputObjectType):
@ -38,6 +39,6 @@ class InputObjectTypeMeta(ClassTypeMeta):
) )
class InputObjectType(six.with_metaclass(InputObjectTypeMeta)): class InputObjectType(six.with_metaclass(InputObjectTypeMeta, TypeProxy)):
class Meta: class Meta:
abstract = True abstract = True

View File

@ -1,11 +1,5 @@
from .field import Field, InputField from .field import Field, InputField
from .argument import Argument from .argument import Argument
from .objecttype import ObjectType
from .interface import Interface
from .inputobjecttype import InputObjectType
from ..utils.orderedtype import OrderedType from ..utils.orderedtype import OrderedType
@ -43,6 +37,10 @@ class TypeProxy(OrderedType):
) )
def contribute_to_class(self, cls, attname): def contribute_to_class(self, cls, attname):
from .inputobjecttype import InputObjectType
from .objecttype import ObjectType
from .interface import Interface
if issubclass(cls, (ObjectType, Interface)): if issubclass(cls, (ObjectType, Interface)):
inner = self.as_field() inner = self.as_field()
elif issubclass(cls, (InputObjectType)): elif issubclass(cls, (InputObjectType)):