Fully type annotate pathlib.py (#12229)
Add full type annotations to `pathlib.py` and remove the `allow-untyped-defs` directive.
This commit is contained in:
parent
6fb474a3eb
commit
042625957a
|
@ -1,4 +1,3 @@
|
|||
# mypy: allow-untyped-defs
|
||||
import atexit
|
||||
import contextlib
|
||||
from enum import Enum
|
||||
|
@ -23,6 +22,7 @@ import shutil
|
|||
import sys
|
||||
import types
|
||||
from types import ModuleType
|
||||
from typing import Any
|
||||
from typing import Callable
|
||||
from typing import Dict
|
||||
from typing import Iterable
|
||||
|
@ -59,7 +59,7 @@ _IGNORED_WINERRORS = (
|
|||
)
|
||||
|
||||
|
||||
def _ignore_error(exception):
|
||||
def _ignore_error(exception: Exception) -> bool:
|
||||
return (
|
||||
getattr(exception, "errno", None) in _IGNORED_ERRORS
|
||||
or getattr(exception, "winerror", None) in _IGNORED_WINERRORS
|
||||
|
@ -71,7 +71,7 @@ def get_lock_path(path: _AnyPurePath) -> _AnyPurePath:
|
|||
|
||||
|
||||
def on_rm_rf_error(
|
||||
func,
|
||||
func: Optional[Callable[..., Any]],
|
||||
path: str,
|
||||
excinfo: Union[
|
||||
BaseException,
|
||||
|
@ -196,7 +196,7 @@ def find_suffixes(root: Path, prefix: str) -> Iterator[str]:
|
|||
return extract_suffixes(find_prefixed(root, prefix), prefix)
|
||||
|
||||
|
||||
def parse_num(maybe_num) -> int:
|
||||
def parse_num(maybe_num: str) -> int:
|
||||
"""Parse number path suffixes, returns -1 on error."""
|
||||
try:
|
||||
return int(maybe_num)
|
||||
|
@ -264,7 +264,9 @@ def create_cleanup_lock(p: Path) -> Path:
|
|||
return lock_path
|
||||
|
||||
|
||||
def register_cleanup_lock_removal(lock_path: Path, register=atexit.register):
|
||||
def register_cleanup_lock_removal(
|
||||
lock_path: Path, register: Any = atexit.register
|
||||
) -> Any:
|
||||
"""Register a cleanup function for removing a lock, by default on atexit."""
|
||||
pid = os.getpid()
|
||||
|
||||
|
@ -355,7 +357,7 @@ def cleanup_candidates(root: Path, prefix: str, keep: int) -> Iterator[Path]:
|
|||
yield Path(entry)
|
||||
|
||||
|
||||
def cleanup_dead_symlinks(root: Path):
|
||||
def cleanup_dead_symlinks(root: Path) -> None:
|
||||
for left_dir in root.iterdir():
|
||||
if left_dir.is_symlink():
|
||||
if not left_dir.resolve().exists():
|
||||
|
@ -459,10 +461,14 @@ def parts(s: str) -> Set[str]:
|
|||
return {sep.join(parts[: i + 1]) or sep for i in range(len(parts))}
|
||||
|
||||
|
||||
def symlink_or_skip(src, dst, **kwargs):
|
||||
def symlink_or_skip(
|
||||
src: Union["os.PathLike[str]", str],
|
||||
dst: Union["os.PathLike[str]", str],
|
||||
**kwargs: Any,
|
||||
) -> None:
|
||||
"""Make a symlink, or skip the test in case symlinks are not supported."""
|
||||
try:
|
||||
os.symlink(str(src), str(dst), **kwargs)
|
||||
os.symlink(src, dst, **kwargs)
|
||||
except OSError as e:
|
||||
skip(f"symlinks not supported: {e}")
|
||||
|
||||
|
|
Loading…
Reference in New Issue