forked from mrlan/EnglishPal
27 lines
735 B
Python
27 lines
735 B
Python
|
from __future__ import annotations
|
||
|
|
||
|
import shutil
|
||
|
import sys
|
||
|
from typing import Any, Callable, TYPE_CHECKING
|
||
|
|
||
|
if TYPE_CHECKING:
|
||
|
from _typeshed import StrOrBytesPath, ExcInfo
|
||
|
|
||
|
# Same as shutil._OnExcCallback from typeshed
|
||
|
_OnExcCallback = 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)
|