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.py73
1 files changed, 46 insertions, 27 deletions
diff --git a/gallery_dl/job.py b/gallery_dl/job.py
index 6ba2572..130df58 100644
--- a/gallery_dl/job.py
+++ b/gallery_dl/job.py
@@ -24,20 +24,32 @@ class Job():
extr = extractor.find(extr)
if not extr:
raise exception.NoExtractorError()
-
self.extractor = extr
- extr.log.extractor = extr
- extr.log.job = self
+ self.pathfmt = None
+
+ self._logger_extra = {
+ "job" : self,
+ "extractor": extr,
+ "path" : output.PathfmtProxy(self),
+ "keywords" : output.KwdictProxy(self),
+ }
+ extr.log = self._wrap_logger(extr.log)
extr.log.debug("Using %s for '%s'", extr.__class__.__name__, extr.url)
self.status = 0
self.pred_url = self._prepare_predicates("image", True)
self.pred_queue = self._prepare_predicates("chapter", False)
- if parent and parent.extractor.config(
- "category-transfer", parent.extractor.categorytransfer):
- self.extractor.category = parent.extractor.category
- self.extractor.subcategory = parent.extractor.subcategory
+ if parent:
+ pextr = parent.extractor
+
+ # transfer (sub)category
+ if pextr.config("category-transfer", pextr.categorytransfer):
+ extr.category = pextr.category
+ extr.subcategory = pextr.subcategory
+
+ # reuse connection adapters
+ extr.session.adapters = pextr.session.adapters
# user-supplied metadata
self.userkwds = self.extractor.config("keywords")
@@ -165,6 +177,12 @@ class Job():
return util.build_predicate(predicates)
+ def get_logger(self, name):
+ return self._wrap_logger(logging.getLogger(name))
+
+ def _wrap_logger(self, logger):
+ return output.LoggerAdapter(logger, self._logger_extra)
+
def _write_unsupported(self, url):
if self.ulog:
self.ulog.info(url)
@@ -175,8 +193,7 @@ class DownloadJob(Job):
def __init__(self, url, parent=None):
Job.__init__(self, url, parent)
- self.log = logging.getLogger("download")
- self.pathfmt = None
+ self.log = self.get_logger("download")
self.archive = None
self.sleep = None
self.downloaders = {}
@@ -325,7 +342,7 @@ class DownloadJob(Job):
cls = downloader.find(scheme)
if cls and config.get(("downloader", cls.scheme), "enabled", True):
- instance = cls(self.extractor, self.out)
+ instance = cls(self)
else:
instance = None
self.log.error("'%s:' URLs are not supported/enabled", scheme)
@@ -338,19 +355,20 @@ class DownloadJob(Job):
def initialize(self, kwdict=None):
"""Delayed initialization of PathFormat, etc."""
- self.pathfmt = util.PathFormat(self.extractor)
+ config = self.extractor.config
+ pathfmt = self.pathfmt = util.PathFormat(self.extractor)
if kwdict:
- self.pathfmt.set_directory(kwdict)
+ pathfmt.set_directory(kwdict)
- self.sleep = self.extractor.config("sleep")
- if not self.extractor.config("download", True):
- self.download = self.pathfmt.fix_extension
+ self.sleep = config("sleep")
+ if not config("download", True):
+ self.download = pathfmt.fix_extension
- skip = self.extractor.config("skip", True)
+ skip = config("skip", True)
if skip:
self._skipexc = None
if skip == "enumerate":
- self.pathfmt.check_file = self.pathfmt._enum_file
+ pathfmt.check_file = pathfmt._enum_file
elif isinstance(skip, str):
skip, _, smax = skip.partition(":")
if skip == "abort":
@@ -360,9 +378,9 @@ class DownloadJob(Job):
self._skipcnt = 0
self._skipmax = text.parse_int(smax)
else:
- self.pathfmt.exists = lambda x=None: False
+ pathfmt.exists = lambda x=None: False
- archive = self.extractor.config("archive")
+ archive = config("archive")
if archive:
path = util.expand_path(archive)
try:
@@ -374,27 +392,28 @@ class DownloadJob(Job):
else:
self.extractor.log.debug("Using download archive '%s'", path)
- postprocessors = self.extractor.config("postprocessors")
+ postprocessors = config("postprocessors")
if postprocessors:
+ pp_log = self.get_logger("postprocessor")
pp_list = []
+ category = self.extractor.category
for pp_dict in postprocessors:
whitelist = pp_dict.get("whitelist")
blacklist = pp_dict.get("blacklist")
- if (whitelist and self.extractor.category not in whitelist or
- blacklist and self.extractor.category in blacklist):
+ if (whitelist and category not in whitelist or
+ blacklist and category in blacklist):
continue
name = pp_dict.get("name")
pp_cls = postprocessor.find(name)
if not pp_cls:
- postprocessor.log.warning("module '%s' not found", name)
+ pp_log.warning("module '%s' not found", name)
continue
try:
- pp_obj = pp_cls(self.pathfmt, pp_dict)
+ pp_obj = pp_cls(self, pp_dict)
except Exception as exc:
- postprocessor.log.error(
- "'%s' initialization failed: %s: %s",
- name, exc.__class__.__name__, exc)
+ pp_log.error("'%s' initialization failed: %s: %s",
+ name, exc.__class__.__name__, exc)
else:
pp_list.append(pp_obj)