mirror of
https://github.com/graphql-python/graphene.git
synced 2025-09-21 19:32:33 +03:00
new enum resolver code
This commit is contained in:
parent
de15657dee
commit
40ba414bd5
|
@ -36,7 +36,10 @@ class GrapheneScalarType(GrapheneGraphQLType, GraphQLScalarType):
|
||||||
|
|
||||||
|
|
||||||
class GrapheneEnumType(GrapheneGraphQLType, GraphQLEnumType):
|
class GrapheneEnumType(GrapheneGraphQLType, GraphQLEnumType):
|
||||||
pass
|
def serialize(self, value):
|
||||||
|
if value in self.graphene_type._meta.enum:
|
||||||
|
return value.name
|
||||||
|
return super(GrapheneEnumType, self).serialize(value)
|
||||||
|
|
||||||
|
|
||||||
class GrapheneInputObjectType(GrapheneGraphQLType, GraphQLInputObjectType):
|
class GrapheneInputObjectType(GrapheneGraphQLType, GraphQLInputObjectType):
|
||||||
|
|
|
@ -23,13 +23,21 @@ class EnumOptions(BaseOptions):
|
||||||
deprecation_reason = None
|
deprecation_reason = None
|
||||||
|
|
||||||
|
|
||||||
|
def _filter_magic_members(classdict):
|
||||||
|
def is_special(name):
|
||||||
|
# We also remove the Meta attribute from the class to not collide
|
||||||
|
# with the enum values.
|
||||||
|
if name == "Meta":
|
||||||
|
return True
|
||||||
|
return name[:2] == name[-2:] == "__"
|
||||||
|
|
||||||
|
return OrderedDict((k, v) for k, v in classdict.items() if not is_special(k))
|
||||||
|
|
||||||
|
|
||||||
class EnumMeta(SubclassWithMeta_Meta):
|
class EnumMeta(SubclassWithMeta_Meta):
|
||||||
def __new__(cls, name, bases, classdict, **options):
|
def __new__(cls, name, bases, classdict, **options):
|
||||||
enum_members = OrderedDict(classdict, __eq__=eq_enum)
|
enum_members = _filter_magic_members(classdict)
|
||||||
# We remove the Meta attribute from the class to not collide
|
enum = PyEnum(name, enum_members)
|
||||||
# with the enum values.
|
|
||||||
enum_members.pop("Meta", None)
|
|
||||||
enum = PyEnum(cls.__name__, enum_members)
|
|
||||||
return SubclassWithMeta_Meta.__new__(
|
return SubclassWithMeta_Meta.__new__(
|
||||||
cls, name, bases, OrderedDict(classdict, __enum__=enum), **options
|
cls, name, bases, OrderedDict(classdict, __enum__=enum), **options
|
||||||
)
|
)
|
||||||
|
@ -48,7 +56,6 @@ class EnumMeta(SubclassWithMeta_Meta):
|
||||||
description = kwargs.pop("description", None)
|
description = kwargs.pop("description", None)
|
||||||
return cls.from_enum(PyEnum(*args, **kwargs), description=description)
|
return cls.from_enum(PyEnum(*args, **kwargs), description=description)
|
||||||
return super(EnumMeta, cls).__call__(*args, **kwargs)
|
return super(EnumMeta, cls).__call__(*args, **kwargs)
|
||||||
# return cls._meta.enum(*args, **kwargs)
|
|
||||||
|
|
||||||
def from_enum(cls, enum, description=None, deprecation_reason=None): # noqa: N805
|
def from_enum(cls, enum, description=None, deprecation_reason=None): # noqa: N805
|
||||||
description = description or enum.__doc__
|
description = description or enum.__doc__
|
||||||
|
|
|
@ -151,7 +151,7 @@ class TypeMap(GraphQLTypeMap):
|
||||||
|
|
||||||
values[name] = GraphQLEnumValue(
|
values[name] = GraphQLEnumValue(
|
||||||
name=name,
|
name=name,
|
||||||
value=value.value,
|
value=value,
|
||||||
description=description,
|
description=description,
|
||||||
deprecation_reason=deprecation_reason,
|
deprecation_reason=deprecation_reason,
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user