diff --git a/stdlib/gettext.pyi b/stdlib/gettext.pyi index d0141c63b315..beb9318f9e43 100644 --- a/stdlib/gettext.pyi +++ b/stdlib/gettext.pyi @@ -1,6 +1,7 @@ +import io import sys from _typeshed import StrPath -from collections.abc import Container, Iterable, Sequence +from collections.abc import Callable, Container, Iterable, Sequence from typing import Any, Protocol, TypeVar, overload from typing_extensions import Final, Literal @@ -110,7 +111,7 @@ def find( @overload def find(domain: str, localedir: StrPath | None = ..., languages: Iterable[str] | None = ..., all: bool = ...) -> Any: ... -_T = TypeVar("_T") +_NullTranslationsT = TypeVar("_NullTranslationsT", bound=NullTranslations) if sys.version_info >= (3, 11): @overload @@ -119,24 +120,33 @@ if sys.version_info >= (3, 11): localedir: StrPath | None = ..., languages: Iterable[str] | None = ..., class_: None = ..., - fallback: bool = ..., - ) -> NullTranslations: ... + fallback: Literal[False] = ..., + ) -> GNUTranslations: ... @overload def translation( domain: str, localedir: StrPath | None = ..., languages: Iterable[str] | None = ..., - class_: type[_T] = ..., + *, + class_: Callable[[io.BufferedReader], _NullTranslationsT], + fallback: Literal[False] = ..., + ) -> _NullTranslationsT: ... + @overload + def translation( + domain: str, + localedir: StrPath | None, + languages: Iterable[str] | None, + class_: Callable[[io.BufferedReader], _NullTranslationsT], fallback: Literal[False] = ..., - ) -> _T: ... + ) -> _NullTranslationsT: ... @overload def translation( domain: str, localedir: StrPath | None = ..., languages: Iterable[str] | None = ..., - class_: type[Any] = ..., - fallback: Literal[True] = ..., - ) -> Any: ... + class_: Callable[[io.BufferedReader], NullTranslations] | None = ..., + fallback: bool = ..., + ) -> NullTranslations: ... def install(domain: str, localedir: StrPath | None = ..., *, names: Container[str] | None = ...) -> None: ... else: @@ -146,27 +156,37 @@ else: localedir: StrPath | None = ..., languages: Iterable[str] | None = ..., class_: None = ..., - fallback: bool = ..., + fallback: Literal[False] = ..., codeset: str | None = ..., - ) -> NullTranslations: ... + ) -> GNUTranslations: ... @overload def translation( domain: str, localedir: StrPath | None = ..., languages: Iterable[str] | None = ..., - class_: type[_T] = ..., + *, + class_: Callable[[io.BufferedReader], _NullTranslationsT], fallback: Literal[False] = ..., codeset: str | None = ..., - ) -> _T: ... + ) -> _NullTranslationsT: ... + @overload + def translation( + domain: str, + localedir: StrPath | None, + languages: Iterable[str] | None, + class_: Callable[[io.BufferedReader], _NullTranslationsT], + fallback: Literal[False] = ..., + codeset: str | None = ..., + ) -> _NullTranslationsT: ... @overload def translation( domain: str, localedir: StrPath | None = ..., languages: Iterable[str] | None = ..., - class_: type[Any] = ..., - fallback: Literal[True] = ..., + class_: Callable[[io.BufferedReader], NullTranslations] | None = ..., + fallback: bool = ..., codeset: str | None = ..., - ) -> Any: ... + ) -> NullTranslations: ... def install( domain: str, localedir: StrPath | None = ..., codeset: str | None = ..., names: Container[str] | None = ... ) -> None: ...