Skip to content

Commit

Permalink
Merge pull request #1430 from loft-orbital/feat/enable-to-provide-enu…
Browse files Browse the repository at this point in the history
…m-name

feat: add ability to provide a type name to enum when using from_enum
  • Loading branch information
tcleonard authored Jun 27, 2022
2 parents 69be326 + 8f6a8f9 commit 72c2fd5
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 2 deletions.
7 changes: 5 additions & 2 deletions graphene/types/enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,18 @@ def __call__(cls, *args, **kwargs): # noqa: N805
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, name=None, description=None, deprecation_reason=None
): # noqa: N805
name = name or enum.__name__
description = description or enum.__doc__
meta_dict = {
"enum": enum,
"description": description,
"deprecation_reason": deprecation_reason,
}
meta_class = type("Meta", (object,), meta_dict)
return type(meta_class.enum.__name__, (Enum,), {"Meta": meta_class})
return type(name, (Enum,), {"Meta": meta_class})


class Enum(UnmountedType, BaseType, metaclass=EnumMeta):
Expand Down
46 changes: 46 additions & 0 deletions graphene/types/tests/test_enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,52 @@ def resolve_color_by_name(_, info):
assert results.data["colorByName"] == Color.RED.name


def test_enum_with_name():
from enum import Enum as PyEnum

class Color(PyEnum):
RED = 1
YELLOW = 2
BLUE = 3

GColor = Enum.from_enum(Color, description="original colors")
UniqueGColor = Enum.from_enum(
Color, name="UniqueColor", description="unique colors"
)

class Query(ObjectType):
color = GColor(required=True)
unique_color = UniqueGColor(required=True)

schema = Schema(query=Query)

assert (
str(schema).strip()
== dedent(
'''
type Query {
color: Color!
uniqueColor: UniqueColor!
}
"""original colors"""
enum Color {
RED
YELLOW
BLUE
}
"""unique colors"""
enum UniqueColor {
RED
YELLOW
BLUE
}
'''
).strip()
)


def test_enum_resolver_invalid():
from enum import Enum as PyEnum

Expand Down

0 comments on commit 72c2fd5

Please sign in to comment.