🧩 Enum-Deprecation
Add deprecation warnings to your Python
Enummembers — works for all Enum subclasses (Enum,IntEnum,StrEnum, or your own mixins).
✨ Features
-
✅ Works with
Enum,IntEnum,StrEnum, or any custom subclass -
⚙️ Emits
DeprecationWarningwhen deprecated members are accessed:- by attribute:
MyEnum.OLD - by name:
MyEnum["OLD"] - by value:
MyEnum(value)
- by attribute:
-
🧾 Fully type-checked (
mypy --strict) and tested on Python 3.11 – 3.14 -
🧱 Compatible with SQLAlchemy enums
-
🛡 Zero runtime dependencies
📦 Installation
pip install enum-deprecation
Python ≥ 3.11 is required (because of StrEnum support and typing.Self).
🧠 Usage
from enum import Enum, IntEnum, StrEnum, auto
from enum_deprecation import allow_deprecation, deprecated
import warnings
warnings.simplefilter("default") # enable DeprecationWarnings for demo
# --- Basic Enum --------------------------------------------------------------
class MyEnum(Enum, metaclass=allow_deprecation):
A = auto()
OLD = deprecated() # auto value, but deprecated
B = auto()
OLD2 = deprecated(42) # explicit value
OLD3 = deprecated("X", msg_tpl="{attr} will go away soon")
print(MyEnum.A)
print(MyEnum.OLD) # emits a DeprecationWarning
print(MyEnum["OLD"]) # warning again
print(MyEnum(42)) # warning for explicit value
💡 Works with StrEnum, IntEnum, and custom mixins
class MyStrEnum(StrEnum, metaclass=allow_deprecation):
OK = "ok"
OLD = deprecated("deprecated") # string value
class MyIntEnum(IntEnum, metaclass=allow_deprecation):
NEW = 1
OLD = deprecated(2)
⚙️ Custom deprecation messages
class Status(Enum, metaclass=allow_deprecation):
ACTIVE = 1
LEGACY = deprecated(2, msg_tpl="Status {attr} is legacy")
You can format {attr} anywhere in the message template.
🧩 How it works
The metaclass allow_deprecation wraps EnumMeta and:
- Records all members defined as
deprecated(...). - Replaces
deprecated(auto)with the proper sentinel soauto()still works. - Emits a
DeprecationWarningwhenever those members are retrieved via attribute, name, or value lookup.
It’s completely transparent to the rest of the enum machinery — the resulting class is still a regular Enum subclass.
🧰 SQLAlchemy compatibility
The resulting enums can be used directly with SQLAlchemy:
from sqlalchemy import Enum as SAEnum, Integer
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase): ...
class Thing(Base):
__tablename__ = "thing"
id: Mapped[int] = mapped_column(Integer, primary_key=True)
status: Mapped[MyEnum] = mapped_column(SAEnum(MyEnum, name="status_enum"))
⚠️ Note: accessing deprecated enum values during ORM loading will emit warnings.
If you wish to suppress them during DB round-trip, wrap with a small
TypeDecorator that uses MyEnum.__members__ directly.
🧪 Testing
tox # runs tests under Python 3.11–3.13
pytest -v # run in the current environment
mypy . # type checking
🧾 License
MIT License © 2025 Marcin Kornat
🧭 Links
- 📘 PyPI: https://pypi.org/project/enum-deprecation/
- 🧑💻 Source: https://github.com/mkornat/enum-deprecation
- 🧪 Tests & CI: see
.github/workflows/tests.yml
Metadata
Release files for enum-deprecation 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| enum_deprecation-0.1.1.tar.gz | 5.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| enum_deprecation-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 15.1 kB
Release files / enum_deprecation-0.1.1.tar.gz
| Download URL | enum_deprecation-0.1.1.tar.gz |
|---|---|
| Size | 5.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
619d559805ef9c8c477d8bf4b057d86896136b312d7e926fdc8822f9a59bf541
|
|
BLAKE2b-256 checksum How to use checksums |
f48bf2604a30bda7d0f8ce62698c42c41fc40c058a276e457d33a7bd13219d77
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.13.7 Linux/6.17.5-lqx1-3-lqx
|
Release files / enum_deprecation-0.1.1-py3-none-any.whl
| Download URL | enum_deprecation-0.1.1-py3-none-any.whl |
|---|---|
| Size | 9.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1bd48bccda4436d2da49dd9e9145bfd23994ff88e55ef5d3264eadddc23f3bc2
|
|
BLAKE2b-256 checksum How to use checksums |
a06eeb7daea82484725d791c7a22b7fe127b12bdda0c33bd5b247a00f0821c71
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.13.7 Linux/6.17.5-lqx1-3-lqx
|