Deprecate individual Enum members with warnings, for Enum/IntEnum/StrEnum/custom mixins.
Project description
🧩 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file enum_deprecation-0.1.1.tar.gz.
File metadata
- Download URL: enum_deprecation-0.1.1.tar.gz
- Upload date:
- Size: 5.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.13.7 Linux/6.17.5-lqx1-3-lqx
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
619d559805ef9c8c477d8bf4b057d86896136b312d7e926fdc8822f9a59bf541
|
|
| MD5 |
7273154b36264d296d254b7f3bd01d5d
|
|
| BLAKE2b-256 |
f48bf2604a30bda7d0f8ce62698c42c41fc40c058a276e457d33a7bd13219d77
|
File details
Details for the file enum_deprecation-0.1.1-py3-none-any.whl.
File metadata
- Download URL: enum_deprecation-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.13.7 Linux/6.17.5-lqx1-3-lqx
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bd48bccda4436d2da49dd9e9145bfd23994ff88e55ef5d3264eadddc23f3bc2
|
|
| MD5 |
06ab772405421283b4b5b1a16f3af2a4
|
|
| BLAKE2b-256 |
a06eeb7daea82484725d791c7a22b7fe127b12bdda0c33bd5b247a00f0821c71
|