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:
Bruno Oliveira 2024-04-20 16:32:36 -03:00 committed by GitHub
parent 6fb474a3eb
commit 042625957a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 14 additions and 8 deletions

View File

@ -1,4 +1,3 @@
# mypy: allow-untyped-defs
import atexit import atexit
import contextlib import contextlib
from enum import Enum from enum import Enum
@ -23,6 +22,7 @@ import shutil
import sys import sys
import types import types
from types import ModuleType from types import ModuleType
from typing import Any
from typing import Callable from typing import Callable
from typing import Dict from typing import Dict
from typing import Iterable from typing import Iterable
@ -59,7 +59,7 @@ _IGNORED_WINERRORS = (
) )
def _ignore_error(exception): def _ignore_error(exception: Exception) -> bool:
return ( return (
getattr(exception, "errno", None) in _IGNORED_ERRORS getattr(exception, "errno", None) in _IGNORED_ERRORS
or getattr(exception, "winerror", None) in _IGNORED_WINERRORS or getattr(exception, "winerror", None) in _IGNORED_WINERRORS
@ -71,7 +71,7 @@ def get_lock_path(path: _AnyPurePath) -> _AnyPurePath:
def on_rm_rf_error( def on_rm_rf_error(
func, func: Optional[Callable[..., Any]],
path: str, path: str,
excinfo: Union[ excinfo: Union[
BaseException, BaseException,
@ -196,7 +196,7 @@ def find_suffixes(root: Path, prefix: str) -> Iterator[str]:
return extract_suffixes(find_prefixed(root, prefix), prefix) 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.""" """Parse number path suffixes, returns -1 on error."""
try: try:
return int(maybe_num) return int(maybe_num)
@ -264,7 +264,9 @@ def create_cleanup_lock(p: Path) -> Path:
return lock_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.""" """Register a cleanup function for removing a lock, by default on atexit."""
pid = os.getpid() pid = os.getpid()
@ -355,7 +357,7 @@ def cleanup_candidates(root: Path, prefix: str, keep: int) -> Iterator[Path]:
yield Path(entry) yield Path(entry)
def cleanup_dead_symlinks(root: Path): def cleanup_dead_symlinks(root: Path) -> None:
for left_dir in root.iterdir(): for left_dir in root.iterdir():
if left_dir.is_symlink(): if left_dir.is_symlink():
if not left_dir.resolve().exists(): 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))} 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.""" """Make a symlink, or skip the test in case symlinks are not supported."""
try: try:
os.symlink(str(src), str(dst), **kwargs) os.symlink(src, dst, **kwargs)
except OSError as e: except OSError as e:
skip(f"symlinks not supported: {e}") skip(f"symlinks not supported: {e}")