summaryrefslogtreecommitdiff
path: root/meta/model/enum.py
diff options
context:
space:
mode:
Diffstat (limited to 'meta/model/enum.py')
-rw-r--r--meta/model/enum.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/meta/model/enum.py b/meta/model/enum.py
new file mode 100644
index 0000000000..08dda4bf4a
--- /dev/null
+++ b/meta/model/enum.py
@@ -0,0 +1,32 @@
+import enum
+
+
+class StrEnum(str, enum.Enum):
+ """
+ StrEnum is a Python ``enum.Enum`` that inherits from ``str``. The default
+ ``auto()`` behavior uses the member name as its value.
+
+ Example usage::
+
+ class Example(StrEnum):
+ UPPER_CASE = auto()
+ lower_case = auto()
+ MixedCase = auto()
+
+ assert Example.UPPER_CASE == "UPPER_CASE"
+ assert Example.lower_case == "lower_case"
+ assert Example.MixedCase == "MixedCase"
+ """
+
+ def __new__(cls, value, *args, **kwargs):
+ if not isinstance(value, (str, enum.auto)):
+ raise TypeError(
+ f"Values of StrEnums must be strings: {value!r} is a {type(value)}"
+ )
+ return super().__new__(cls, value, *args, **kwargs)
+
+ def __str__(self):
+ return str(self.value)
+
+ def _generate_next_value_(name, *_):
+ return name