From e2f0fa99ebeef6e4565e5e975868883b085c1be3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Portela=20Afonso?= Date: Mon, 19 Dec 2022 14:42:09 +0000 Subject: [PATCH] feat(enum): add StringEnum to core (#17) --- requirements-dev.txt | 1 + src/core/ydata/core/enum/string_enum.py | 30 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/core/ydata/core/enum/string_enum.py diff --git a/requirements-dev.txt b/requirements-dev.txt index ea7bb7a..d22e803 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,2 +1,3 @@ prospector==1.7.* +pylint==2.15.6 pytest==7.1.* diff --git a/src/core/ydata/core/enum/string_enum.py b/src/core/ydata/core/enum/string_enum.py new file mode 100644 index 0000000..573fce7 --- /dev/null +++ b/src/core/ydata/core/enum/string_enum.py @@ -0,0 +1,30 @@ +from enum import Enum + + +class StringEnum(Enum): + @classmethod + def _missing_(cls, value): + if isinstance(value, str): + upper_value = value.upper() + + key = StringEnum._key_from_str_(upper_value) + if key is not None: + return key + + lower_value = value.lower() + + key = StringEnum._key_from_str_(lower_value) + if key is not None: + return key + + raise ValueError(f"{value} is not a valid {cls.__name__}") + + @classmethod + def _key_from_str_(cls, value: str): + if value in cls.__members__: + return cls(value) + + return None + + def __eq__(self, o: object) -> bool: + return self.value == o.value