From 2bab94d72f3ada94f9fe27c969ce8945cf370524 Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Mon, 26 Oct 2015 02:37:07 -0700 Subject: [PATCH] Added InputObjectType and InputObjectField --- graphene/core/fields.py | 10 ++++++++-- graphene/core/types.py | 18 ++++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/graphene/core/fields.py b/graphene/core/fields.py index b22db773..2b64cf7f 100644 --- a/graphene/core/fields.py +++ b/graphene/core/fields.py @@ -11,9 +11,10 @@ from graphql.core.type import ( GraphQLID, GraphQLArgument, GraphQLFloat, + GraphQLInputObjectField, ) 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 @@ -145,7 +146,12 @@ class Field(object): return self.resolve(*args) else: resolver = self.resolve - return GraphQLField( + + field_type = GraphQLField + if object_type and issubclass(object_type, InputObjectType): + field_type = GraphQLInputObjectField + + return field_type( internal_type, description=description, args=args, diff --git a/graphene/core/types.py b/graphene/core/types.py index 0aa655b7..6be7921b 100644 --- a/graphene/core/types.py +++ b/graphene/core/types.py @@ -5,6 +5,7 @@ from collections import OrderedDict from graphql.core.type import ( GraphQLObjectType, + GraphQLInputObjectType, GraphQLInterfaceType, GraphQLArgument ) @@ -170,9 +171,8 @@ class BaseObjectType(object): @memoize @register_internal_type def internal_type(cls, schema): - fields_list = cls._meta.fields 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: return GraphQLInterfaceType( cls._meta.type_name, @@ -200,3 +200,17 @@ class ObjectType(six.with_metaclass(ObjectTypeMeta, BaseObjectType)): class Mutation(six.with_metaclass(ObjectTypeMeta, BaseObjectType)): 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, + )