From 2bcdcbdbaf7f830ed935adaea81653ed8a82c568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danie=CC=88l=20de=20Kok?= Date: Wed, 25 Jan 2023 11:16:38 +0100 Subject: [PATCH] make_tempdir: attempt to fix removing readonly files on Windows --- spacy/util.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/spacy/util.py b/spacy/util.py index 8bf8fb1b0..024e1df26 100644 --- a/spacy/util.py +++ b/spacy/util.py @@ -1032,6 +1032,14 @@ def working_dir(path: Union[str, Path]) -> Iterator[Path]: os.chdir(str(prev_cwd)) +def _rm_readonly(func, path, excinfo): + if not os.access(path, os.W_OK): + os.chmod(path, os.stat.S_IWRITE) + func(path) + else: + raise + + @contextmanager def make_tempdir() -> Generator[Path, None, None]: """Execute a block in a temporary directory and remove the directory and @@ -1042,7 +1050,7 @@ def make_tempdir() -> Generator[Path, None, None]: d = Path(tempfile.mkdtemp()) yield d try: - shutil.rmtree(str(d)) + shutil.rmtree(str(d), onerror=_rm_readonly) except PermissionError as e: warnings.warn(Warnings.W091.format(dir=d, msg=e))