|
import enum |
|
|
|
|
|
class StrEnum(str, enum.Enum): |
|
""" |
|
Enum where members are also (and must be) strings (backported from Python 3.11). |
|
""" |
|
|
|
def __new__(cls, *values: str) -> "StrEnum": |
|
"values must already be of type `str`" |
|
if len(values) > 3: |
|
raise TypeError("too many arguments for str(): %r" % (values,)) |
|
if len(values) == 1: |
|
|
|
if not isinstance(values[0], str): |
|
raise TypeError("%r is not a string" % (values[0],)) |
|
if len(values) >= 2: |
|
|
|
if not isinstance(values[1], str): |
|
raise TypeError("encoding must be a string, not %r" % (values[1],)) |
|
if len(values) == 3: |
|
|
|
if not isinstance(values[2], str): |
|
raise TypeError("errors must be a string, not %r" % (values[2])) |
|
value = str(*values) |
|
member = str.__new__(cls, value) |
|
member._value_ = value |
|
return member |
|
|
|
@staticmethod |
|
def _generate_next_value_( |
|
name: str, start: int, count: int, last_values: list[str] |
|
) -> str: |
|
""" |
|
Return the lower-cased version of the member name. |
|
""" |
|
return name.lower() |
|
|