28 lines
790 B
Python
28 lines
790 B
Python
from __future__ import annotations
|
|
|
|
import shutil
|
|
import sys
|
|
from typing import TYPE_CHECKING, Any, Callable
|
|
|
|
if TYPE_CHECKING:
|
|
from _typeshed import ExcInfo, StrOrBytesPath
|
|
from typing_extensions import TypeAlias
|
|
|
|
# Same as shutil._OnExcCallback from typeshed
|
|
_OnExcCallback: TypeAlias = Callable[[Callable[..., Any], str, BaseException], object]
|
|
|
|
|
|
def shutil_rmtree(
|
|
path: StrOrBytesPath,
|
|
ignore_errors: bool = False,
|
|
onexc: _OnExcCallback | None = None,
|
|
) -> None:
|
|
if sys.version_info >= (3, 12):
|
|
return shutil.rmtree(path, ignore_errors, onexc=onexc)
|
|
|
|
def _handler(fn: Callable[..., Any], path: str, excinfo: ExcInfo) -> None:
|
|
if onexc:
|
|
onexc(fn, path, excinfo[1])
|
|
|
|
return shutil.rmtree(path, ignore_errors, onerror=_handler)
|