Skip to main content

A small, dependency-free library offering additional enum.StrEnum subclasses and a backport for older Python versions.

Project description

stringenum

PyPI - Version PyPI - Python Version License Checked with mypy Ruff

GitHub Workflow Status (with event) GitHub Actions Workflow Status codecov

Table Of Contents

About

A small, dependency-free library offering additional enum.StrEnum subclasses and a backport for older Python versions.

Installation

stringenum is available on PyPI, so you can simply use pip to install it.

pip install stringenum

Usage

  • stringenum.StrEnum - A backport of enum.StrEnum. While StrEnum was added in Python 3.11, version 3.12 brought changes to the __contains__ method in EnumType, which also impacts StrEnum. stringenum.StrEnum includes this __contains__ update from Python 3.12.

    • enum.StrEnum on Python <=3.11

      >>> class Color(enum.StrEnum):
      ...     RED = "RED"
      ...     GREEN = "GREEN"
      
      >>> Color.RED in Color
      True
      >>> "RED" in Color
      Traceback (most recent call last):
        ...
      TypeError: unsupported operand type(s) for 'in': 'str' and 'EnumType'
      
    • enum.StrEnum on Python >=3.12

      >>> class Color(enum.StrEnum):
      ...     RED = "RED"
      ...     GREEN = "GREEN"
      
      >>> Color.RED in Color
      True
      >>> "RED" in Color
      True
      >>> 12 in Color
      False
      
    • stringenum.StrEnum on Python >=3.9

      >>> class Color(stringenum.StrEnum):
      ...     RED = "RED"
      ...     GREEN = "GREEN"
      
      >>> Color.RED in Color
      True
      >>> "RED" in Color
      True
      >>> 12 in Color
      False
      
  • stringenum.DuplicateFreeStrEnum - A subclass of StrEnum that ensures all members have unique values and names, raising a ValueError if duplicates are found.

    >>> class Fruits(DuplicateFreeStrEnum):
    ...     APPLE = "apple"
    ...     BANANA = "banana"
    ...     ORANGE = "apple"
    ...
    Traceback (most recent call last):
      ...
    ValueError: Duplicate values are not allowed in Fruits: <Fruits.ORANGE: 'apple'>
    
  • stringenum.CaseInsensitiveStrEnum - A subclass of DuplicateFreeStrEnum that supports case-insensitive lookup.

    >>> class Pet(CaseInsensitiveStrEnum):
    ...     CAT = "meow"
    ...     DOG = "bark"
    
    >>> Pet("Meow")
    <Pet.CAT: 'meow'>
    
    >>> Pet("BARK")     
    <Pet.DOG: 'bark'>
    
    >>> Pet["Cat"]
    <Pet.CAT: 'meow'>
    
    >>> Pet["dog"] 
    <Pet.DOG: 'bark'>
    
  • stringenum.DoubleSidedStrEnum - A subclass of DuplicateFreeStrEnum that supports double-sided lookup, allowing both member values and member names to be used for lookups.

    >>> class Status(DoubleSidedStrEnum):
    ...     PENDING = "waiting"
    ...     REJECTED = "denied"
    
    >>> Status("PENDING")
    <Status.PENDING: 'waiting'>
    
    >>> Status("waiting")
    <Status.PENDING: 'waiting'>
    
    >>> Status["REJECTED"]
    <Status.REJECTED: 'denied'>
    
    >>> Status["denied"]
    <Status.REJECTED: 'denied'>
    
  • stringenum.DoubleSidedCaseInsensitiveStrEnum - A subclass of DuplicateFreeStrEnum that supports case-insenitive double-sided lookup, allowing both member values and member names to be used for lookups.

    >>> class Status(DoubleSidedCaseInsensitiveStrEnum):
    ...     PENDING = "waiting"
    ...     REJECTED = "denied"
    
    >>> Status("pending")
    <Status.PENDING: 'waiting'>
    
    >>> Status("Waiting")
    <Status.PENDING: 'waiting'>
    
    >>> Status["Rejected"]
    <Status.REJECTED: 'denied'>
    
    >>> Status["DenieD"]
    <Status.REJECTED: 'denied'>
    

License

Distributed under the MIT License. See LICENSE for more information.

Project details


Download files

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

Source Distribution

stringenum-0.5.0.tar.gz (24.3 kB view details)

Uploaded Source

Built Distribution

stringenum-0.5.0-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file stringenum-0.5.0.tar.gz.

File metadata

  • Download URL: stringenum-0.5.0.tar.gz
  • Upload date:
  • Size: 24.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for stringenum-0.5.0.tar.gz
Algorithm Hash digest
SHA256 c80a702877cf815bb6b15c840d3a97e8994db32e2ac2998dc7e0cf8769632aa1
MD5 14016f6cbbb25e738dfb06a8324b481b
BLAKE2b-256 1274b32bbcd5279fb2f8d14513a3b30b256603c3988b408f666ac60992c483d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringenum-0.5.0.tar.gz:

Publisher: release.yml on Ravencentric/stringenum

Attestations:

File details

Details for the file stringenum-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: stringenum-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for stringenum-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3f3541693d9915669f590a3bd12bb00322097d5ce97a363f287618bb9bf48223
MD5 3db8c1a2bc9ea8431b5e8ca9dfefc998
BLAKE2b-256 e6d53c352e2f2260b757309804ee7d14c5aa3c00bb9be64d2d2914adea363335

See more details on using hashes here.

Provenance

The following attestation bundles were made for stringenum-0.5.0-py3-none-any.whl:

Publisher: release.yml on Ravencentric/stringenum

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page