Buckets:
MisterAI/LocalAI_Demo_backends / cpu-diffusers.upgrade-tmp /python /lib /python3.10 /site-packages /setuptools /_shutil.py
| """Convenience layer on top of stdlib's shutil and os""" | |
| import os | |
| import stat | |
| from typing import Callable, TypeVar | |
| from .compat import py311 | |
| from distutils import log | |
| try: | |
| from os import chmod # pyright: ignore[reportAssignmentType] | |
| # Losing type-safety w/ pyright, but that's ok | |
| except ImportError: # pragma: no cover | |
| # Jython compatibility | |
| def chmod(*args: object, **kwargs: object) -> None: # type: ignore[misc] # Mypy reuses the imported definition anyway | |
| pass | |
| _T = TypeVar("_T") | |
| def attempt_chmod_verbose(path, mode): | |
| log.debug("changing mode of %s to %o", path, mode) | |
| try: | |
| chmod(path, mode) | |
| except OSError as e: # pragma: no cover | |
| log.debug("chmod failed: %s", e) | |
| # Must match shutil._OnExcCallback | |
| def _auto_chmod( | |
| func: Callable[..., _T], arg: str, exc: BaseException | |
| ) -> _T: # pragma: no cover | |
| """shutils onexc callback to automatically call chmod for certain functions.""" | |
| # Only retry for scenarios known to have an issue | |
| if func in [os.unlink, os.remove] and os.name == 'nt': | |
| attempt_chmod_verbose(arg, stat.S_IWRITE) | |
| return func(arg) | |
| raise exc | |
| def rmtree(path, ignore_errors=False, onexc=_auto_chmod): | |
| """ | |
| Similar to ``shutil.rmtree`` but automatically executes ``chmod`` | |
| for well know Windows failure scenarios. | |
| """ | |
| return py311.shutil_rmtree(path, ignore_errors, onexc) | |
| def rmdir(path, **opts): | |
| if os.path.isdir(path): | |
| rmtree(path, **opts) | |
| def current_umask(): | |
| tmp = os.umask(0o022) | |
| os.umask(tmp) | |
| return tmp | |
Xet Storage Details
- Size:
- 1.58 kB
- Xet hash:
- 257cd3165b3a7b1a26be1d06a6b14f16335307be3d51937700197864f3fc0e76
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.