From 117eeefda0d1beced1e3fe448d34bb80d8584353 Mon Sep 17 00:00:00 2001 From: bradenhilton Date: Fri, 8 Jul 2022 19:56:01 +0100 Subject: [PATCH] [postprocessor:mtime] add 'value' option (#2739) --- docs/configuration.rst | 18 ++++++++++++++++++ gallery_dl/postprocessor/mtime.py | 11 ++++++++--- test/test_postprocessor.py | 11 ++++++----- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 43c453e9fb..74a71b2902 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -3464,6 +3464,24 @@ Description This value must either be a UNIX timestamp or a |datetime|_ object. + Note: This option gets ignored if `mtime.value`_ is set. + + +mtime.value +----------- +Type + ``string`` +Default + ``null`` +Example + * ``"{status[date]}"`` + * ``"{content[0:6]:R22/2022/D%Y%m%d/}"`` +Description + A `format string`_ whose value should be used. + + The resulting value must either be a UNIX timestamp or a + |datetime|_ object. + ugoira.extension ---------------- diff --git a/gallery_dl/postprocessor/mtime.py b/gallery_dl/postprocessor/mtime.py index 3f8d90a76d..ea61b7b493 100644 --- a/gallery_dl/postprocessor/mtime.py +++ b/gallery_dl/postprocessor/mtime.py @@ -9,7 +9,7 @@ """Use metadata as file modification time""" from .common import PostProcessor -from .. import text, util +from .. import text, util, formatter from datetime import datetime @@ -17,7 +17,12 @@ class MtimePP(PostProcessor): def __init__(self, job, options): PostProcessor.__init__(self, job) - self.key = options.get("key", "date") + value = options.get("value") + if value: + self._get = formatter.parse(value, None, util.identity).format_map + else: + key = options.get("key", "date") + self._get = lambda kwdict: kwdict.get(key) events = options.get("event") if events is None: @@ -27,7 +32,7 @@ def __init__(self, job, options): job.register_hooks({event: self.run for event in events}, options) def run(self, pathfmt): - mtime = pathfmt.kwdict.get(self.key) + mtime = self._get(pathfmt.kwdict) pathfmt.kwdict["_mtime"] = ( util.datetime_to_timestamp(mtime) if isinstance(mtime, datetime) else diff --git a/test/test_postprocessor.py b/test/test_postprocessor.py index c382c0e410..fbe6d76b1c 100644 --- a/test/test_postprocessor.py +++ b/test/test_postprocessor.py @@ -350,10 +350,6 @@ def _output(mock): class MtimeTest(BasePostprocessorTest): - def test_mtime_default(self): - pp = self._create() - self.assertEqual(pp.key, "date") - def test_mtime_datetime(self): self._create(None, {"date": datetime(1980, 1, 1)}) self._trigger() @@ -364,11 +360,16 @@ def test_mtime_timestamp(self): self._trigger() self.assertEqual(self.pathfmt.kwdict["_mtime"], 315532800) - def test_mtime_custom(self): + def test_mtime_key(self): self._create({"key": "foo"}, {"foo": 315532800}) self._trigger() self.assertEqual(self.pathfmt.kwdict["_mtime"], 315532800) + def test_mtime_value(self): + self._create({"value": "{foo}"}, {"foo": 315532800}) + self._trigger() + self.assertEqual(self.pathfmt.kwdict["_mtime"], 315532800) + class ZipTest(BasePostprocessorTest):