aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/setuptools/_shutil.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/setuptools/_shutil.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-4a52a71956a8d46fcb7294ac71734504bb09bcc2.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/setuptools/_shutil.py')
-rw-r--r--.venv/lib/python3.12/site-packages/setuptools/_shutil.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/setuptools/_shutil.py b/.venv/lib/python3.12/site-packages/setuptools/_shutil.py
new file mode 100644
index 00000000..6acbb428
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/setuptools/_shutil.py
@@ -0,0 +1,53 @@
+"""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)