diff options
Diffstat (limited to 'gallery_dl/job.py')
| -rw-r--r-- | gallery_dl/job.py | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/gallery_dl/job.py b/gallery_dl/job.py index f7d84f0..a64c040 100644 --- a/gallery_dl/job.py +++ b/gallery_dl/job.py @@ -7,7 +7,6 @@ # published by the Free Software Foundation. import sys -import json import errno import logging import functools @@ -33,6 +32,12 @@ class Job(): self.kwdict = {} self.status = 0 + actions = extr.config("actions") + if actions: + from .actions import parse + self._logger_actions = parse(actions) + self._wrap_logger = self._wrap_logger_actions + path_proxy = output.PathfmtProxy(self) self._logger_extra = { "job" : self, @@ -68,7 +73,7 @@ class Job(): if version_info: self.kwdict[version_info] = { "version" : version.__version__, - "is_executable" : getattr(sys, "frozen", False), + "is_executable" : util.EXECUTABLE, "current_git_head": util.git_head() } @@ -94,7 +99,7 @@ class Job(): if exc.message: log.error(exc.message) self.status |= exc.code - except exception.TerminateExtraction: + except (exception.TerminateExtraction, exception.RestartExtraction): raise except exception.GalleryDLException as exc: log.error("%s: %s", exc.__class__.__name__, exc) @@ -201,7 +206,10 @@ class Job(): return self._wrap_logger(logging.getLogger(name)) def _wrap_logger(self, logger): - return output.LoggerAdapter(logger, self._logger_extra) + return output.LoggerAdapter(logger, self) + + def _wrap_logger_actions(self, logger): + return output.LoggerAdapterActions(logger, self) def _write_unsupported(self, url): if self.ulog: @@ -344,12 +352,18 @@ class DownloadJob(Job): if kwdict: job.kwdict.update(kwdict) - if pextr.config("parent-skip"): - job._skipcnt = self._skipcnt - self.status |= job.run() - self._skipcnt = job._skipcnt - else: - self.status |= job.run() + while True: + try: + if pextr.config("parent-skip"): + job._skipcnt = self._skipcnt + self.status |= job.run() + self._skipcnt = job._skipcnt + else: + self.status |= job.run() + break + except exception.RestartExtraction: + pass + else: self._write_unsupported(url) @@ -436,10 +450,12 @@ class DownloadJob(Job): archive = util.expand_path(archive) archive_format = (cfg("archive-prefix", extr.category) + cfg("archive-format", extr.archive_fmt)) + archive_pragma = (cfg("archive-pragma")) try: if "{" in archive: archive = formatter.parse(archive).format_map(kwdict) - self.archive = util.DownloadArchive(archive, archive_format) + self.archive = util.DownloadArchive( + archive, archive_format, archive_pragma) except Exception as exc: extr.log.warning( "Failed to open download archive at '%s' ('%s: %s')", @@ -709,17 +725,19 @@ class InfoJob(Job): def _print_multi(self, title, *values): stdout_write("{}\n {}\n\n".format( - title, " / ".join(json.dumps(v) for v in values))) + title, " / ".join(map(util.json_dumps, values)))) def _print_config(self, title, optname, value): optval = self.extractor.config(optname, util.SENTINEL) if optval is not util.SENTINEL: stdout_write( "{} (custom):\n {}\n{} (default):\n {}\n\n".format( - title, json.dumps(optval), title, json.dumps(value))) + title, util.json_dumps(optval), + title, util.json_dumps(value))) elif value: stdout_write( - "{} (default):\n {}\n\n".format(title, json.dumps(value))) + "{} (default):\n {}\n\n".format( + title, util.json_dumps(value))) class DataJob(Job): |
