A small, dependency-free library offering additional enum.StrEnum subclasses and a backport for older Python versions.
stringenum
is available on PyPI, so you can simply use pip to install it.
pip install stringenum
-
stringenum.StrEnum
- A backport ofenum.StrEnum
. WhileStrEnum
was added in Python 3.11, version 3.12 brought changes to the__contains__
method inEnumType
, which also impactsStrEnum
.stringenum.StrEnum
includes this__contains__
update from Python 3.12.-
enum.StrEnum
on Python <=3.11>>> class Color(enum.StrEnum): ... RED = "RED" ... GREEN = "GREEN" >>> Color.RED in Color True >>> "RED" in Color Traceback (most recent call last): ... TypeError: unsupported operand type(s) for 'in': 'str' and 'EnumType'
-
enum.StrEnum
on Python >=3.12>>> class Color(enum.StrEnum): ... RED = "RED" ... GREEN = "GREEN" >>> Color.RED in Color True >>> "RED" in Color True >>> 12 in Color False
-
stringenum.StrEnum
on Python >=3.9>>> class Color(stringenum.StrEnum): ... RED = "RED" ... GREEN = "GREEN" >>> Color.RED in Color True >>> "RED" in Color True >>> 12 in Color False
-
-
stringenum.DuplicateFreeStrEnum
- A subclass ofStrEnum
that ensures all members have unique values and names, raising aValueError
if duplicates are found.>>> class Fruits(DuplicateFreeStrEnum): ... APPLE = "apple" ... BANANA = "banana" ... ORANGE = "apple" ... Traceback (most recent call last): ... ValueError: Duplicate values are not allowed in Fruits: <Fruits.ORANGE: 'apple'>
-
stringenum.CaseInsensitiveStrEnum
- A subclass ofDuplicateFreeStrEnum
that supports case-insensitive lookup.>>> class Pet(CaseInsensitiveStrEnum): ... CAT = "meow" ... DOG = "bark" >>> Pet("Meow") <Pet.CAT: 'meow'> >>> Pet("BARK") <Pet.DOG: 'bark'> >>> Pet["Cat"] <Pet.CAT: 'meow'> >>> Pet["dog"] <Pet.DOG: 'bark'>
-
stringenum.DoubleSidedStrEnum
- A subclass ofDuplicateFreeStrEnum
that supports double-sided lookup, allowing both member values and member names to be used for lookups.>>> class Status(DoubleSidedStrEnum): ... PENDING = "waiting" ... REJECTED = "denied" >>> Status("PENDING") <Status.PENDING: 'waiting'> >>> Status("waiting") <Status.PENDING: 'waiting'> >>> Status["REJECTED"] <Status.REJECTED: 'denied'> >>> Status["denied"] <Status.REJECTED: 'denied'>
-
stringenum.DoubleSidedCaseInsensitiveStrEnum
- A subclass ofDuplicateFreeStrEnum
that supports case-insenitive double-sided lookup, allowing both member values and member names to be used for lookups.>>> class Status(DoubleSidedCaseInsensitiveStrEnum): ... PENDING = "waiting" ... REJECTED = "denied" >>> Status("pending") <Status.PENDING: 'waiting'> >>> Status("Waiting") <Status.PENDING: 'waiting'> >>> Status["Rejected"] <Status.REJECTED: 'denied'> >>> Status["DenieD"] <Status.REJECTED: 'denied'>
Distributed under the MIT License. See LICENSE for more information.