melobot.typ.base 源代码

from beartype import BeartypeConf as _BeartypeConf
from beartype.door import is_bearable as _is_type
from beartype.door import is_subhint
from typing_extensions import Any, Awaitable, ParamSpec, Protocol, TypeIs, TypeVar

__all__ = ("AsyncCallable", "P", "T", "T_co", "is_type", "is_subhint")

#: 泛型 T,无约束
T = TypeVar("T", default=Any)
#: 泛型 T,无约束
U = TypeVar("U", default=Any)
#: 泛型 T,无约束
V = TypeVar("V", default=Any)
#: 泛型 T_co,协变无约束
T_co = TypeVar("T_co", covariant=True, default=Any)
#: :obj:`~typing.ParamSpec` 泛型 P,无约束
P = ParamSpec("P", default=Any)


[文档] class AsyncCallable(Protocol[P, T_co]): """用法:AsyncCallable[P, T] 是该类型的等价形式:Callable[P, Awaitable[T]] """ def __call__(self, *args: P.args, **kwargs: P.kwargs) -> Awaitable[T_co]: ...
[文档] class SyncOrAsyncCallable(Protocol[P, T_co]): """用法:SyncOrAsyncCallable[P, T] 是该类型的等价形式:Callable[P, T | Awaitable[T]] """ def __call__(self, *args: P.args, **kwargs: P.kwargs) -> T_co | Awaitable[T_co]: ...
_DEFAULT_BEARTYPE_CONF = _BeartypeConf(is_pep484_tower=True)
[文档] def is_type(obj: T, hint: type[Any]) -> TypeIs[T]: """检查 `obj` 是否是类型注解 `hint` 所表示的类型 :param obj: 任意对象 :param hint: 任意类型注解 :return: 布尔值 """ ret = _is_type(obj, hint, conf=_DEFAULT_BEARTYPE_CONF) return ret # type: ignore[no-any-return]