Metadata-Version: 2.4
Name: richenum
Version: 2.1.0
Summary: Enum library for python.
License: MIT
License-File: AUTHORS.md
License-File: LICENSE.txt
Keywords: python,enum,richenum
Author: Hearsay Social
Author-email: opensource@hearsaysocial.com
Requires-Python: >=3.8.1,<4.0.0
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
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: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Project-URL: Homepage, https://github.com/hearsaycorp/richenum
Project-URL: Repository, https://github.com/hearsaycorp/richenum
Description-Content-Type: text/markdown

# richenum

![Build Status](https://github.com/hearsaycorp/richenum/actions/workflows/python-version-tests.yml/badge.svg)
[![Latest PyPI Version](https://img.shields.io/pypi/v/richenum.svg)](https://pypi.python.org/pypi/richenum/)
[![Python versions](https://img.shields.io/pypi/pyversions/richenum.svg)](https://pypi.org/project/richenum/)
[![PyPI Downloads](https://img.shields.io/pypi/dm/richenum.svg)](https://pypi.org/project/richenum/)

## About

An enum library for Python.

- `enum`: A simple enum implementation that maps a variable to a constant.
- `RichEnum`: An enum implementation that offers more functionality than a basic enum, including a canonical name and a display name.
- `OrderedRichEnum`: Like `RichEnum`, but each enum value also has an index and iteration is sorted by index.

## Links

- [GitHub](https://github.com/hearsaycorp/richenum)
- [PyPI](https://pypi.python.org/pypi/richenum/)

## Installation

```bash
pip install richenum
```

## Example Usage

### enum

```python
>>> from richenum import enum
>>> MY_ENUM = enum(FOO=1, BAR=2)
>>> MY_ENUM.FOO
1
>>> MY_ENUM.BAR
2
```

### RichEnum

```python
>>> from richenum import RichEnum, RichEnumValue
>>> class MyRichEnum(RichEnum):
...    FOO = RichEnumValue(canonical_name="foo", display_name="Foo")
...    BAR = RichEnumValue(canonical_name="bar", display_name="Bar")
...
>>> MyRichEnum.FOO
RichEnumValue - canonical_name: 'foo'  display_name: 'Foo'
>>> MyRichEnum.from_canonical("foo")
RichEnumValue - canonical_name: 'foo'  display_name: 'Foo'
```

### OrderedRichEnum

```python
>>> from richenum import OrderedRichEnum, OrderedRichEnumValue
>>> class MyOrderedRichEnum(OrderedRichEnum):
...    FOO = OrderedRichEnumValue(index=1, canonical_name="foo", display_name="Foo")
...    BAR = OrderedRichEnumValue(index=2, canonical_name="bar", display_name="Bar")
...
>>> MyOrderedRichEnum.FOO
OrderedRichEnumValue - idx: 1  canonical_name: 'foo'  display_name: 'Foo'
>>> MyOrderedRichEnum.from_canonical("foo")
OrderedRichEnumValue - idx: 1  canonical_name: 'foo'  display_name: 'Foo'
>>> MyOrderedRichEnum.from_index(1)
OrderedRichEnumValue - idx: 1  canonical_name: 'foo'  display_name: 'Foo'
```

## Related Packages

- `django-richenum`: Makes `RichEnum` and `OrderedRichEnum` available as model and form fields in Django.
  [GitHub](https://github.com/hearsaycorp/django-richenum), [PyPI](https://pypi.python.org/pypi/django-richenum/)
- `enum`: Starting with Python 3.4, there is a standard library for enumerations. This package has a similar API but is not directly compatible.

## Contributing

1. Fork the repo from [GitHub](https://github.com/hearsaycorp/richenum).
2. Make your changes.
3. Add unittests for your changes.
4. Run [pep8](https://pypi.python.org/pypi/pep8), [pyflakes](https://pypi.python.org/pypi/pyflakes), and [pylint](https://pypi.python.org/pypi/pylint) to make sure your changes follow the Python style guide and do not have any errors.
5. Add yourself to the AUTHORS file (in alphabetical order).
6. Send a pull request from your fork to the main repo.

# Changelog

## 2.1.0 (2026-16-03)
- Add Python 3.14 support and migrate to Poetry

## 2.0.2 (2024-10-01)

- Remove unavailable link for blog post from `README.md`.

## 2.0.1 (2024-06-06)

- Fix `README.md`.

## 2.0.0 (2024-06-04)

- Remove six
- Remove Python 3.7 support
- Add Python 3.9 and 3.10 support
- Remove `tox.ini`

## 1.2.1 (2016-09-16)

- `EnumLookupError` now inherits from built-in `LookupError`.

## 1.2.0 (2016-04-15)

- Add simple `LookupError` members that are thrown when `RichEnum.lookup` is called for a nonexistent attr/val pair.
- Users can choose to catch either the specific `LookupError` or continue to catch `EnumLookupError`.

## 1.1.0 (2014-04-17)

- Support for Python 3 and PyPy

## 1.0.4 (2013-12-03)

- Better unicode handling in `__str__`, `__unicode__`, and `__repr__`.

## 1.0.3 (2013-12-03)

- Stop throwing warnings.

## 1.0.2 (2013-11-05)

- Suppress warnings from mismatched type comparisons when generated in `RichEnum.lookup`.

## 1.0.1 (2013-09-20)

- Raise warnings when comparing enum values to other types, but not when checking membership or comparing to `None`.

## 1.0.0 (2013-08-16)

- Initial public release.

