https://github.com/woodruffw/ordered_enum
Totally ordered enums for Python.
https://github.com/woodruffw/ordered_enum
enum python
Last synced: 6 months ago
JSON representation
Totally ordered enums for Python.
- Host: GitHub
- URL: https://github.com/woodruffw/ordered_enum
- Owner: woodruffw
- License: mit
- Created: 2020-02-18T02:38:38.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2025-01-27T15:46:04.000Z (8 months ago)
- Last Synced: 2025-04-06T07:18:43.269Z (6 months ago)
- Topics: enum, python
- Language: Python
- Homepage: https://pypi.org/project/ordered-enum/
- Size: 73.2 KB
- Stars: 30
- Watchers: 2
- Forks: 3
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
ordered_enum
============[](https://github.com/woodruffw/ordered_enum/actions/workflows/ci.yml)
[](https://pepy.tech/project/ordered-enum)**ordered_enum** is a small library for adding (total) orderings to `enum.Enum`s.
It provides two ordering behaviors:
* `ordered_enum.OrderedEnum`: total ordering by definition
* `ordered_enum.ValueOrderedEnum`: "total" ordering by member values## Installation
**ordered_enum** requires Python 3.7 or newer.
```bash
pip3 install ordered_enum
```## Usage
To use **ordered_enum**, just use `OrderedEnum` or `ValueOrderedEnum` as your parent class:
```python
from ordered_enum import OrderedEnumclass State(OrderedEnum):
Disabled = 4
Loaded = 3
Waiting = 2
Running = 1
Dead = 0assert(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:
```python
import enum
from ordered_enum import ValueOrderedEnum@enum.unique
class State(ValueOrderedEnum):
Disabled = 4
Loaded = 3
Waiting = 2
Running = 1
Dead = 0assert(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.## Caveats
As mentioned above, `ordered_enum.OrderedEnum` provides an ordering of enum values based on their order
of definition in the class. This means that:1. Enum values doesn't have to be unique for **ordered_enum** to work
2. Enum values can be heterogeneously typed
2. Moving enum values around changes their orderingTherefore, you should either not depend on a specific ordering **or** ensure that your
order of definition is the order you'd like.