2022-11-07 18:06:49 +00:00
|
|
|
# Copyright 2009-2022 Joshua Bronson. All rights reserved.
|
2022-01-24 04:07:52 +00:00
|
|
|
#
|
|
|
|
# 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."""
|
|
|
|
|
2022-11-07 18:06:49 +00:00
|
|
|
import typing as t
|
|
|
|
from enum import Enum
|
2022-01-24 04:07:52 +00:00
|
|
|
|
|
|
|
|
2022-11-07 18:06:49 +00:00
|
|
|
KT = t.TypeVar('KT')
|
|
|
|
VT = t.TypeVar('VT')
|
|
|
|
IterItems = t.Iterable[t.Tuple[KT, VT]]
|
|
|
|
MapOrIterItems = t.Union[t.Mapping[KT, VT], IterItems[KT, VT]]
|
2022-01-24 04:07:52 +00:00
|
|
|
|
|
|
|
|
2022-11-07 18:06:49 +00:00
|
|
|
class MissingT(Enum):
|
|
|
|
"""Sentinel used to represent none/missing when None itself can't be used."""
|
2022-01-24 04:07:52 +00:00
|
|
|
|
2022-11-07 18:06:49 +00:00
|
|
|
MISSING = 'MISSING'
|
2022-01-24 04:07:52 +00:00
|
|
|
|
2022-11-07 18:06:49 +00:00
|
|
|
def __repr__(self) -> str:
|
|
|
|
return '<MISSING>'
|
2022-01-24 04:07:52 +00:00
|
|
|
|
|
|
|
|
2022-11-07 18:06:49 +00:00
|
|
|
MISSING = MissingT.MISSING
|
|
|
|
OKT = t.Union[KT, MissingT] #: optional key type
|
|
|
|
OVT = t.Union[VT, MissingT] #: optional value type
|
2022-01-24 04:07:52 +00:00
|
|
|
|
2022-11-07 18:06:49 +00:00
|
|
|
DT = t.TypeVar('DT') #: for default arguments
|
|
|
|
ODT = t.Union[DT, MissingT]
|