Enum Utilities
SemanticallyOrderedEnum
Adds comparison operators (<, <=, >, >=) based on a caller-defined semantic ordering.
from enum import StrEnum
from fields_metadata import SemanticallyOrderedEnum
class Priority(SemanticallyOrderedEnum["Priority"], StrEnum):
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
CRITICAL = "critical"
@classmethod
def semantic_order(cls) -> tuple["Priority", ...]:
return (cls.LOW, cls.MEDIUM, cls.HIGH, cls.CRITICAL)
assert Priority.LOW < Priority.HIGH
assert sorted([Priority.CRITICAL, Priority.LOW, Priority.MEDIUM]) == [
Priority.LOW, Priority.MEDIUM, Priority.CRITICAL
]
DocumentedEnum and Documented
DocumentedEnum is a mixin that requires a description property per member.
Documented is a runtime_checkable protocol that checks for the same property.
from enum import StrEnum
from fields_metadata import DocumentedEnum, Documented
class Status(DocumentedEnum, StrEnum):
PENDING = "pending"
ACTIVE = "active"
ARCHIVED = "archived"
@property
def description(self) -> str:
return {
Status.PENDING: "Awaiting activation",
Status.ACTIVE: "Currently active",
Status.ARCHIVED: "No longer in use",
}[self]
assert isinstance(Status.ACTIVE, Documented)
assert Status.ACTIVE.description == "Currently active"