# -*- coding: utf-8 -*- # Copyright 2018-2023 Mike Fährmann # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. """Common classes and constants used by postprocessor modules.""" from .. import util, formatter, archive class PostProcessor(): """Base class for postprocessors""" def __init__(self, job): self.name = self.__class__.__name__[:-2].lower() self.log = job.get_logger("postprocessor." + self.name) def __repr__(self): return self.__class__.__name__ def _init_archive(self, job, options, prefix=None): archive_path = options.get("archive") if archive_path: extr = job.extractor archive_path = util.expand_path(archive_path) archive_prefix = options.get("archive-prefix") if archive_prefix is None: archive_prefix = extr.category archive_format = options.get("archive-format") if archive_format is None: if prefix is None: prefix = "_" + self.name.upper() + "_" archive_format = prefix + extr.archive_fmt try: if "{" in archive_path: archive_path = formatter.parse(archive_path).format_map( job.pathfmt.kwdict) self.archive = archive.DownloadArchive( archive_path, archive_prefix + archive_format, options.get("archive-pragma"), "_archive_" + self.name, ) except Exception as exc: self.log.warning( "Failed to open %s archive at '%s' (%s: %s)", self.name, archive_path, exc.__class__.__name__, exc) else: self.log.debug( "Using %s archive '%s'", self.name, archive_path) return True self.archive = None return False