From cbf0d8fedd0472ceeb368fcd746c88e2ada06a4a Mon Sep 17 00:00:00 2001 From: Syrus Akbary Date: Wed, 22 Jun 2016 23:30:49 -0700 Subject: [PATCH] Moved Enum logic --- graphene/generators/__init__.py | 12 +++++++++++- graphene/generators/definitions.py | 6 +++++- graphene/generators/utils.py | 14 ++++++++++++++ graphene/types/enum.py | 27 ++------------------------- 4 files changed, 32 insertions(+), 27 deletions(-) create mode 100644 graphene/generators/utils.py diff --git a/graphene/generators/__init__.py b/graphene/generators/__init__.py index 57d98e5b..c9626f08 100644 --- a/graphene/generators/__init__.py +++ b/graphene/generators/__init__.py @@ -1,4 +1,5 @@ -from .definitions import GrapheneInterfaceType, GrapheneObjectType, GrapheneScalarType +from .definitions import GrapheneInterfaceType, GrapheneObjectType, GrapheneScalarType, GrapheneEnumType +from .utils import values_from_enum def generate_interface(interface): @@ -32,3 +33,12 @@ def generate_scalar(scalar): parse_value=getattr(scalar, 'parse_value', None), parse_literal=getattr(scalar, 'parse_literal', None), ) + + +def generate_enum(enum): + return GrapheneEnumType( + graphene_type=enum, + values=values_from_enum(enum._meta.enum), + name=enum._meta.name or enum.__name__, + description=enum._meta.description or enum.__doc__, + ) diff --git a/graphene/generators/definitions.py b/graphene/generators/definitions.py index e419638e..423c14e3 100644 --- a/graphene/generators/definitions.py +++ b/graphene/generators/definitions.py @@ -1,4 +1,4 @@ -from graphql import GraphQLObjectType, GraphQLInterfaceType, GraphQLScalarType +from graphql import GraphQLObjectType, GraphQLInterfaceType, GraphQLScalarType, GraphQLEnumType class GrapheneGraphQLType(object): @@ -31,3 +31,7 @@ class GrapheneObjectType(GrapheneGraphQLType, GraphQLObjectType): class GrapheneScalarType(GrapheneGraphQLType, GraphQLScalarType): pass + + +class GrapheneEnumType(GrapheneGraphQLType, GraphQLEnumType): + pass diff --git a/graphene/generators/utils.py b/graphene/generators/utils.py new file mode 100644 index 00000000..43fc79e5 --- /dev/null +++ b/graphene/generators/utils.py @@ -0,0 +1,14 @@ +from collections import OrderedDict +from graphql.type import GraphQLEnumValue + + +def values_from_enum(enum): + _values = OrderedDict() + for name, value in enum.__members__.items(): + _values[name] = GraphQLEnumValue( + name=name, + value=value.value, + description=getattr(value, 'description', None), + deprecation_reason=getattr(value, 'deprecation_reason', None) + ) + return _values diff --git a/graphene/types/enum.py b/graphene/types/enum.py index fe733577..c1d382ba 100644 --- a/graphene/types/enum.py +++ b/graphene/types/enum.py @@ -2,10 +2,7 @@ from collections import OrderedDict import six -from graphql.type import GraphQLEnumType, GraphQLEnumValue - from ..utils.is_base_type import is_base_type -from .definitions import GrapheneGraphQLType from .options import Options from .unmountedtype import UnmountedType @@ -14,21 +11,7 @@ try: except ImportError: from ..utils.enum import Enum as PyEnum - -class GrapheneEnumType(GrapheneGraphQLType, GraphQLEnumType): - pass - - -def values_from_enum(enum): - _values = OrderedDict() - for name, value in enum.__members__.items(): - _values[name] = GraphQLEnumValue( - name=name, - value=value.value, - description=getattr(value, 'description', None), - deprecation_reason=getattr(value, 'deprecation_reason', None) - ) - return _values +from ..generators import generate_enum class EnumTypeMeta(type): @@ -56,13 +39,7 @@ class EnumTypeMeta(type): cls = super_new(cls, name, bases, new_attrs) if not options.graphql_type: - values = values_from_enum(options.enum) - options.graphql_type = GrapheneEnumType( - graphene_type=cls, - values=values, - name=options.name or cls.__name__, - description=options.description or cls.__doc__, - ) + options.graphql_type = generate_enum(cls) return cls