Totally ordered enums for Python.
https://github.com/woodruffw/ordered_enum.git
ordered_enum ============
ordered_enum is a small library for adding (total) orderings to enum.Enums.
It provides two ordering behaviors:
ordered_enum.OrderedEnum: total ordering by definitionordered_enum.ValueOrderedEnum: "total" ordering by member valuesordered_enum requires Python 3.9 or newer.
pip3 install ordered_enum
To use ordered_enum, just use OrderedEnum or ValueOrderedEnum as your parent class:
from ordered_enum import OrderedEnum
class State(OrderedEnum):
Disabled = 4
Loaded = 3
Waiting = 2
Running = 1
Dead = 0
assert(State.Disabled < State.Loaded)
assert(sorted([State.Dead, State.Waiting]) == [State.Waiting, State.Dead])
OrderedEnum doesn't require @enum.unique (or unique values at all); it uses the order of
definition to impose an ordering between members.
If you'd like to impose an ordering based on member values, you can use ValueOrderedEnum instead:
import enum
from ordered_enum import ValueOrderedEnum
@enum.unique
class State(ValueOrderedEnum):
Disabled = 4
Loaded = 3
Waiting = 2
Running = 1
Dead = 0
assert(State.Disabled > State.Loaded)
assert(sorted([State.Waiting, State.Dead]) == [State.Dead, State.Waiting])
ValueOrderedEnum does require unique values, which can be enforced via @enum.unique.
Failing to make a ValueOrderedEnum's values unique will result in a silently broken ordering.
As mentioned above, ordered_enum.OrderedEnum provides an ordering of enum values based on their order
of definition in the class. This means that: