diff --git a/poker/utils/__init__.py b/poker/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/poker/utils/enum.py b/poker/utils/enum.py new file mode 100644 index 0000000..91e83a5 --- /dev/null +++ b/poker/utils/enum.py @@ -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() diff --git a/tests/utils/__init__.py b/tests/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/utils/test_enum.py b/tests/utils/test_enum.py new file mode 100644 index 0000000..9a84ee1 --- /dev/null +++ b/tests/utils/test_enum.py @@ -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"