From a78271c5e601f60b35d0d1034d6c8dbd9fa2498d Mon Sep 17 00:00:00 2001 From: ehooo Date: Fri, 28 Oct 2022 00:10:52 +0200 Subject: [PATCH 1/3] Fix enum conversion Issue #281 TODO tests --- uplink/converters/keys.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/uplink/converters/keys.py b/uplink/converters/keys.py index 2ca40d8..4fda9ef 100644 --- a/uplink/converters/keys.py +++ b/uplink/converters/keys.py @@ -5,6 +5,11 @@ """ # Standard library imports import functools +try: + from enum import Enum +except ImportError: + # Enum is added on version 3.4 + Enum = type(None) # Local imports @@ -86,6 +91,8 @@ class Sequence(CompositeKey): def convert(self, converter, value): if isinstance(value, (list, tuple)): return list(map(converter, value)) + elif isinstance(value, Enum) and hasattr(value, 'value'): + return value.value else: return converter(value) From 8e1bc88fd5b55191c53082dee2aad4ab4e5b691b Mon Sep 17 00:00:00 2001 From: ehooo Date: Fri, 28 Oct 2022 00:19:00 +0200 Subject: [PATCH 2/3] Test for fix enum conversion Fix #281 --- tests/unit/test_converters.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/unit/test_converters.py b/tests/unit/test_converters.py index 4925940..5b2c695 100644 --- a/tests/unit/test_converters.py +++ b/tests/unit/test_converters.py @@ -347,6 +347,30 @@ def test_convert_not_sequence(self): # Verify assert value == "1" + def test_convert_enum(self): + try: + from enum import Enum + + class OptionType(Enum): + OP1 = "FirstOp" + OP2 = "SecondOp" + OP3 = "ThirdOp" + + # Setup + registry = converters.ConverterFactoryRegistry( + (converters.StandardConverter(),) + ) + key = converters.keys.Sequence(converters.keys.CONVERT_TO_STRING) + + # Run + converter = registry[key](None) + value = converter(OptionType.OP1) + + # Verify + assert value == "FirstOp" + except ImportError: + pass + def test_eq(self): assert converters.keys.Sequence(0) == converters.keys.Sequence(0) assert not (converters.keys.Sequence(1) == converters.keys.Sequence(0)) From 8f67f98d1e6a32b25c44a8931d656b73a999d918 Mon Sep 17 00:00:00 2001 From: ehooo Date: Fri, 28 Oct 2022 19:58:10 +0200 Subject: [PATCH 3/3] Exclude coverage for ImportError --- uplink/converters/keys.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uplink/converters/keys.py b/uplink/converters/keys.py index 4fda9ef..8dda471 100644 --- a/uplink/converters/keys.py +++ b/uplink/converters/keys.py @@ -7,7 +7,7 @@ import functools try: from enum import Enum -except ImportError: +except ImportError: # pragma: no cover # Enum is added on version 3.4 Enum = type(None)