fix(downloads): clip long titles to fit display_name (VARCHAR 255)

A download whose source title exceeded 255 chars (e.g. a recipe baked into a
Facebook video's title) failed with a StringDataRightTruncation: the worker
auto-fills an empty display_name from the title, which overflows the 255-char
column. Clip the title to 255 at every point it flows into display_name (worker
completion paths + enqueue); the full title is untouched on the asset. Pre-existing
latent bug, surfaced by an unusually long title.

Release v0.31.1.
This commit is contained in:
npeter83 2026-07-07 21:40:15 +02:00
parent ccbcc34bd3
commit 33fad8911b
4 changed files with 14 additions and 4 deletions

View file

@ -114,7 +114,7 @@ def enqueue(
source_ref=source_ref,
profile_id=profile_id,
profile_snapshot=spec,
display_name=display_name or (asset.title if asset.status == "ready" else None),
display_name=display_name or (asset.title[:255] if asset.status == "ready" and asset.title else None),
status="queued",
queue_pos=_next_queue_pos(db),
)

View file

@ -203,7 +203,8 @@ def _finish_from_cache(job_id: int, asset_id: int) -> None:
job.progress = 100
job.phase = None
if not job.display_name:
job.display_name = asset.title
# display_name is VARCHAR(255); a title can be longer (e.g. a recipe in the title).
job.display_name = asset.title[:255] if asset.title else None
asset.last_access_at = datetime.now(timezone.utc)
db.commit()
@ -425,7 +426,8 @@ def _download(job_id: int, asset_id: int, source_kind: str, source_ref: str, spe
job.speed_bps = None
job.eta_s = None
if not job.display_name:
job.display_name = meta.title
# display_name is VARCHAR(255) — clip a long title (see _fill_asset_meta_early).
job.display_name = meta.title[:255] if meta.title else None
db.commit()
log.info("job %s done: %s", job_id, rel)