Skip to main content

Enum Properties

License: MIT Ruff PyPI version PyPI pyversions PyPI status PyPI - Types Documentation Status Code Cov Test Status Lint Status OpenSSF Scorecard OpenSSF Best Practices

Add properties to Python enumeration values with a simple declarative syntax. Enum Properties is a lightweight extension to Python's Enum class. Example:

import typing as t
from enum_properties import EnumProperties
from enum import auto


class Color(EnumProperties):

    rgb: t.Tuple[int, int, int]
    hex: str

    # name   value      rgb       hex
    RED    = auto(), (1, 0, 0), 'ff0000'
    GREEN  = auto(), (0, 1, 0), '00ff00'
    BLUE   = auto(), (0, 0, 1), '0000ff'

# the type hints on the Enum class become properties on
# each value, matching the order in which they are specified


assert Color.RED.rgb   == (1, 0, 0)
assert Color.GREEN.rgb == (0, 1, 0)
assert Color.BLUE.rgb  == (0, 0, 1)

assert Color.RED.hex   == 'ff0000'
assert Color.GREEN.hex == '00ff00'
assert Color.BLUE.hex  == '0000ff'

Properties may also be symmetrically mapped to enumeration values using annotated type hints:

import typing as t
from enum_properties import EnumProperties, Symmetric
from enum import auto


class Color(EnumProperties):

    rgb: t.Annotated[t.Tuple[int, int, int], Symmetric()]
    hex: t.Annotated[str, Symmetric(case_fold=True)]

    RED    = auto(), (1, 0, 0), 'ff0000'
    GREEN  = auto(), (0, 1, 0), '00ff00'
    BLUE   = auto(), (0, 0, 1), '0000ff'

# Enumeration instances may be instantiated from any Symmetric property
# values. Use case_fold for case insensitive matching


assert Color((1, 0, 0)) is Color.RED
assert Color((0, 1, 0)) is Color.GREEN
assert Color((0, 0, 1)) is Color.BLUE

assert Color('ff0000') is Color.RED
assert Color('FF0000') is Color.RED  # case_fold makes mapping case insensitive
assert Color('00ff00') is Color.GREEN
assert Color('00FF00') is Color.GREEN
assert Color('0000ff') is Color.BLUE
assert Color('0000FF') is Color.BLUE

assert Color.RED.hex == 'ff0000'

Member functions may also be specialized to each enumeration value, using the @specialize decorator.

from enum_properties import EnumProperties as Enum, specialize


class SpecializedEnum(Enum):

    ONE   = 1
    TWO   = 2
    THREE = 3

    @specialize(ONE)
    def method(self):
        return 'method_one()'

    @specialize(TWO)
    def method(self):
        return 'method_two()'

    @specialize(THREE)
    def method(self):
        return 'method_three()'

assert SpecializedEnum.ONE.method() == 'method_one()'
assert SpecializedEnum.TWO.method() == 'method_two()'
assert SpecializedEnum.THREE.method() == 'method_three()'

Please report bugs and discuss features on the issues page.

Contributions are encouraged!

Full documentation at read the docs.

Installation

  1. Clone enum-properties from GitHub or install a release off PyPI:
       pip install enum-properties

Download files

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

Source Distribution

enum_properties-2.8.0.tar.gz (79.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

enum_properties-2.8.0-py3-none-any.whl (16.0 kB view details)

Uploaded Python 3

File details

Details for the file enum_properties-2.8.0.tar.gz.

File metadata

  • Download URL: enum_properties-2.8.0.tar.gz
  • Upload date:
  • Size: 79.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for enum_properties-2.8.0.tar.gz
Algorithm Hash digest
SHA256 6de04ca6490107856054d79ec86af4b146508733b96e82f52d0079b19527e24a
MD5 995c5ec1beff6102c829cb46b779cadc
BLAKE2b-256 9433d6d26e342f7bb6472aa2079bc90b15a691e46c9fb42bf5d96177416b0b89

See more details on using hashes here.

Provenance

The following attestation bundles were made for enum_properties-2.8.0.tar.gz:

Publisher: release.yml on bckohan/enum-properties

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file enum_properties-2.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for enum_properties-2.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 12edef00e4a32e398237bb24a481a4a230a392df50b212b76583dfda06e1cdc8
MD5 7e6a97f38be62b110f83be0a0179a075
BLAKE2b-256 2018d20da6b3394f19876b7704c6582945c20a99a056708a782141229a650bfb

See more details on using hashes here.

Provenance

The following attestation bundles were made for enum_properties-2.8.0-py3-none-any.whl:

Publisher: release.yml on bckohan/enum-properties

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page