mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-02 12:44:15 +03:00
Moved Enum logic
This commit is contained in:
parent
3529fcb29b
commit
cbf0d8fedd
|
@ -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__,
|
||||
)
|
||||
|
|
|
@ -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
|
||||
|
|
14
graphene/generators/utils.py
Normal file
14
graphene/generators/utils.py
Normal file
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user