[pp:directory] add 'directory' post processor (#7432)

This commit is contained in:
Mike Fährmann
2025-04-27 22:05:35 +02:00
parent 7386cb78bc
commit 9b43a3677e
4 changed files with 64 additions and 0 deletions

View File

@@ -6440,6 +6440,19 @@ Description
Only compare file sizes. Do not read and compare their content.
directory.event
---------------
Type
* ``string``
* ``list`` of ``strings``
Default
``"prepare"``
Description
The event(s) for which directory_ format strings are (re)evaluated.
See `metadata.event`_ for a list of available events.
exec.archive
------------
Type
@@ -7738,6 +7751,8 @@ Description
``compare``
| Compare versions of the same file and replace/enumerate them on mismatch
| (requires `downloader.*.part`_ = ``true`` and `extractor.*.skip`_ = ``false``)
``directory``
Reevaluate directory_ format strings
``exec``
Execute external commands
``hash``

View File

@@ -11,6 +11,7 @@
modules = [
"classify",
"compare",
"directory",
"exec",
"hash",
"metadata",

View File

@@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Copyright 2025 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.
"""Trigger directory format string evaluation"""
from .common import PostProcessor
class DirectoryPP(PostProcessor):
def __init__(self, job, options):
PostProcessor.__init__(self, job)
events = options.get("event")
if events is None:
events = ("prepare",)
elif isinstance(events, str):
events = events.split(",")
job.register_hooks({event: self.run for event in events}, options)
def run(self, pathfmt):
pathfmt.set_directory(pathfmt.kwdict)
__postprocessor__ = DirectoryPP

View File

@@ -173,6 +173,24 @@ class ClassifyTest(BasePostprocessorTest):
self.assertEqual(self.pathfmt.realpath, path + "/file.foo")
class DirectoryTest(BasePostprocessorTest):
def test_default(self):
self._create()
path = os.path.join(self.dir.name, "test")
self.assertEqual(self.pathfmt.realdirectory, path + "/")
self.assertEqual(self.pathfmt.realpath, path + "/file.ext")
self.pathfmt.kwdict["category"] = "custom"
self._trigger()
path = os.path.join(self.dir.name, "custom")
self.assertEqual(self.pathfmt.realdirectory, path + "/")
self.pathfmt.build_path()
self.assertEqual(self.pathfmt.realpath, path + "/file.ext")
class ExecTest(BasePostprocessorTest):
def test_command_string(self):