| 123456789101112131415161718192021222324252627282930313233343536 |
- from __future__ import annotations
- import enum
- import typing as t
- class Sentinel(enum.Enum):
- """Enum used to define sentinel values.
- .. seealso::
- `PEP 661 - Sentinel Values <https://peps.python.org/pep-0661/>`_.
- """
- UNSET = object()
- FLAG_NEEDS_VALUE = object()
- def __repr__(self) -> str:
- return f"{self.__class__.__name__}.{self.name}"
- UNSET: t.Literal[Sentinel.UNSET] = Sentinel.UNSET
- """Sentinel used to indicate that a value is not set."""
- FLAG_NEEDS_VALUE: t.Literal[Sentinel.FLAG_NEEDS_VALUE] = Sentinel.FLAG_NEEDS_VALUE
- """Sentinel used to indicate an option was passed as a flag without a
- value but is not a flag option.
- ``Option.consume_value`` uses this to prompt or use the ``flag_value``.
- """
- T_UNSET: t.TypeAlias = t.Literal[Sentinel.UNSET]
- """Type hint for the :data:`UNSET` sentinel value."""
- T_FLAG_NEEDS_VALUE: t.TypeAlias = t.Literal[Sentinel.FLAG_NEEDS_VALUE]
- """Type hint for the :data:`FLAG_NEEDS_VALUE` sentinel value."""
|