fix(plex): S5b review — preserve enriched cast_names across full syncs
Address the /code-review high finding on S5b: gating the info-page cast enrich on `people_enriched_at is None` removed the old per-view regrow of `cast_names`, so a routine full sync that reset it to the listing top-20 (`_apply_facet_fields`) — while never clearing people_enriched_at — left it permanently truncated, silently dropping cast past the top ~20 from the S4 person-page filter. Root fix: `_apply_facet_fields` now only takes the listing's cast for a NOT-yet-enriched row; an enriched row keeps its fuller stored cast (people_text still rebuilt from the updated directors + the preserved cast). Makes the people_enriched_at flag the endpoints/backfill trust actually reliable. Tests: cast_names preserved for an enriched row vs applied for a fresh one; show_detail lazy-fill persists imdb/full_cast on first view. Full suite green.
This commit is contained in:
@@ -304,7 +304,12 @@ def _apply_facet_fields(row, meta: dict) -> None:
|
||||
row.originally_available_at = _date(meta.get("originallyAvailableAt"))
|
||||
row.genres = _tags(meta, "Genre")
|
||||
row.directors = _tags(meta, "Director")
|
||||
row.cast_names = _tags(meta, "Role", limit=20)
|
||||
# The listing carries only the top ~20 cast, so re-applying it would DOWNGRADE an already-enriched
|
||||
# full cast (up to 24, grown by the rich backfill/info-page enrich) — and since a sync never clears
|
||||
# `people_enriched_at`, nothing would regrow it, silently breaking the person-page cast filter for
|
||||
# names past the top ~20. Only take the listing's cast before the row is enriched; keep it after.
|
||||
if row.people_enriched_at is None:
|
||||
row.cast_names = _tags(meta, "Role", limit=20)
|
||||
people = list(dict.fromkeys((row.directors or []) + (row.cast_names or [])))
|
||||
row.people_text = " ".join(people) or None
|
||||
|
||||
|
||||
Reference in New Issue
Block a user