Skip to content

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

License

Notifications You must be signed in to change notification settings

Ravencentric/stringenum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

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

Topics

Resources

License

Stars

Watchers

Forks

Languages