summaryrefslogtreecommitdiffstats
path: root/gallery_dl/job.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/job.py')
-rw-r--r--gallery_dl/job.py46
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):