Refactor photo metadata workflow

This commit is contained in:
ajp_anton
2026-08-24 16:34:20 +00:00
parent 100cad1cb5
commit eb5937a629
15 changed files with 2111 additions and 1727 deletions
+33 -1
View File
@@ -5,7 +5,9 @@ import unittest
from pathlib import Path
from unittest.mock import patch
from tools.exiftool import run_exiftool_command
from tools.exiftool import run_exiftool_command, run_exiftool_write
from tools.media_metadata import parse_exif_datetime
from tools.metadata_copy import copy_meaningful_metadata
class ExiftoolInvocationTests(unittest.TestCase):
@@ -34,6 +36,36 @@ class ExiftoolInvocationTests(unittest.TestCase):
)
self.assertEqual(captured["contents"], "-j\nC:\\Photos\\M\u00e4rchen.jpg\n")
def test_write_captures_success_output(self) -> None:
with patch(
"tools.exiftool.subprocess.run",
return_value=subprocess.CompletedProcess([], 0, "1 image files updated\n", ""),
) as run:
run_exiftool_write("exiftool", Path("photo.jpg"), ["-Artist=Test"])
self.assertTrue(run.call_args.kwargs["capture_output"])
self.assertTrue(run.call_args.kwargs["text"])
def test_write_includes_exiftool_failure_output(self) -> None:
with patch(
"tools.exiftool.subprocess.run",
return_value=subprocess.CompletedProcess([], 1, "", "Error renaming temporary file"),
):
with self.assertRaisesRegex(RuntimeError, "Error renaming temporary file"):
run_exiftool_write("exiftool", Path("photo.jpg"), ["-Artist=Test"])
def test_metadata_copy_uses_exiftool_for_photos(self) -> None:
with patch("tools.metadata_copy.run_exiftool_command") as run:
copy_meaningful_metadata("exiftool", Path("source.jpg"), Path("target.jpg"))
args = run.call_args.args[1]
self.assertEqual(args[:4], ["-overwrite_original", "-TagsFromFile", "source.jpg", "-all:all"])
self.assertEqual(args[-1], "target.jpg")
def test_metadata_datetime_can_assume_utc(self) -> None:
parsed = parse_exif_datetime("2026:07:04 14:13:36", assume_utc=True)
self.assertEqual(str(parsed.tzinfo), "UTC")
if __name__ == "__main__":
unittest.main()