fix(schema): drop leading separator when series or volume is missing

This commit is contained in:
Steppenstreuner
2026-08-29 07:19:57 +02:00
parent 3e28ad5f94
commit d71ea54c6e
2 changed files with 15 additions and 1 deletions
+13
View File
@@ -46,3 +46,16 @@ def test_series_level_kept_when_set():
r.narrator = "Rufus Beck" r.narrator = "Rufus Beck"
assert render_template("{Author}/{Series}/{Title} ({Narrator})", r) == \ assert render_template("{Author}/{Series}/{Title} ({Narrator})", r) == \
"J.K. Rowling/Harry Potter/Harry Potter und der Feuerkelch (Rufus Beck)" "J.K. Rowling/Harry Potter/Harry Potter und der Feuerkelch (Rufus Beck)"
def test_missing_values_do_not_leave_dangling_separators():
"""A "{Series}/{Volume} - {Title}" library still has standalone titles."""
req = SimpleNamespace(title="Ein Einzeltitel", authors="Jemand", series="",
volume=None, year=None, narrator="")
assert render_template("{Series}/{Volume} - {Title}", req) == "Ein Einzeltitel"
assert render_template("{Volume} - {Title} ({Year})", req) == "Ein Einzeltitel"
numbered = SimpleNamespace(title="Die Höllenbrut", authors="A. F. Morland",
series="Tony Ballard", volume=1, year=2020, narrator="")
assert render_template("{Series}/{Volume} - {Title}", numbered) == \
"Tony Ballard/01 - Die Höllenbrut"
+2 -1
View File
@@ -29,7 +29,8 @@ def render_template(template: str, request) -> str:
seg = seg.replace("{" + key + "}", val) seg = seg.replace("{" + key + "}", val)
# drop empty parenthesized/dangling bits from missing values, e.g. "Title ()" # drop empty parenthesized/dangling bits from missing values, e.g. "Title ()"
seg = re.sub(r"\(\s*\)", "", seg) seg = re.sub(r"\(\s*\)", "", seg)
seg = re.sub(r"(-|)\s*$", "", seg).strip() seg = re.sub(r"(-|)\s*$", "", seg)
seg = re.sub(r"^\s*(-||·)\s*", "", seg).strip()
if not seg: if not seg:
continue # drop path levels that are empty (e.g. {Series} without a series) continue # drop path levels that are empty (e.g. {Series} without a series)
segments.append(sanitize(seg)) segments.append(sanitize(seg))