StrEnum
StrEnum is a Python enum.Enum that inherits from str to complement
enum.IntEnum in the standard library. Supports python 3.7+.
Installation
You can use pip to install.
pip install StrEnum
Usage
from enum import auto
from strenum import StrEnum
class HttpMethod(StrEnum):
GET = auto()
HEAD = auto()
POST = auto()
PUT = auto()
DELETE = auto()
CONNECT = auto()
OPTIONS = auto()
TRACE = auto()
PATCH = auto()
assert HttpMethod.GET == "GET"
# You can use StrEnum values just like strings:
import urllib.request
req = urllib.request.Request('https://www.python.org/', method=HttpMethod.HEAD)
with urllib.request.urlopen(req) as response:
html = response.read()
assert len(html) == 0 # HEAD requests do not (usually) include a body
There are classes whose auto() value folds each member name to upper or lower
case:
from enum import auto
from strenum import LowercaseStrEnum, UppercaseStrEnum
class Tag(LowercaseStrEnum):
Head = auto()
Body = auto()
Div = auto()
assert Tag.Head == "head"
assert Tag.Body == "body"
assert Tag.Div == "div"
class HttpMethod(UppercaseStrEnum):
Get = auto()
Head = auto()
Post = auto()
assert HttpMethod.Get == "GET"
assert HttpMethod.Head == "HEAD"
assert HttpMethod.Post == "POST"
As well as classes whose auto() value converts each member name to camelCase,
PascalCase, kebab-case, snake_case and MACRO_CASE:
from enum import auto
from strenum import CamelCaseStrEnum, PascalCaseStrEnum
from strenum import KebabCaseStrEnum, SnakeCaseStrEnum
from strenum import MacroCaseStrEnum
class CamelTestEnum(CamelCaseStrEnum):
OneTwoThree = auto()
class PascalTestEnum(PascalCaseStrEnum):
OneTwoThree = auto()
class KebabTestEnum(KebabCaseStrEnum):
OneTwoThree = auto()
class SnakeTestEnum(SnakeCaseStrEnum):
OneTwoThree = auto()
class MacroTestEnum(MacroCaseStrEnum):
OneTwoThree = auto()
assert CamelTestEnum.OneTwoThree == "oneTwoThree"
assert PascalTestEnum.OneTwoThree == "OneTwoThree"
assert KebabTestEnum.OneTwoThree == "one-two-three"
assert SnakeTestEnum.OneTwoThree == "one_two_three"
assert MacroTestEnum.OneTwoThree == "ONE_TWO_THREE"
As with any Enum you can, of course, manually assign values.
from strenum import StrEnum
class Shape(StrEnum):
CIRCLE = "Circle"
assert Shape.CIRCLE == "Circle"
Doing this with the case-changing classes, though, won't manipulate values--whatever you assign is the value they end up with.
from strenum import KebabCaseStrEnum
class Shape(KebabCaseStrEnum):
CIRCLE = "Circle"
# This will raise an AssertionError because the value wasn't converted to kebab-case.
assert Shape.CIRCLE == "circle"
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please ensure tests pass before submitting a PR. This repository uses Black and Pylint for consistency. Both are run automatically as part of the test suite.
Running the tests
Tests can be run using make:
make test
This will create a virutal environment, install the module and its test dependencies and run the tests. Alternatively you can do the same thing manually:
python3 -m venv .venv
.venv/bin/pip install .[test]
.venv/bin/pytest
License
N.B. Starting with Python 3.11, enum.StrEnum is available in the standard
library. This implementation is not a drop-in replacement for the standard
library implementation. Specifically, the Python devs have decided to case fold
name to lowercase by default when auto() is used which I think violates the
principle of least surprise.
Release files for StrEnum 0.4.15
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| StrEnum-0.4.15.tar.gz | 23.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| StrEnum-0.4.15-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 32.2 kB
Release files / StrEnum-0.4.15.tar.gz
| Download URL | StrEnum-0.4.15.tar.gz |
|---|---|
| Size | 23.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
878fb5ab705442070e4dd1929bb5e2249511c0bcf2b0eeacf3bcd80875c82eff
|
|
BLAKE2b-256 checksum How to use checksums |
85ad430fb60d90e1d112a62ff57bdd1f286ec73a2a0331272febfddd21f330e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.9
|
Release files / StrEnum-0.4.15-py3-none-any.whl
| Download URL | StrEnum-0.4.15-py3-none-any.whl |
|---|---|
| Size | 8.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a30cda4af7cc6b5bf52c8055bc4bf4b2b6b14a93b574626da33df53cf7740659
|
|
BLAKE2b-256 checksum How to use checksums |
8169297302c5f5f59c862faa31e6cb9a4cd74721cd1e052b38e464c5b402df8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.9
|