Skip to main content

A small library for adding total orderings to enums

Project description

ordered_enum

CI Downloads

ordered_enum is a small library for adding (total) orderings to enum.Enums.

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.

pip3 install ordered_enum

Usage

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.

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
  3. Moving enum values around changes their ordering

Therefore, you should either not depend on a specific ordering or ensure that your order of definition is the order you'd like.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ordered_enum-0.0.8a1.tar.gz (2.8 kB view details)

Uploaded Source

Built Distribution

ordered_enum-0.0.8a1-py3-none-any.whl (3.5 kB view details)

Uploaded Python 3

File details

Details for the file ordered_enum-0.0.8a1.tar.gz.

File metadata

  • Download URL: ordered_enum-0.0.8a1.tar.gz
  • Upload date:
  • Size: 2.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for ordered_enum-0.0.8a1.tar.gz
Algorithm Hash digest
SHA256 93f7f7f76452140e72224418ab923955e51860d4fa48ac027ca9942d68ec8aad
MD5 5452eb3c96d0fe1e73139f4d31c37f36
BLAKE2b-256 aa3b139013b47a6eb2b9f2aff40b73ddce9745201d5ccc2a15a72f74ee9df6fe

See more details on using hashes here.

File details

Details for the file ordered_enum-0.0.8a1-py3-none-any.whl.

File metadata

File hashes

Hashes for ordered_enum-0.0.8a1-py3-none-any.whl
Algorithm Hash digest
SHA256 43edbc13a5e9f46524030e75ceffbc68f9af1b4e33439386ae9e4bd76ab841ef
MD5 8c79a9b669cd66b6db1c4211676e0f33
BLAKE2b-256 ffabb411543edd98f2fe5e716373debb6c3142eaddf7cb16300576c373f76523

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page