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.6.0.tar.gz (26.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: stringenum-0.6.0.tar.gz
  • Upload date:
  • Size: 26.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for stringenum-0.6.0.tar.gz
Algorithm Hash digest
SHA256 2b47213f239487ec8051e9cc54d68b4955509808e33126c6cc4ab53e47f66d01
MD5 ca95fc0b886568a33f99b5b0404c38b2
BLAKE2b-256 e4bfe8069c06e43869d9371022a8805fe497ff80b50e5b45b91b3a795b669ca3

See more details on using hashes here.

Provenance

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

Publisher: release.yml on Ravencentric/stringenum

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

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

File metadata

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

File hashes

Hashes for stringenum-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e132edae8bb2bf5c37cae55f5d4ec51c7596e5064fe2d3e6bd567e0ca773063d
MD5 82ff51f4e53ff9d7dcc2fbe3b692a0b9
BLAKE2b-256 70a6d21747d479369d30df2f5d1a86f9f426b7839c4e8a5fb32d5bff24c0f9a5

See more details on using hashes here.

Provenance

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

Publisher: release.yml on Ravencentric/stringenum

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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