feat: Implement auto-naming string enum
This commit is contained in:
parent
3899da2f52
commit
5efd77728d
|
@ -0,0 +1,27 @@
|
||||||
|
from enum import StrEnum
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
class AutoName(StrEnum):
|
||||||
|
"""Use the lower case name as the value for Python Enum (default would be integers).
|
||||||
|
|
||||||
|
Inherits from str to ensure all types are string and as a bonus it becomes JSON
|
||||||
|
serializable.
|
||||||
|
|
||||||
|
See here for more information:
|
||||||
|
https://docs.python.org/3/library/enum.html#using-automatic-values
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
"""Return string representation."""
|
||||||
|
return str(self.value)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _generate_next_value_(
|
||||||
|
name: str, start: int, count: int, last_values: list[Any]
|
||||||
|
) -> str:
|
||||||
|
"""Enum standard structure - the next value.
|
||||||
|
|
||||||
|
See this on @staticmethod: https://github.com/python/mypy/issues/7591
|
||||||
|
"""
|
||||||
|
return name.lower()
|
|
@ -0,0 +1,16 @@
|
||||||
|
from enum import auto
|
||||||
|
|
||||||
|
from poker.utils.enum import AutoName
|
||||||
|
|
||||||
|
|
||||||
|
def test_auto_name() -> None:
|
||||||
|
class Example(AutoName):
|
||||||
|
"""Example Enum."""
|
||||||
|
|
||||||
|
foo = auto()
|
||||||
|
BAR = auto()
|
||||||
|
WeIrD = auto()
|
||||||
|
|
||||||
|
assert Example.foo.value == "foo"
|
||||||
|
assert Example.BAR.value == "bar"
|
||||||
|
assert Example.WeIrD.value == "weird"
|
Loading…
Reference in New Issue