summaryrefslogtreecommitdiffstats
path: root/test/test_postprocessor.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_postprocessor.py')
-rw-r--r--test/test_postprocessor.py115
1 files changed, 98 insertions, 17 deletions
diff --git a/test/test_postprocessor.py b/test/test_postprocessor.py
index 76e728c..2e39cc7 100644
--- a/test/test_postprocessor.py
+++ b/test/test_postprocessor.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-# Copyright 2019-2023 Mike Fährmann
+# Copyright 2019-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
@@ -10,7 +10,7 @@
import os
import sys
import unittest
-from unittest.mock import Mock, mock_open, patch
+from unittest.mock import Mock, mock_open, patch, call
import shutil
import logging
@@ -20,7 +20,7 @@ import collections
from datetime import datetime
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-from gallery_dl import extractor, output, path # noqa E402
+from gallery_dl import extractor, output, path, util # noqa E402
from gallery_dl import postprocessor, config # noqa E402
from gallery_dl.postprocessor.common import PostProcessor # noqa E402
@@ -209,7 +209,10 @@ class ExecTest(BasePostprocessorTest):
self.pathfmt.realpath,
self.pathfmt.realdirectory,
self.pathfmt.filename),
- shell=True)
+ shell=True,
+ creationflags=0,
+ start_new_session=False,
+ )
i.wait.assert_called_once_with()
def test_command_list(self):
@@ -231,8 +234,46 @@ class ExecTest(BasePostprocessorTest):
self.pathfmt.realdirectory.upper(),
],
shell=False,
+ creationflags=0,
+ start_new_session=False,
)
+ def test_command_many(self):
+ self._create({
+ "commands": [
+ "echo {} {_path} {_directory} {_filename} && rm {};",
+ ["~/script.sh", "{category}", "\fE _directory.upper()"],
+ ]
+ })
+
+ with patch("gallery_dl.util.Popen") as p:
+ i = Mock()
+ i.wait.return_value = 0
+ p.return_value = i
+ self._trigger(("after",))
+
+ self.assertEqual(p.call_args_list, [
+ call(
+ "echo {0} {0} {1} {2} && rm {0};".format(
+ self.pathfmt.realpath,
+ self.pathfmt.realdirectory,
+ self.pathfmt.filename),
+ shell=True,
+ creationflags=0,
+ start_new_session=False,
+ ),
+ call(
+ [
+ os.path.expanduser("~/script.sh"),
+ self.pathfmt.kwdict["category"],
+ self.pathfmt.realdirectory.upper(),
+ ],
+ shell=False,
+ creationflags=0,
+ start_new_session=False,
+ ),
+ ])
+
def test_command_returncode(self):
self._create({
"command": "echo {}",
@@ -264,6 +305,49 @@ class ExecTest(BasePostprocessorTest):
self.assertTrue(p.called)
self.assertFalse(i.wait.called)
+ @unittest.skipIf(util.WINDOWS, "not POSIX")
+ def test_session_posix(self):
+ self._create({
+ "session": True,
+ "command": ["echo", "foobar"],
+ })
+
+ with patch("gallery_dl.util.Popen") as p:
+ i = Mock()
+ i.wait.return_value = 0
+ p.return_value = i
+ self._trigger(("after",))
+
+ p.assert_called_once_with(
+ ["echo", "foobar"],
+ shell=False,
+ creationflags=0,
+ start_new_session=True,
+ )
+ i.wait.assert_called_once_with()
+
+ @unittest.skipIf(not util.WINDOWS, "not Windows")
+ def test_session_windows(self):
+ self._create({
+ "session": True,
+ "command": ["echo", "foobar"],
+ })
+
+ with patch("gallery_dl.util.Popen") as p:
+ i = Mock()
+ i.wait.return_value = 0
+ p.return_value = i
+ self._trigger(("after",))
+
+ import subprocess
+ p.assert_called_once_with(
+ ["echo", "foobar"],
+ shell=False,
+ creationflags=subprocess.CREATE_NEW_PROCESS_GROUP,
+ start_new_session=False,
+ )
+ i.wait.assert_called_once_with()
+
class HashTest(BasePostprocessorTest):
@@ -345,9 +429,7 @@ class MetadataTest(BasePostprocessorTest):
path = self.pathfmt.realpath + ".JSON"
m.assert_called_once_with(path, "w", encoding="utf-8")
- if sys.hexversion >= 0x3060000:
- # python 3.4 & 3.5 have random order without 'sort: True'
- self.assertEqual(self._output(m), """{
+ self.assertEqual(self._output(m), """{
"category": "test",
"filename": "file",
"extension": "ext",
@@ -713,8 +795,7 @@ class MetadataTest(BasePostprocessorTest):
}
""")
- @staticmethod
- def _output(mock):
+ def _output(self, mock):
return "".join(
call[1][0]
for call in mock.mock_calls
@@ -727,32 +808,32 @@ class MtimeTest(BasePostprocessorTest):
def test_mtime_datetime(self):
self._create(None, {"date": datetime(1980, 1, 1)})
self._trigger()
- self.assertEqual(self.pathfmt.kwdict["_mtime"], 315532800)
+ self.assertEqual(self.pathfmt.kwdict["_mtime_meta"], 315532800)
def test_mtime_timestamp(self):
self._create(None, {"date": 315532800})
self._trigger()
- self.assertEqual(self.pathfmt.kwdict["_mtime"], 315532800)
+ self.assertEqual(self.pathfmt.kwdict["_mtime_meta"], 315532800)
def test_mtime_none(self):
self._create(None, {"date": None})
self._trigger()
- self.assertNotIn("_mtime", self.pathfmt.kwdict)
+ self.assertNotIn("_mtime_meta", self.pathfmt.kwdict)
def test_mtime_undefined(self):
self._create(None, {})
self._trigger()
- self.assertNotIn("_mtime", self.pathfmt.kwdict)
+ self.assertNotIn("_mtime_meta", self.pathfmt.kwdict)
def test_mtime_key(self):
self._create({"key": "foo"}, {"foo": 315532800})
self._trigger()
- self.assertEqual(self.pathfmt.kwdict["_mtime"], 315532800)
+ self.assertEqual(self.pathfmt.kwdict["_mtime_meta"], 315532800)
def test_mtime_value(self):
self._create({"value": "{foo}"}, {"foo": 315532800})
self._trigger()
- self.assertEqual(self.pathfmt.kwdict["_mtime"], 315532800)
+ self.assertEqual(self.pathfmt.kwdict["_mtime_meta"], 315532800)
class PythonTest(BasePostprocessorTest):
@@ -945,8 +1026,8 @@ class ZipTest(BasePostprocessorTest):
self._trigger(("finalize",))
self.assertEqual(pp.zfile.write.call_count, 3)
- for call in pp.zfile.write.call_args_list:
- args, kwargs = call
+ for call_args in pp.zfile.write.call_args_list:
+ args, kwargs = call_args
self.assertEqual(len(args), 2)
self.assertEqual(len(kwargs), 0)
self.assertEqual(args[0], self.pathfmt.temppath)