mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-02 20:54:16 +03:00
Added enum support in typemap
This commit is contained in:
parent
84c1da60dd
commit
b68b1753bb
|
@ -182,6 +182,28 @@ def test_includes_types_in_union():
|
||||||
assert schema.get_type_map()['SomeType'].graphene_type is SomeType
|
assert schema.get_type_map()['SomeType'].graphene_type is SomeType
|
||||||
|
|
||||||
|
|
||||||
|
def test_maps_enum():
|
||||||
|
class SomeType(ObjectType):
|
||||||
|
a = String()
|
||||||
|
|
||||||
|
class OtherType(ObjectType):
|
||||||
|
b = String()
|
||||||
|
|
||||||
|
class MyUnion(Union):
|
||||||
|
class Meta:
|
||||||
|
types = (SomeType, OtherType)
|
||||||
|
|
||||||
|
class Query(ObjectType):
|
||||||
|
union = Field(MyUnion)
|
||||||
|
|
||||||
|
schema = Schema(
|
||||||
|
query=Query,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert schema.get_type_map()['OtherType'].graphene_type is OtherType
|
||||||
|
assert schema.get_type_map()['SomeType'].graphene_type is SomeType
|
||||||
|
|
||||||
|
|
||||||
def test_includes_interfaces_subtypes_in_the_type_map():
|
def test_includes_interfaces_subtypes_in_the_type_map():
|
||||||
class SomeInterface(Interface):
|
class SomeInterface(Interface):
|
||||||
f = Int()
|
f = Int()
|
||||||
|
|
36
graphene/new_types/tests/test_typemap.py
Normal file
36
graphene/new_types/tests/test_typemap.py
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from ..objecttype import ObjectType
|
||||||
|
from ..union import Union
|
||||||
|
from ..enum import Enum
|
||||||
|
from ..typemap import TypeMap
|
||||||
|
|
||||||
|
from graphql.type import GraphQLEnumType, GraphQLEnumValue
|
||||||
|
|
||||||
|
|
||||||
|
def test_enum():
|
||||||
|
class MyEnum(Enum):
|
||||||
|
'''Description'''
|
||||||
|
foo = 1
|
||||||
|
bar = 2
|
||||||
|
|
||||||
|
@property
|
||||||
|
def description(self):
|
||||||
|
return 'Description {}={}'.format(self.name, self.value)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def deprecation_reason(self):
|
||||||
|
if self == MyEnum.foo:
|
||||||
|
return 'Is deprecated'
|
||||||
|
|
||||||
|
typemap = TypeMap([MyEnum])
|
||||||
|
assert 'MyEnum' in typemap
|
||||||
|
graphql_enum = typemap['MyEnum']
|
||||||
|
assert isinstance(graphql_enum, GraphQLEnumType)
|
||||||
|
assert graphql_enum.name == 'MyEnum'
|
||||||
|
assert graphql_enum.description == 'Description'
|
||||||
|
values = graphql_enum.get_values()
|
||||||
|
assert values == [
|
||||||
|
GraphQLEnumValue(name='foo', value=1, description='Description foo=1', deprecation_reason='Is deprecated'),
|
||||||
|
GraphQLEnumValue(name='bar', value=2, description='Description bar=2'),
|
||||||
|
]
|
|
@ -8,15 +8,17 @@ from .interface import Interface
|
||||||
from .union import Union
|
from .union import Union
|
||||||
from .inputobjecttype import InputObjectType
|
from .inputobjecttype import InputObjectType
|
||||||
from .structures import List, NonNull
|
from .structures import List, NonNull
|
||||||
|
from .enum import Enum
|
||||||
from .scalars import Scalar, String, Boolean, Int, Float, ID
|
from .scalars import Scalar, String, Boolean, Int, Float, ID
|
||||||
|
|
||||||
from graphql import GraphQLString, GraphQLField, GraphQLList, GraphQLBoolean, GraphQLInt, GraphQLFloat, GraphQLID, GraphQLNonNull, GraphQLInputObjectField
|
from graphql import GraphQLString, GraphQLField, GraphQLList, GraphQLBoolean, GraphQLInt, GraphQLFloat, GraphQLID, GraphQLNonNull, GraphQLInputObjectField
|
||||||
|
from graphql.type import GraphQLEnumValue
|
||||||
|
|
||||||
|
|
||||||
def is_graphene_type(_type):
|
def is_graphene_type(_type):
|
||||||
if isinstance(_type, (List, NonNull)):
|
if isinstance(_type, (List, NonNull)):
|
||||||
return True
|
return True
|
||||||
if inspect.isclass(_type) and issubclass(_type, (ObjectType, InputObjectType, Scalar, Interface, Union)):
|
if inspect.isclass(_type) and issubclass(_type, (ObjectType, InputObjectType, Scalar, Interface, Union, Enum)):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,6 +50,8 @@ class TypeMap(GraphQLTypeMap):
|
||||||
return cls.construct_interface(map, type)
|
return cls.construct_interface(map, type)
|
||||||
if issubclass(type, Scalar):
|
if issubclass(type, Scalar):
|
||||||
return cls.construct_scalar(map, type)
|
return cls.construct_scalar(map, type)
|
||||||
|
if issubclass(type, Enum):
|
||||||
|
return cls.construct_enum(map, type)
|
||||||
if issubclass(type, Union):
|
if issubclass(type, Union):
|
||||||
return cls.construct_union(map, type)
|
return cls.construct_union(map, type)
|
||||||
return map
|
return map
|
||||||
|
@ -76,6 +80,25 @@ class TypeMap(GraphQLTypeMap):
|
||||||
)
|
)
|
||||||
return map
|
return map
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def construct_enum(cls, map, type):
|
||||||
|
from ..generators.definitions import GrapheneEnumType
|
||||||
|
values = OrderedDict()
|
||||||
|
for name, value in type._meta.enum.__members__.items():
|
||||||
|
values[name] = GraphQLEnumValue(
|
||||||
|
name=name,
|
||||||
|
value=value.value,
|
||||||
|
description=getattr(value, 'description', None),
|
||||||
|
deprecation_reason=getattr(value, 'deprecation_reason', None)
|
||||||
|
)
|
||||||
|
map[type._meta.name] = GrapheneEnumType(
|
||||||
|
graphene_type=type,
|
||||||
|
values=values,
|
||||||
|
name=type._meta.name,
|
||||||
|
description=type._meta.description,
|
||||||
|
)
|
||||||
|
return map
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def construct_objecttype(cls, map, type):
|
def construct_objecttype(cls, map, type):
|
||||||
from ..generators.definitions import GrapheneObjectType
|
from ..generators.definitions import GrapheneObjectType
|
||||||
|
|
Loading…
Reference in New Issue
Block a user