Added InputObjectType and InputObjectField

This commit is contained in:
Syrus Akbary 2015-10-26 02:37:07 -07:00
parent ea5207d025
commit 2bab94d72f
2 changed files with 24 additions and 4 deletions

View File

@ -11,9 +11,10 @@ from graphql.core.type import (
GraphQLID, GraphQLID,
GraphQLArgument, GraphQLArgument,
GraphQLFloat, GraphQLFloat,
GraphQLInputObjectField,
) )
from graphene.utils import to_camel_case from graphene.utils import to_camel_case
from graphene.core.types import BaseObjectType from graphene.core.types import BaseObjectType, InputObjectType
from graphene.core.scalars import GraphQLSkipField from graphene.core.scalars import GraphQLSkipField
@ -145,7 +146,12 @@ class Field(object):
return self.resolve(*args) return self.resolve(*args)
else: else:
resolver = self.resolve resolver = self.resolve
return GraphQLField(
field_type = GraphQLField
if object_type and issubclass(object_type, InputObjectType):
field_type = GraphQLInputObjectField
return field_type(
internal_type, internal_type,
description=description, description=description,
args=args, args=args,

View File

@ -5,6 +5,7 @@ from collections import OrderedDict
from graphql.core.type import ( from graphql.core.type import (
GraphQLObjectType, GraphQLObjectType,
GraphQLInputObjectType,
GraphQLInterfaceType, GraphQLInterfaceType,
GraphQLArgument GraphQLArgument
) )
@ -170,9 +171,8 @@ class BaseObjectType(object):
@memoize @memoize
@register_internal_type @register_internal_type
def internal_type(cls, schema): def internal_type(cls, schema):
fields_list = cls._meta.fields
fields = lambda: OrderedDict([(f.name, f.internal_field(schema)) fields = lambda: OrderedDict([(f.name, f.internal_field(schema))
for f in fields_list]) for f in cls._meta.fields])
if cls._meta.is_interface: if cls._meta.is_interface:
return GraphQLInterfaceType( return GraphQLInterfaceType(
cls._meta.type_name, cls._meta.type_name,
@ -200,3 +200,17 @@ class ObjectType(six.with_metaclass(ObjectTypeMeta, BaseObjectType)):
class Mutation(six.with_metaclass(ObjectTypeMeta, BaseObjectType)): class Mutation(six.with_metaclass(ObjectTypeMeta, BaseObjectType)):
pass pass
class InputObjectType(ObjectType):
@classmethod
@memoize
@register_internal_type
def internal_type(cls, schema):
fields = lambda: OrderedDict([(f.name, f.internal_field(schema))
for f in cls._meta.fields])
return GraphQLInputObjectType(
cls._meta.type_name,
description=cls._meta.description,
fields=fields,
)