From fd734b92223a02c0c392e4eece6bf82ba0da1fc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Fri, 10 May 2024 22:17:53 +0200 Subject: [PATCH] [archive] add 'archive-mode' option (#5255) --- docs/configuration.rst | 18 +++++++++++++++++- gallery_dl/job.py | 8 +++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 5624d1a5..3f4539f8 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -844,6 +844,22 @@ Description An alternative `format string`_ to build archive IDs with. +extractor.*.archive-mode +------------------------ +Type + ``string`` +Default + ``"file"`` +Description + Controls when to write `archive IDs `__ + to the archive database. + + * ``"file"``: Write IDs immediately + after completing or skipping a file download. + * ``"memory"``: Keep IDs in memory + and only write them after successful job completion. + + extractor.*.archive-prefix -------------------------- Type @@ -6172,7 +6188,7 @@ Description * format * General format string for logging messages - or a dictionary with format strings for each loglevel. + or an ``object`` with format strings for each loglevel. In addition to the default `LogRecord attributes `__, diff --git a/gallery_dl/job.py b/gallery_dl/job.py index 6c2d2ba8..b4efb26f 100644 --- a/gallery_dl/job.py +++ b/gallery_dl/job.py @@ -436,6 +436,8 @@ class DownloadJob(Job): def handle_finalize(self): if self.archive: + if not self.status: + self.archive.finalize() self.archive.close() pathfmt = self.pathfmt @@ -530,7 +532,11 @@ class DownloadJob(Job): if "{" in archive_path: archive_path = formatter.parse( archive_path).format_map(kwdict) - self.archive = archive.DownloadArchive( + if cfg("archive-mode") == "memory": + archive_cls = archive.DownloadArchiveMemory + else: + archive_cls = archive.DownloadArchive + self.archive = archive_cls( archive_path, archive_format, archive_pragma) except Exception as exc: extr.log.warning(