From 21dffa4aa8ac2d976aa9208b34601f94418046fb Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Sun, 6 Dec 2015 01:34:56 -0800 Subject: [PATCH] Moved fields to a named group --- graphene/core/classtypes/base.py | 15 ++++++--------- graphene/core/types/field.py | 14 +++++++++++++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/graphene/core/classtypes/base.py b/graphene/core/classtypes/base.py index 4f2de009..9ab51427 100644 --- a/graphene/core/classtypes/base.py +++ b/graphene/core/classtypes/base.py @@ -5,7 +5,6 @@ from collections import OrderedDict import six -from ..exceptions import SkipField from .options import Options @@ -82,6 +81,11 @@ class FieldsOptions(Options): def fields_map(self): return OrderedDict([(f.attname, f) for f in self.fields]) + @property + def fields_group_type(self): + from ..types.field import FieldsGroupType + return FieldsGroupType(*self.local_fields) + class FieldsClassTypeMeta(ClassTypeMeta): options_class = FieldsOptions @@ -124,11 +128,4 @@ class FieldsClassType(six.with_metaclass(FieldsClassTypeMeta, ClassType)): @classmethod def fields_internal_types(cls, schema): - fields = [] - for field in cls._meta.fields: - try: - fields.append((field.name, schema.T(field))) - except SkipField: - continue - - return OrderedDict(fields) + return schema.T(cls._meta.fields_group_type) diff --git a/graphene/core/types/field.py b/graphene/core/types/field.py index 3be90c74..9f2c3f01 100644 --- a/graphene/core/types/field.py +++ b/graphene/core/types/field.py @@ -8,8 +8,9 @@ from ...utils import to_camel_case from ..classtypes.base import FieldsClassType from ..classtypes.inputobjecttype import InputObjectType from ..classtypes.mutation import Mutation +from ..exceptions import SkipField from .argument import ArgumentsGroup, snake_case_args -from .base import LazyType, NamedType, MountType, OrderedType +from .base import LazyType, NamedType, MountType, OrderedType, GroupNamedType from .definitions import NonNull @@ -146,3 +147,14 @@ class InputField(NamedType, OrderedType): return GraphQLInputObjectField( schema.T(self.type), default_value=self.default, description=self.description) + + +class FieldsGroupType(GroupNamedType): + def internal_type(self, schema): + fields = [] + for field in sorted(self.types): + try: + fields.append(self.get_named_type(schema, field)) + except SkipField: + continue + return OrderedDict(fields)