]> jfr.im git - yt-dlp.git/blame - yt_dlp/postprocessor/movefilesafterdownload.py
[cleanup] Add more ruff rules (#10149)
[yt-dlp.git] / yt_dlp / postprocessor / movefilesafterdownload.py
CommitLineData
0202b52a 1import os
0202b52a 2
3from .common import PostProcessor
fbb0ee77 4from ..compat import shutil
0202b52a 5from ..utils import (
f8271158 6 PostProcessingError,
8a0b9322 7 decodeFilename,
0202b52a 8 encodeFilename,
9 make_dir,
0202b52a 10)
0202b52a 11
12
13class MoveFilesAfterDownloadPP(PostProcessor):
14
56d868db 15 def __init__(self, downloader=None, downloaded=True):
16 PostProcessor.__init__(self, downloader)
17 self._downloaded = downloaded
18
0202b52a 19 @classmethod
20 def pp_key(cls):
21 return 'MoveFiles'
22
23 def run(self, info):
c571435f 24 dl_path, dl_name = os.path.split(encodeFilename(info['filepath']))
25 finaldir = info.get('__finaldir', dl_path)
26 finalpath = os.path.join(finaldir, dl_name)
56d868db 27 if self._downloaded:
28 info['__files_to_move'][info['filepath']] = decodeFilename(finalpath)
0202b52a 29
8a0b9322 30 make_newfilename = lambda old: decodeFilename(os.path.join(finaldir, os.path.basename(encodeFilename(old))))
dcf64d43 31 for oldfile, newfile in info['__files_to_move'].items():
0202b52a 32 if not newfile:
8a0b9322 33 newfile = make_newfilename(oldfile)
0202b52a 34 if os.path.abspath(encodeFilename(oldfile)) == os.path.abspath(encodeFilename(newfile)):
35 continue
98820640 36 if not os.path.exists(encodeFilename(oldfile)):
add96eb9 37 self.report_warning(f'File "{oldfile}" cannot be found')
98820640 38 continue
0202b52a 39 if os.path.exists(encodeFilename(newfile)):
40 if self.get_param('overwrites', True):
add96eb9 41 self.report_warning(f'Replacing existing file "{newfile}"')
de6000d9 42 os.remove(encodeFilename(newfile))
0202b52a 43 else:
44 self.report_warning(
add96eb9 45 f'Cannot move file "{oldfile}" out of temporary directory since "{newfile}" already exists. ')
0202b52a 46 continue
47 make_dir(newfile, PostProcessingError)
86e5f3ed 48 self.to_screen(f'Moving file "{oldfile}" to "{newfile}"')
0202b52a 49 shutil.move(oldfile, newfile) # os.rename cannot move between volumes
50
8a0b9322 51 info['filepath'] = finalpath
0202b52a 52 return [], info