Skip to content

Commit 72c2fd5

Browse files
authored
Merge pull request #1430 from loft-orbital/feat/enable-to-provide-enum-name
feat: add ability to provide a type name to enum when using from_enum
2 parents 69be326 + 8f6a8f9 commit 72c2fd5

File tree

2 files changed

+51
-2
lines changed

2 files changed

+51
-2
lines changed

graphene/types/enum.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,18 @@ def __call__(cls, *args, **kwargs): # noqa: N805
5252
return super(EnumMeta, cls).__call__(*args, **kwargs)
5353
# return cls._meta.enum(*args, **kwargs)
5454

55-
def from_enum(cls, enum, description=None, deprecation_reason=None): # noqa: N805
55+
def from_enum(
56+
cls, enum, name=None, description=None, deprecation_reason=None
57+
): # noqa: N805
58+
name = name or enum.__name__
5659
description = description or enum.__doc__
5760
meta_dict = {
5861
"enum": enum,
5962
"description": description,
6063
"deprecation_reason": deprecation_reason,
6164
}
6265
meta_class = type("Meta", (object,), meta_dict)
63-
return type(meta_class.enum.__name__, (Enum,), {"Meta": meta_class})
66+
return type(name, (Enum,), {"Meta": meta_class})
6467

6568

6669
class Enum(UnmountedType, BaseType, metaclass=EnumMeta):

graphene/types/tests/test_enum.py

+46
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,52 @@ def resolve_color_by_name(_, info):
328328
assert results.data["colorByName"] == Color.RED.name
329329

330330

331+
def test_enum_with_name():
332+
from enum import Enum as PyEnum
333+
334+
class Color(PyEnum):
335+
RED = 1
336+
YELLOW = 2
337+
BLUE = 3
338+
339+
GColor = Enum.from_enum(Color, description="original colors")
340+
UniqueGColor = Enum.from_enum(
341+
Color, name="UniqueColor", description="unique colors"
342+
)
343+
344+
class Query(ObjectType):
345+
color = GColor(required=True)
346+
unique_color = UniqueGColor(required=True)
347+
348+
schema = Schema(query=Query)
349+
350+
assert (
351+
str(schema).strip()
352+
== dedent(
353+
'''
354+
type Query {
355+
color: Color!
356+
uniqueColor: UniqueColor!
357+
}
358+
359+
"""original colors"""
360+
enum Color {
361+
RED
362+
YELLOW
363+
BLUE
364+
}
365+
366+
"""unique colors"""
367+
enum UniqueColor {
368+
RED
369+
YELLOW
370+
BLUE
371+
}
372+
'''
373+
).strip()
374+
)
375+
376+
331377
def test_enum_resolver_invalid():
332378
from enum import Enum as PyEnum
333379

0 commit comments

Comments
 (0)