Metadata-Version: 2.1
Name: enum-properties
Version: 1.8.1
Summary: Add properties and method specializations to Python enumeration values with a simple declarative syntax.
Home-page: https://enum-properties.readthedocs.io
License: MIT
Keywords: enum,properties,defines,field,dataclass,dataclasses
Author: Brian Kohan
Author-email: bckohan@gmail.com
Requires-Python: >=3.8,<4.0
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Project-URL: Repository, https://github.com/bckohan/enum-properties
Description-Content-Type: text/markdown

# Enum Properties

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![PyPI version](https://badge.fury.io/py/enum-properties.svg)](https://pypi.python.org/pypi/enum-properties/)
[![PyPI pyversions](https://img.shields.io/pypi/pyversions/enum-properties.svg)](https://pypi.python.org/pypi/enum-properties/)
[![PyPI status](https://img.shields.io/pypi/status/enum-properties.svg)](https://pypi.python.org/pypi/enum-properties)
[![Documentation Status](https://readthedocs.org/projects/enum-properties/badge/?version=latest)](http://enum-properties.readthedocs.io/?badge=latest/)
[![Code Cov](https://codecov.io/gh/bckohan/enum-properties/branch/main/graph/badge.svg?token=0IZOKN2DYL)](https://codecov.io/gh/bckohan/enum-properties)
[![Test Status](https://github.com/bckohan/enum-properties/workflows/test/badge.svg)](https://github.com/bckohan/enum-properties/actions/workflows/test.yml)
[![Lint Status](https://github.com/bckohan/enum-properties/workflows/lint/badge.svg)](https://github.com/bckohan/enum-properties/actions/workflows/lint.yml)

Add properties to Python enumeration values with a simple declarative syntax. [Enum Properties](https://enum-properties.readthedocs.io/en/latest) is a lightweight extension to [Python's Enum class](https://docs.python.org/3/library/enum.html). Example:

```python

    from enum_properties import EnumProperties, p
    from enum import auto

    class Color(EnumProperties, p('rgb'), p('hex')):

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

    # the named p() values in the Enum's inheritance become properties on
    # each value, matching the order in which they are specified

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

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

```

Properties may also be symmetrically mapped to enumeration values using s() values and type hints
are optional for better dev experience:

```python

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

    class Color(EnumProperties, s('rgb'), s('hex', case_fold=True)):

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

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

    # any named s() values in the Enum's inheritance become properties on
    # each value, and the enumeration value may be instantiated from the
    # property's value

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

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

    Color.RED.hex == 'ff0000'

```

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

```python

    from enum_properties import EnumProperties, specialize

    class SpecializedEnum(EnumProperties):

        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()'

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

```

Please report bugs and discuss features on the [issues page](https://github.com/bckohan/enum-properties/issues).

[Contributions](https://github.com/bckohan/enum-properties/blob/main/CONTRIBUTING.rst) are encouraged!

[Full documentation at read the docs.](https://enum-properties.readthedocs.io/en/latest)

## Installation

1. Clone enum-properties from GitHub_ or install a release off PyPI_ :

```bash
       pip install enum-properties
```

