Skip to main content

enumatch

PyPI version PyPI pyversions Test Coverage

Strictly match all the possibilities of an enum.

Use case

This little match function makes matching Python's enum fields safer by forcing us to match all the possibilities either explicitly or by using a wildcard.

Use ... (ellipsis) for the wildcard.

TIPs

  • Avoid the use of ... (wildcard) to make sure any modification to the enums are safe.
  • Create the matcher at compile-time to have compile-time validation and zero runtime cost.

Example: Flat matcher

from enum import Enum, auto
from enumatch import match

class Side(Enum):
    left = auto()
    right = auto()

# Define a simple matcher
matcher1 = match({Side.left: "Go left", Side.right: "Go right"})

assert matcher1[Side.left] == "Go left"
assert matcher1[Side.right] == "Go right"

# Define a matcher with a default case
matcher2 = match({Side.left: "Go left", ...: "Go right"})

assert matcher2[Side.left] == "Go left"
assert matcher2[Side.right] == "Go right"

# If all the possibilities are not handled, we get error
with pytest.raises(ValueError, match="missing possibilities: Side.right"):
    match({Side.left: "Go left"})

Example: Nested matcher

from enum import Enum, auto
from enumatch import match, forall

class Switch(Enum):
    on = auto()
    off = auto()

# is_on[main_switch][bedroom_switch]: bool
is_on = match({
    Switch.on: match({Switch.on: True, Switch.off: False}),
    Switch.off: forall(Switch, False),
})

assert is_on[Switch.on][Switch.on] == True
assert is_on[Switch.on][Switch.off] == False
assert is_on[Switch.off][Switch.on] == False
assert is_on[Switch.off][Switch.off] == False

Metadata

Release files for enumatch 0.2.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 enumatch 0.2.0
File Size Uploaded
enumatch-0.2.0.tar.gz 3.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for enumatch 0.2.0
File Interpreter ABI Platform
enumatch-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 7.2 kB

Release files / enumatch-0.2.0.tar.gz

Download URL enumatch-0.2.0.tar.gz
Size 3.5 kB
Tags Source
SHA-256 checksum
How to use checksums
46cdd8b9e60d58e3d1c972ce4fd58baf51d43f026cfa616dc0bec4584ff9d39e
BLAKE2b-256 checksum
How to use checksums
eab01ecf57e77a1d1affbe9765ee47eb21e5645768046543fa9ed5363d63294f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.5 CPython/3.7.6 Darwin/19.6.0

Release files / enumatch-0.2.0-py3-none-any.whl

Download URL enumatch-0.2.0-py3-none-any.whl
Size 3.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
90b325e8af45129b0723f298f9dbd0babc15c250d8f5a24669431ece282d05ca
BLAKE2b-256 checksum
How to use checksums
383af2bc238f4de524b01588bb3613c77ce9068b54be72b95ef4f60d02eafebf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.5 CPython/3.7.6 Darwin/19.6.0

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.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