API Reference

Enum Classes

strenum contains a collection of subclasses of Python’s enum.Enum that inherit from str to complement enum.IntEnum in the standard library.

class strenum.StrEnum

Bases: str, Enum

StrEnum is a Python enum.Enum that inherits from str. The default auto() behavior uses the member name as its value.

Example usage:

class Example(StrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "UPPER_CASE"
assert Example.lower_case == "lower_case"
assert Example.MixedCase == "MixedCase"
class strenum.LowercaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to lowercase to produce each member’s value.

Example usage:

class Example(LowercaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "upper_case"
assert Example.lower_case == "lower_case"
assert Example.MixedCase == "mixedcase"

New in version 0.4.3.

class strenum.UppercaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to UPPERCASE to produce each member’s value.

Example usage:

class Example(UppercaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "UPPER_CASE"
assert Example.lower_case == "LOWER_CASE"
assert Example.MixedCase == "MIXEDCASE"

New in version 0.4.3.

class strenum.CamelCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to camelCase to produce each member’s value.

Example usage:

class Example(CamelCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "upperCase"
assert Example.lower_case == "lowerCase"
assert Example.MixedCase == "mixedCase"

New in version 0.4.5.

class strenum.PascalCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to PascalCase to produce each member’s value.

Example usage:

class Example(PascalCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "UpperCase"
assert Example.lower_case == "LowerCase"
assert Example.MixedCase == "MixedCase"

New in version 0.4.5.

class strenum.KebabCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to kebab-case to produce each member’s value.

Example usage:

class Example(KebabCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "upper-case"
assert Example.lower_case == "lower-case"
assert Example.MixedCase == "mixed-case"

New in version 0.4.5.

class strenum.SnakeCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to snake_case to produce each member’s value.

Example usage:

class Example(SnakeCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "upper_case"
assert Example.lower_case == "lower_case"
assert Example.MixedCase == "mixed_case"

New in version 0.4.5.

class strenum.MacroCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to MACRO_CASE to produce each member’s value.

Example usage:

class Example(MacroCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "UPPER_CASE"
assert Example.lower_case == "LOWER_CASE"
assert Example.MixedCase == "MIXED_CASE"

New in version 0.4.6.

class strenum.CamelSnakeCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to camel_Snake_Case to produce each member’s value.

Example usage:

class Example(CamelSnakeCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "upper_Case"
assert Example.lower_case == "lower_Case"
assert Example.MixedCase == "mixed_Case"

New in version 0.4.8.

class strenum.PascalSnakeCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to Pascal_Snake_Case to produce each member’s value.

Example usage:

class Example(PascalSnakeCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "Upper_Case"
assert Example.lower_case == "Lower_Case"
assert Example.MixedCase == "Mixed_Case"

New in version 0.4.8.

class strenum.SpongebobCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to SpONGEBob_CAse to produce each member’s value.

Example usage:

class Example(SpongebobCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "uPpER_cAsE"
assert Example.lower_case == "lowER_CASe"
assert Example.MixedCase == "MixeD_CAse"

New in version 0.4.8.

class strenum.CobolCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to COBOL-CASE to produce each member’s value.

Example usage:

class Example(CobolCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "UPPER-CASE"
assert Example.lower_case == "LOWER-CASE"
assert Example.MixedCase == "MIXED-CASE"

New in version 0.4.8.

class strenum.HttpHeaderCaseStrEnum

Bases: StrEnum

A StrEnum where auto() will convert the name to Http-Header-Case to produce each member’s value.

Example usage:

class Example(HttpHeaderCaseStrEnum):
    UPPER_CASE = auto()
    lower_case = auto()
    MixedCase = auto()

assert Example.UPPER_CASE == "Upper-Case"
assert Example.lower_case == "Lower-Case"
assert Example.MixedCase == "Mixed-Case"

New in version 0.4.8.

Mix-in Classes

class strenum.mixins.Comparable

Customise how your Enum acts when compared to other objects.

Your Enum must implement a _cmp_values method which takes the Enum member’s value and the other value and manipulates them into the actual values that can be compared.

A case-insensitive StrEnum might look like this:

class HttpHeader(Comparable, KebabCaseStrEnum):
    ContentType = auto()
    Host = auto()
    Accept = auto()
    XForwardedFor = auto()

    def _cmp_values(self, other):
        return self.value.lower(), str(other).lower()

You could then use these headers in case-insensitive comparisons:

assert "Content-Type" == HttpHeader.ContentType
assert "content-type" == HttpHeader.ContentType
assert "coNtEnt-tyPe" == HttpHeader.ContentType

Note

Your _cmp_values method must not return self as one of the values to be compared – that would result in infinite recursion. Instead, perform operations on self.value and return that.

Warning

A bug in Python prior to 3.7.1 prevents mix-ins working with Enum subclasses.

New in version 0.4.6.