Provide consistent types to NamedTemporaryFile

This commit is contained in:
Adrian Sampson 2022-01-03 10:16:39 -08:00
parent de3eedc033
commit bb13f37e59
No known key found for this signature in database
GPG key ID: BDB93AB409CC8705

View file

@ -486,32 +486,33 @@ def move(path, dest, replace=False):
(path, dest))
if samefile(path, dest):
return
path = syspath(path)
dest = syspath(dest)
if os.path.exists(dest) and not replace:
if os.path.exists(syspath(dest)) and not replace:
raise FilesystemError('file exists', 'rename', (path, dest))
# First, try renaming the file.
try:
os.replace(path, dest)
os.replace(syspath(path), syspath(dest))
except OSError:
# Copy the file to a temporary destination.
base = os.path.basename(bytestring_path(dest))
tmp = tempfile.NamedTemporaryFile(suffix=b'.beets',
prefix=b'.' + base,
dir=os.path.dirname(dest),
delete=False)
basename = os.path.basename(bytestring_path(dest))
dirname = os.path.dirname(bytestring_path(dest))
tmp = tempfile.NamedTemporaryFile(
suffix=syspath(b'.beets', prefix=False),
prefix=syspath(b'.' + basename, prefix=False),
dir=syspath(dirname),
delete=False,
)
try:
with open(path, 'rb') as f:
with open(syspath(path), 'rb') as f:
shutil.copyfileobj(f, tmp)
finally:
tmp.close()
# Move the copied file into place.
try:
os.replace(tmp.name, dest)
os.replace(tmp.name, syspath(dest))
tmp = None
os.remove(path)
os.remove(syspath(path))
except OSError as exc:
raise FilesystemError(exc, 'move', (path, dest),
traceback.format_exc())