mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #22107: tempfile.gettempdir() and tempfile.mkdtemp() now try again
when a directory with the chosen name already exists on Windows as well as on Unix. tempfile.mkstemp() now fails early if parent directory is not valid (not exists or is a file) on Windows.
This commit is contained in:
commit
492f027793
3 changed files with 63 additions and 7 deletions
|
@ -166,6 +166,13 @@ def _get_default_tempdir():
|
|||
return dir
|
||||
except FileExistsError:
|
||||
pass
|
||||
except PermissionError:
|
||||
# This exception is thrown when a directory with the chosen name
|
||||
# already exists on windows.
|
||||
if (_os.name == 'nt' and _os.path.isdir(dir) and
|
||||
_os.access(dir, _os.W_OK)):
|
||||
continue
|
||||
break # no point trying more names in this directory
|
||||
except OSError:
|
||||
break # no point trying more names in this directory
|
||||
raise FileNotFoundError(_errno.ENOENT,
|
||||
|
@ -204,7 +211,8 @@ def _mkstemp_inner(dir, pre, suf, flags):
|
|||
except PermissionError:
|
||||
# This exception is thrown when a directory with the chosen name
|
||||
# already exists on windows.
|
||||
if _os.name == 'nt':
|
||||
if (_os.name == 'nt' and _os.path.isdir(dir) and
|
||||
_os.access(dir, _os.W_OK)):
|
||||
continue
|
||||
else:
|
||||
raise
|
||||
|
@ -296,6 +304,14 @@ def mkdtemp(suffix="", prefix=template, dir=None):
|
|||
return file
|
||||
except FileExistsError:
|
||||
continue # try again
|
||||
except PermissionError:
|
||||
# This exception is thrown when a directory with the chosen name
|
||||
# already exists on windows.
|
||||
if (_os.name == 'nt' and _os.path.isdir(dir) and
|
||||
_os.access(dir, _os.W_OK)):
|
||||
continue
|
||||
else:
|
||||
raise
|
||||
|
||||
raise FileExistsError(_errno.EEXIST,
|
||||
"No usable temporary directory name found")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue