Skip to content

Add a _typeshed.pyi file and a PathLike alias #4161

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Jun 4, 2020
28 changes: 28 additions & 0 deletions stdlib/2and3/_typeshed/__init__.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Utility types for typeshed

# This module contains various common types to be used by typeshed. The
# module and its types do not exist at runtime. You can use this module
# outside of typeshed, but no API stability guarantees are made. To use
# it in implementation (.py) files, the following construct must be used:
#
# from typing import TYPE_CHECKING
# if TYPE_CHECKING:
# from _typeshed import ...
#
# If on Python versions < 3.10 and "from __future__ import annotations"
# is not used, types from this module must be quoted.

import sys
from typing import Text, Union

# StrPath and AnyPath can be used in places where a
# path can be used instead of a string, starting with Python 3.6.
if sys.version_info >= (3, 6):
from os import PathLike
StrPath = Union[str, PathLike[str]]
BytesPath = Union[bytes, PathLike[bytes]]
AnyPath = Union[str, bytes, PathLike[str], PathLike[bytes]]
else:
StrPath = Text
BytesPath = bytes
AnyPath = Union[Text, bytes]
1 change: 1 addition & 0 deletions tests/stubtest_whitelists/py3_common.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ _importlib_modulespec
_operator.methodcaller
_threading_local.local.__new__
_types
_typeshed
_weakref.CallableProxyType.__getattr__
_weakref.ProxyType.__getattr__
_weakref.ReferenceType.__call__
Expand Down
13 changes: 4 additions & 9 deletions third_party/2and3/atomicwrites/__init__.pyi
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
import sys
from typing import Any, AnyStr, Callable, ContextManager, Generic, IO, Optional, Text, Type, Union

if sys.version_info >= (3, 6):
from os import PathLike
_Path = Union[str, bytes, PathLike[str], PathLike[bytes]]
else:
_Path = Union[Text, bytes]
from _typeshed import AnyPath

def replace_atomic(src: AnyStr, dst: AnyStr) -> None: ...
def move_atomic(src: AnyStr, dst: AnyStr) -> None: ...
class AtomicWriter(object):
def __init__(self, path: _Path, mode: Text = ..., overwrite: bool = ...) -> None: ...
def __init__(self, path: AnyPath, mode: Text = ..., overwrite: bool = ...) -> None: ...
def open(self) -> ContextManager[IO[Any]]: ...
def _open(self, get_fileobject: Callable[..., IO[AnyStr]]) -> ContextManager[IO[AnyStr]]: ...
def get_fileobject(self, dir: Optional[_Path] = ..., **kwargs: Any) -> IO[Any]: ...
def get_fileobject(self, dir: Optional[AnyPath] = ..., **kwargs: Any) -> IO[Any]: ...
def sync(self, f: IO[Any]) -> None: ...
def commit(self, f: IO[Any]) -> None: ...
def rollback(self, f: IO[Any]) -> None: ...
def atomic_write(
path: _Path, writer_cls: Type[AtomicWriter] = ..., **cls_kwargs: object,
path: AnyPath, writer_cls: Type[AtomicWriter] = ..., **cls_kwargs: object,
) -> ContextManager[IO[Any]]: ...
9 changes: 2 additions & 7 deletions third_party/2and3/jinja2/utils.pyi
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import sys
from typing import Any, Callable, IO, Iterable, Optional, Protocol, Text, TypeVar, Union
from _typeshed import AnyPath

from markupsafe import Markup as Markup, escape as escape, soft_unicode as soft_unicode

Expand All @@ -13,12 +14,6 @@ if sys.version_info >= (3, 8):
else:
_True = bool

if sys.version_info >= (3, 6):
from builtins import _PathLike
_PathType = Union[bytes, Text, _PathLike]
else:
_PathType = Union[bytes, Text]

_CallableT = TypeVar("_CallableT", bound=Callable[..., Any])

class _ContextFunction(Protocol[_CallableT]):
Expand All @@ -42,7 +37,7 @@ def select_autoescape(enabled_extensions: Iterable[str] = ..., disabled_extensio
def consume(iterable: Iterable[object]) -> None: ...
def clear_caches() -> None: ...
def import_string(import_name: str, silent: bool = ...) -> Any: ...
def open_if_exists(filename: _PathType, mode: str = ...) -> Optional[IO[Any]]: ...
def open_if_exists(filename: AnyPath, mode: str = ...) -> Optional[IO[Any]]: ...
def object_type_repr(obj: object) -> str: ...
def pformat(obj: object, verbose: bool = ...) -> str: ...
def urlize(text: Union[Markup, Text], trim_url_limit: Optional[int] = ..., rel: Optional[Union[Markup, Text]] = ..., target: Optional[Union[Markup, Text]] = ...) -> str: ...
Expand Down
13 changes: 6 additions & 7 deletions third_party/2and3/toml.pyi
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
from typing import Any, IO, List, Mapping, MutableMapping, Optional, Protocol, Text, Type, Union
from _typeshed import StrPath
import datetime
import sys

if sys.version_info >= (3, 4):
if sys.version_info >= (3, 6):
_PathLike = StrPath
elif sys.version_info >= (3, 4):
import pathlib
if sys.version_info >= (3, 6):
import os
_PathLike = Union[Text, pathlib.PurePath, os.PathLike]
else:
_PathLike = Union[Text, pathlib.PurePath]
_PathLike = Union[StrPath, pathlib.PurePath]
else:
_PathLike = Text
_PathLike = StrPath

class _Writable(Protocol):
def write(self, obj: str) -> Any: ...
Expand Down