fix(sidecar): strip gallery-dl 'NN_' numbering prefix when locating sidecars — fixes 'deep scan refresh count high but 0 Posts created' (operator-flagged 2026-05-26) — Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,51 @@ def test_find_sidecar_none(tmp_path):
|
||||
assert find_sidecar(media) is None
|
||||
|
||||
|
||||
def test_find_sidecar_gallerydl_numbered_prefix(tmp_path):
|
||||
"""gallery-dl prefixes media filenames with NN_ for in-post ordering
|
||||
(e.g. `01_HOLLOW-ICHIGO.png`) but writes the post-level sidecar under
|
||||
the attachment stem WITHOUT the prefix (`HOLLOW-ICHIGO.json`).
|
||||
Confirmed against real Patreon downloads 2026-05-26 — operator's deep
|
||||
scan produced 24 refresh calls but 0 Posts because the unprefixed
|
||||
sidecar was invisible to find_sidecar."""
|
||||
media = tmp_path / "01_HOLLOW-ICHIGO.png"
|
||||
media.write_bytes(b"x")
|
||||
sc = tmp_path / "HOLLOW-ICHIGO.json"
|
||||
sc.write_text("{}")
|
||||
assert find_sidecar(media) == sc
|
||||
|
||||
|
||||
def test_find_sidecar_multidigit_prefix(tmp_path):
|
||||
"""Numbering prefix can be wider than 2 digits (`001_...`); the strip
|
||||
handles any \\d+_ form."""
|
||||
media = tmp_path / "001_mirko-sketch.png"
|
||||
media.write_bytes(b"x")
|
||||
sc = tmp_path / "mirko-sketch.json"
|
||||
sc.write_text("{}")
|
||||
assert find_sidecar(media) == sc
|
||||
|
||||
|
||||
def test_find_sidecar_prefers_attachment_level_over_post_level(tmp_path):
|
||||
"""If BOTH a per-attachment sidecar and a post-level sidecar exist,
|
||||
the attachment-level one wins (it's more specific)."""
|
||||
media = tmp_path / "01_image.png"
|
||||
media.write_bytes(b"x")
|
||||
per_attachment = tmp_path / "01_image.json"
|
||||
per_attachment.write_text('{"specific": true}')
|
||||
post_level = tmp_path / "image.json"
|
||||
post_level.write_text('{"specific": false}')
|
||||
assert find_sidecar(media) == per_attachment
|
||||
|
||||
|
||||
def test_find_sidecar_no_underscore_not_treated_as_prefix(tmp_path):
|
||||
"""`01.png` (just digits, no underscore-separated stem) shouldn't
|
||||
match. The regex requires NN_<something>."""
|
||||
media = tmp_path / "01.png"
|
||||
media.write_bytes(b"x")
|
||||
(tmp_path / ".json").write_text("{}") # would be matched only if buggy
|
||||
assert find_sidecar(media) is None
|
||||
|
||||
|
||||
def test_parse_empty_dict_all_none():
|
||||
sd = parse_sidecar({})
|
||||
assert isinstance(sd, SidecarData)
|
||||
|
||||
Reference in New Issue
Block a user