From 88fe5c2ea17a56f14bcfeae6699b71dbc00fa0ca Mon Sep 17 00:00:00 2001 From: Rens Groothuijsen Date: Sat, 12 Nov 2022 22:16:47 +0100 Subject: [PATCH 1/2] Make Graphene enums iterable like Python enums --- graphene/tests/issues/test_1264.py | 13 +++++++++++++ graphene/types/enum.py | 3 +++ 2 files changed, 16 insertions(+) create mode 100644 graphene/tests/issues/test_1264.py diff --git a/graphene/tests/issues/test_1264.py b/graphene/tests/issues/test_1264.py new file mode 100644 index 000000000..48be0a8a0 --- /dev/null +++ b/graphene/tests/issues/test_1264.py @@ -0,0 +1,13 @@ +from graphene.types.enum import Enum + + +def test_enum_iteration(): + class TestEnum(Enum): + FIRST = 1 + SECOND = 2 + + result = [] + expected_values = ["FIRST", "SECOND"] + for c in TestEnum: + result.append(c.name) + assert result == expected_values diff --git a/graphene/types/enum.py b/graphene/types/enum.py index 0f68236b4..58e65c69e 100644 --- a/graphene/types/enum.py +++ b/graphene/types/enum.py @@ -56,6 +56,9 @@ def __call__(cls, *args, **kwargs): # noqa: N805 return super(EnumMeta, cls).__call__(*args, **kwargs) # return cls._meta.enum(*args, **kwargs) + def __iter__(cls): + return cls._meta.enum.__iter__() + def from_enum( cls, enum, name=None, description=None, deprecation_reason=None ): # noqa: N805 From ca64b5175c826867bf48c8a3ac5e374cf6ea9a32 Mon Sep 17 00:00:00 2001 From: Rens Groothuijsen Date: Wed, 16 Nov 2022 19:44:32 +0100 Subject: [PATCH 2/2] Add test for iterable enum instance creation and move tests to test_enum.py --- graphene/tests/issues/test_1264.py | 13 ------------- graphene/types/tests/test_enum.py | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 13 deletions(-) delete mode 100644 graphene/tests/issues/test_1264.py diff --git a/graphene/tests/issues/test_1264.py b/graphene/tests/issues/test_1264.py deleted file mode 100644 index 48be0a8a0..000000000 --- a/graphene/tests/issues/test_1264.py +++ /dev/null @@ -1,13 +0,0 @@ -from graphene.types.enum import Enum - - -def test_enum_iteration(): - class TestEnum(Enum): - FIRST = 1 - SECOND = 2 - - result = [] - expected_values = ["FIRST", "SECOND"] - for c in TestEnum: - result.append(c.name) - assert result == expected_values diff --git a/graphene/types/tests/test_enum.py b/graphene/types/tests/test_enum.py index ab1e093e8..298cc233b 100644 --- a/graphene/types/tests/test_enum.py +++ b/graphene/types/tests/test_enum.py @@ -543,3 +543,25 @@ def test_hashable_instance_creation_enum(): assert trilogy_map[Episode.NEWHOPE] == "better" assert trilogy_map[Episode.EMPIRE] == "best" assert trilogy_map[5] == "foo" + + +def test_enum_iteration(): + class TestEnum(Enum): + FIRST = 1 + SECOND = 2 + + result = [] + expected_values = ["FIRST", "SECOND"] + for c in TestEnum: + result.append(c.name) + assert result == expected_values + + +def test_iterable_instance_creation_enum(): + TestEnum = Enum("TestEnum", [("FIRST", 1), ("SECOND", 2)]) + + result = [] + expected_values = ["FIRST", "SECOND"] + for c in TestEnum: + result.append(c.name) + assert result == expected_values