EnumWithExplicitSupport#

class scio.utils.enums.EnumWithExplicitSupport(value)[source]#

Bases: Enum

Base Enum for explicit error message.

In many place in this package, we use Enum in conjunction with Literal as follows:

from enum import unique


@unique
class Arg(str, EnumWithExplicitSupport):
    '''Enum for supported ``arg`` values.'''

    __slots__ = ()

    VALUE1 = "value1"
    VALUE2 = "value2"


type ArgLike = Arg | Literal["value1", "value2"]

This allows static type checkers to understand direct API calls such as func("value1"), while also providing runtime sanitization for more complex uses such as func(Arg(kw[0])).

This Enum subclass provides more details about the supported values during runtime errors:

>>> Arg("value3")  # Also fails type check
<traceback>
ValueError: 'value3' is not a valid Arg. Supported: 'value1', 'value2'

Finally, it provides a more sensible signature:

>>> from inspect import signature
>>> signature(Arg)
<Signature (value)>