diff options
Diffstat (limited to '.venv/lib/python3.12/site-packages/strenum/__init__.py')
| -rw-r--r-- | .venv/lib/python3.12/site-packages/strenum/__init__.py | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/strenum/__init__.py b/.venv/lib/python3.12/site-packages/strenum/__init__.py new file mode 100644 index 00000000..1c82bede --- /dev/null +++ b/.venv/lib/python3.12/site-packages/strenum/__init__.py @@ -0,0 +1,325 @@ +import enum +from ._version import get_versions +from ._name_mangler import _NameMangler + +__version__ = get_versions()["version"] +__version_info__ = tuple(int(n) for n in __version__.partition("+")[0].split(".")) +del get_versions + +_name_mangler = _NameMangler() + +# The first argument to the `_generate_next_value_` function of the `enum.Enum` +# class is documented to be the name of the enum member, not the enum class: +# +# https://docs.python.org/3.6/library/enum.html#using-automatic-values +# +# Pylint, though, doesn't know about this so we need to disable it's check for +# `self` arguments. +# pylint: disable=no-self-argument + + +class StrEnum(str, enum.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" + """ + + def __new__(cls, value, *args, **kwargs): + if not isinstance(value, (str, enum.auto)): + raise TypeError( + f"Values of StrEnums must be strings: {value!r} is a {type(value)}" + ) + return super().__new__(cls, value, *args, **kwargs) + + def __str__(self): + return str(self.value) + + def _generate_next_value_(name, *_): + return name + + +class LowercaseStrEnum(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" + + .. versionadded:: 0.4.3 + """ + + def _generate_next_value_(name, *_): + return name.lower() + + +class UppercaseStrEnum(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" + + .. versionadded:: 0.4.3 + """ + + def _generate_next_value_(name, *_): + return name.upper() + + +class CamelCaseStrEnum(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" + + .. versionadded:: 0.4.5 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.camel(name) + + +class PascalCaseStrEnum(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" + + .. versionadded:: 0.4.5 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.pascal(name) + + +class KebabCaseStrEnum(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" + + .. versionadded:: 0.4.5 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.kebab(name) + + +class SnakeCaseStrEnum(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" + + .. versionadded:: 0.4.5 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.snake(name) + + +class MacroCaseStrEnum(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" + + .. versionadded:: 0.4.6 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.macro(name) + + +class CamelSnakeCaseStrEnum(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" + + .. versionadded:: 0.4.8 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.camel_snake(name) + + +class PascalSnakeCaseStrEnum(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" + + .. versionadded:: 0.4.8 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.pascal_snake(name) + + +class SpongebobCaseStrEnum(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" + + .. versionadded:: 0.4.8 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.spongebob(name) + + +class CobolCaseStrEnum(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" + + .. versionadded:: 0.4.8 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.cobol(name) + + +class HttpHeaderCaseStrEnum(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" + + .. versionadded:: 0.4.8 + """ + + def _generate_next_value_(name, *_): + return _name_mangler.http_header(name) |
