# Copyright 2009-2022 Joshua Bronson. All rights reserved. # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. """Provide typing-related objects.""" from __future__ import annotations from enum import Enum import typing as t if t.TYPE_CHECKING: from typing_extensions import TypeAlias as TypeAlias else: TypeAlias = 'TypeAlias' KT = t.TypeVar('KT') VT = t.TypeVar('VT') Items: TypeAlias = 't.Iterable[tuple[KT, VT]]' MapOrItems: TypeAlias = 't.Mapping[KT, VT] | Items[KT, VT]' ItemsIter: TypeAlias = 't.Iterator[tuple[KT, VT]]' class MissingT(Enum): """Sentinel used to represent none/missing when None itself can't be used.""" MISSING = 'MISSING' def __repr__(self) -> str: return '' MISSING: t.Final[MissingT] = MissingT.MISSING OKT: TypeAlias = 'KT | MissingT' #: optional key type OVT: TypeAlias = 'VT | MissingT' #: optional value type DT = t.TypeVar('DT') #: for default arguments ODT: TypeAlias = 'DT | MissingT' #: optional default arg type