- add 'final' option - include job status in pp finalization - improve and extend documentation
This commit is contained in:
@@ -67,6 +67,9 @@ class Job():
|
||||
exc.__class__.__name__, exc)
|
||||
log.debug("", exc_info=True)
|
||||
self.status |= 1
|
||||
except BaseException:
|
||||
self.status |= 1
|
||||
raise
|
||||
finally:
|
||||
self.handle_finalize()
|
||||
return self.status
|
||||
@@ -255,13 +258,15 @@ class DownloadJob(Job):
|
||||
self._write_unsupported(url)
|
||||
|
||||
def handle_finalize(self):
|
||||
if self.postprocessors:
|
||||
for pp in self.postprocessors:
|
||||
pp.finalize()
|
||||
pathfmt = self.pathfmt
|
||||
if self.archive:
|
||||
self.archive.close()
|
||||
if self.pathfmt:
|
||||
if pathfmt:
|
||||
self.extractor._store_cookies()
|
||||
if self.postprocessors:
|
||||
status = self.status
|
||||
for pp in self.postprocessors:
|
||||
pp.run_final(pathfmt, status)
|
||||
|
||||
def handle_skip(self):
|
||||
self.out.skip(self.pathfmt.path)
|
||||
|
||||
@@ -31,8 +31,8 @@ class PostProcessor():
|
||||
"""Execute postprocessor after moving a file to its target location"""
|
||||
|
||||
@staticmethod
|
||||
def finalize():
|
||||
"""Cleanup"""
|
||||
def run_final(pathfmt, status):
|
||||
"""Postprocessor finalization after all files have been downloaded"""
|
||||
|
||||
def __repr__(self):
|
||||
return self.__class__.__name__
|
||||
|
||||
@@ -26,17 +26,26 @@ class ExecPP(PostProcessor):
|
||||
def __init__(self, pathfmt, options):
|
||||
PostProcessor.__init__(self)
|
||||
args = options["command"]
|
||||
final = options.get("final", False)
|
||||
|
||||
if isinstance(args, str):
|
||||
if final:
|
||||
self._format = self._format_args_directory
|
||||
else:
|
||||
self._format = self._format_args_path
|
||||
if "{}" not in args:
|
||||
args += " {}"
|
||||
self.args = args
|
||||
self.shell = True
|
||||
self._format = self._format_args_string
|
||||
else:
|
||||
self._format = self._format_args_list
|
||||
self.args = [util.Formatter(arg) for arg in args]
|
||||
self.shell = False
|
||||
self._format = self._format_args_list
|
||||
|
||||
if final:
|
||||
self.run_after = PostProcessor.run_after
|
||||
else:
|
||||
self.run_final = PostProcessor.run_final
|
||||
|
||||
if options.get("async", False):
|
||||
self._exec = self._exec_async
|
||||
@@ -44,9 +53,16 @@ class ExecPP(PostProcessor):
|
||||
def run_after(self, pathfmt):
|
||||
self._exec(self._format(pathfmt))
|
||||
|
||||
def _format_args_string(self, pathfmt):
|
||||
def run_final(self, pathfmt, status):
|
||||
if status == 0:
|
||||
self._exec(self._format(pathfmt))
|
||||
|
||||
def _format_args_path(self, pathfmt):
|
||||
return self.args.replace("{}", quote(pathfmt.realpath))
|
||||
|
||||
def _format_args_directory(self, pathfmt):
|
||||
return self.args.replace("{}", quote(pathfmt.realdirectory))
|
||||
|
||||
def _format_args_list(self, pathfmt):
|
||||
kwdict = pathfmt.kwdict
|
||||
kwdict["_directory"] = pathfmt.realdirectory
|
||||
|
||||
@@ -59,7 +59,7 @@ class ZipPP(PostProcessor):
|
||||
with zipfile.ZipFile(*self.args) as zfile:
|
||||
self._write(pathfmt, zfile)
|
||||
|
||||
def finalize(self):
|
||||
def run_final(self, pathfmt, status):
|
||||
if self.zfile:
|
||||
self.zfile.close()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user