Skip to main content

MatrixEnum Logo

MatrixEnum

Build Status PyPI - Python Version

MatrixEnum is a package that provides convenient extensions to python's builtin enums to allow for simple construction of enum multi-dimensional members.

from matrix_enum import MatrixEnum, Member

class MyEnum(MatrixEnum):
    ONE = Member(digit=1, title='one', roman='I')
    TWO = Member(digit=2, title='two', roman='II')

# Keeps classic enum functionality
>>> MyEnum.ONE is MyEnum.TWO
False
>>> MyEnum.ONE is MyEnum.ONE
True

# Automatically adds attributes to all enum members
>>> MyEnum.ONE.digit
1
>>> MyEnum.ONE.title
'one'

# `Member` attributes are reversible
>>> MyEnum.ONE is MyEnum(1)
True
>>> MyEnum.TWO is MyEnum('II')
True
>>> 1 in MyEnum
True
>>> 'two' in MyEnum
True

Installation

You can either install the package with pip:

$ pip install matrix_enum

or clone the repo and install:

$ git clone https://github.com/klaviyo/matrix_enum.git
$ pip install -e matrix_enum/

Local Development

For information on local development, testing, and contributing, see the Contribution guidelines for this project.


API

MatrixEnum and Members

MatrixEnum extends the basic python Enum with the following restrictions:

  • All members must be of type Member.
  • All Members must have the same attributes.
  • All values of Member attributes must be unique across ALL attributes.
  • Member attributes cannot use any reserved __dunder__ attributes or the names name or value.

Valid

The following is a valid MatrixEnum:

from matrix_enum import MatrixEnum, Member

class MyEnum(MatrixEnum):
    ONE = Member(digit=1, title='one', roman='I')
    TWO = Member(digit=2, title='two', roman='II')

Invalid Enums

All of the following are INVALID MatrixEnums and will raise a ValueError:

# INVALID: The members have to be of class Member
class NonMembers(MatrixEnum):
    ONE = 1
    TWO = 2

# INVALID: Members have the same value for 'digit'
class DuplicateValue(MatrixEnum):
    ONE = Member(digit=1)
    OTHER_ONE = Member(digit=1)

# INVALID: Members can't have the same value across different attributes
class DuplicateValue2(MatrixEnum):
    FOO = Member(digit=1, other_digit=2)
    BAR = Member(digit=3, other_digit=1)

# INVALID: Members have different attributes
class UnevenAttrs(MatrixEnum):
    ONE = Member(digit=1, title='one')
    TWO = Member(digit=2, roman='II')

Adding extras

You can add duplicated values to Members using the extra method.

These extras will be available as attributes to members but cannot be used to lookup enum members by value.

class AnimalEnum(MatrixEnum):
    CAT = Member(title='cat').extra(num_paws=4)
    DOG = Member(title='dog').extra(num_paws=4)
    FISH = Member(title='fish').extra(num_paws=0)

>>> AnimalEnum.CAT.num_paws
4
>>> AnimalEnum(4)
ValueError: 4 is not a valid AnimalEnum

Links


This package is owned and maintained by Klaviyo. Check out our eng blog.

Release files for matrix-enum 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for matrix-enum 1.1.0
File Size Uploaded
matrix_enum-1.1.0.tar.gz 6.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for matrix-enum 1.1.0
File Interpreter ABI Platform
matrix_enum-1.1.0-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 13.4 kB

Release files / matrix_enum-1.1.0.tar.gz

Download URL matrix_enum-1.1.0.tar.gz
Size 6.5 kB
Tags Source
SHA-256 checksum
How to use checksums
59f8d56237451721f80deecd4c979b3c4dbca9ba5c48efa40c21f7b17289cdc1
BLAKE2b-256 checksum
How to use checksums
0aecc7cbd266d78415c103f428649909e4b00e730b3217a62fdc0c6b47d3257a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.8.6

Release files / matrix_enum-1.1.0-py2.py3-none-any.whl

Download URL matrix_enum-1.1.0-py2.py3-none-any.whl
Size 6.9 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
752aa6691bf360e6bb04fdbace00d800d9f50594c68c5ce83277307ce493fbf6
BLAKE2b-256 checksum
How to use checksums
023ebc95ed37d368211be82343d239b955421ff5f46657c0950ea2a5d4d8ce6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.6.1 requests/2.25.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.8.6

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page