make_tempdir: attempt to fix removing readonly files on Windows

This commit is contained in:
Daniël de Kok 2023-01-25 11:16:38 +01:00
parent 347727237c
commit 2bcdcbdbaf

View File

@ -1032,6 +1032,14 @@ def working_dir(path: Union[str, Path]) -> Iterator[Path]:
os.chdir(str(prev_cwd)) 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 @contextmanager
def make_tempdir() -> Generator[Path, None, None]: def make_tempdir() -> Generator[Path, None, None]:
"""Execute a block in a temporary directory and remove the directory and """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()) d = Path(tempfile.mkdtemp())
yield d yield d
try: try:
shutil.rmtree(str(d)) shutil.rmtree(str(d), onerror=_rm_readonly)
except PermissionError as e: except PermissionError as e:
warnings.warn(Warnings.W091.format(dir=d, msg=e)) warnings.warn(Warnings.W091.format(dir=d, msg=e))