Add per-movie attributes and per-category filename templates
This commit is contained in:
@@ -141,6 +141,67 @@ class TestHardlinkManager:
|
||||
# The mirror (not a managed tag folder) is left alone
|
||||
assert mirror_link.exists()
|
||||
|
||||
def test_category_transform_groups_folder_by_band(
|
||||
self, temp_source_dir, temp_output_dir, tag_manager
|
||||
):
|
||||
"""Exact tag value, but the folder name goes through the transform."""
|
||||
f = File(temp_source_dir / "file1.txt", tag_manager)
|
||||
f.tags.clear()
|
||||
f.add_tag(Tag("Hodnocení", "90")) # exact rating tag
|
||||
manager = HardlinkManager(temp_output_dir)
|
||||
manager.create_structure_for_files(
|
||||
[f],
|
||||
category_roots={"Hodnocení": "Dle hodnocení"},
|
||||
category_transforms={"Hodnocení": "decade_band"},
|
||||
)
|
||||
|
||||
# folder is the band; the file lands inside it
|
||||
assert (temp_output_dir / "Dle hodnocení" / "90–100 %" / "file1.txt").exists()
|
||||
# not a per-exact-value folder
|
||||
assert not (temp_output_dir / "Dle hodnocení" / "90").exists()
|
||||
|
||||
def test_filename_template_applies_only_in_that_category(
|
||||
self, temp_source_dir, temp_output_dir, tag_manager
|
||||
):
|
||||
"""A per-category template renames the hardlink only inside its folder."""
|
||||
f = File(temp_source_dir / "file1.txt", tag_manager)
|
||||
f.tags.clear()
|
||||
f.title = "Dr. No"
|
||||
f.csfd_cache = {"year": 1962}
|
||||
f.add_tag(Tag("Kolekce", "James Bond"))
|
||||
f.add_tag(Tag("žánr", "Akční"))
|
||||
manager = HardlinkManager(temp_output_dir)
|
||||
manager.create_structure_for_files(
|
||||
[f],
|
||||
category_roots={"Kolekce": "Dle kolekce", "žánr": ""},
|
||||
category_filename_templates={"Kolekce": "{year} - {title}{ext}"},
|
||||
)
|
||||
|
||||
# Templated name inside the collection folder
|
||||
assert (temp_output_dir / "Dle kolekce" / "James Bond" / "1962 - Dr. No.txt").exists()
|
||||
# Other categories keep the pool filename
|
||||
assert (temp_output_dir / "Akční" / "file1.txt").exists()
|
||||
|
||||
def test_filename_template_cleanup_is_consistent(
|
||||
self, temp_source_dir, temp_output_dir, tag_manager
|
||||
):
|
||||
"""sync twice with a template leaves no stale/duplicate templated link."""
|
||||
f = File(temp_source_dir / "file1.txt", tag_manager)
|
||||
f.tags.clear()
|
||||
f.title = "Dr. No"
|
||||
f.csfd_cache = {"year": 1962}
|
||||
f.add_tag(Tag("Kolekce", "James Bond"))
|
||||
roots = {"Kolekce": "Dle kolekce"}
|
||||
templates = {"Kolekce": "{year} - {title}{ext}"}
|
||||
manager = HardlinkManager(temp_output_dir)
|
||||
manager.sync_structure([f], category_roots=roots, category_filename_templates=templates)
|
||||
created, _, removed, _ = manager.sync_structure(
|
||||
[f], category_roots=roots, category_filename_templates=templates)
|
||||
|
||||
folder = temp_output_dir / "Dle kolekce" / "James Bond"
|
||||
assert [p.name for p in folder.iterdir()] == ["1962 - Dr. No.txt"]
|
||||
assert removed == 0 # nothing treated as obsolete on the second run
|
||||
|
||||
def test_dry_run(self, files_with_tags, temp_output_dir):
|
||||
"""Test dry run (bez skutečného vytváření)"""
|
||||
manager = HardlinkManager(temp_output_dir)
|
||||
|
||||
Reference in New Issue
Block a user