https://github.com/ravencentric/stringenum
A small, dependency-free library offering additional enum.StrEnum subclasses and a backport for older Python versions.
https://github.com/ravencentric/stringenum
enum strenum
Last synced: over 1 year ago
JSON representation
A small, dependency-free library offering additional enum.StrEnum subclasses and a backport for older Python versions.
- Host: GitHub
- URL: https://github.com/ravencentric/stringenum
- Owner: Ravencentric
- License: mit
- Created: 2024-11-19T22:56:02.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-01T09:30:18.000Z (over 1 year ago)
- Last Synced: 2025-03-24T20:38:29.792Z (over 1 year ago)
- Topics: enum, strenum
- Language: Python
- Homepage:
- Size: 110 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# stringenum
[](https://pypi.org/project/stringenum/)






[](https://codecov.io/gh/Ravencentric/stringenum)
## Table Of Contents
* [About](#about)
* [Installation](#installation)
* [Usage](#usage)
* [License](#license)
# About
A small, dependency-free library offering additional [enum.StrEnum](https://docs.python.org/3/library/enum.html#enum.StrEnum) subclasses and a backport for older Python versions.
## Installation
`stringenum` is available on [PyPI](https://pypi.org/project/stringenum/), so you can simply use [pip](https://github.com/pypa/pip) to install it.
```sh
pip install stringenum
```
# Usage
- `stringenum.StrEnum` - A backport of [`enum.StrEnum`](https://docs.python.org/3/library/enum.html#enum.StrEnum). While `StrEnum` was added in Python 3.11, version 3.12 brought changes to the `__contains__` method in `EnumType`, which also impacts `StrEnum`. `stringenum.StrEnum` includes this `__contains__` update from Python 3.12.
- `enum.StrEnum` on Python <=3.11
```py
>>> 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
```py
>>> 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
```py
>>> 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 of `StrEnum` that ensures all members have unique values and names, raising a `ValueError` if duplicates are found.
```py
>>> class Fruits(DuplicateFreeStrEnum):
... APPLE = "apple"
... BANANA = "banana"
... ORANGE = "apple"
...
Traceback (most recent call last):
...
ValueError: Duplicate values are not allowed in Fruits:
```
- `stringenum.CaseInsensitiveStrEnum` - A subclass of `DuplicateFreeStrEnum` that supports case-insensitive lookup.
```py
>>> class Pet(CaseInsensitiveStrEnum):
... CAT = "meow"
... DOG = "bark"
>>> Pet("Meow")
>>> Pet("BARK")
>>> Pet["Cat"]
>>> Pet["dog"]
```
- `stringenum.DoubleSidedStrEnum` - A subclass of `DuplicateFreeStrEnum` that supports double-sided lookup, allowing both member values and member names to be used for lookups.
```py
>>> class Status(DoubleSidedStrEnum):
... PENDING = "waiting"
... REJECTED = "denied"
>>> Status("PENDING")
>>> Status("waiting")
>>> Status["REJECTED"]
>>> Status["denied"]
```
- `stringenum.DoubleSidedCaseInsensitiveStrEnum` - A subclass of `DuplicateFreeStrEnum` that supports case-insenitive double-sided lookup, allowing both member values and member names to be used for lookups.
```py
>>> class Status(DoubleSidedCaseInsensitiveStrEnum):
... PENDING = "waiting"
... REJECTED = "denied"
>>> Status("pending")
>>> Status("Waiting")
>>> Status["Rejected"]
>>> Status["DenieD"]
```
## License
Distributed under the [MIT](https://choosealicense.com/licenses/mit/) License. See [LICENSE](https://github.com/Ravencentric/stringenum/blob/main/LICENSE) for more information.