mirror of
https://github.com/Glitchy-Sheep/boosty-downloader.git
synced 2026-10-14 21:33:23 +00:00
[PR #197] [MERGED] [downloader] Skip a post with a gone external video without retries #196
Labels
No labels
api-drift
bug
ci
documentation
enhancement
enhancement
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Glitchy-Sheep/boosty-downloader#196
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/Glitchy-Sheep/boosty-downloader/pull/197
Author: @Glitchy-Sheep
Created: 9/20/2026
Status: ✅ Merged
Merged: 9/21/2026
Merged by: @Glitchy-Sheep
Base:
main← Head:fix/gone-external-video📝 Commits (3)
95ae938[ext-video] Tell a gone video from a network failure74e0bb2[downloader] Skip a post with a gone external video without retries6b769ae[docs] Describe how a gone external video is skipped📊 Changes
17 files changed (+429 additions, -17 deletions)
View changed files
📝
CHANGELOG.md(+1 -0)📝
README.md(+1 -0)📝
boosty_downloader/application/exceptions/application_errors.py(+6 -1)📝
boosty_downloader/application/post_retry.py(+20 -0)📝
boosty_downloader/application/use_cases/download_all_posts.py(+4 -0)📝
boosty_downloader/application/use_cases/download_post_by_id.py(+1 -1)📝
boosty_downloader/application/use_cases/download_single_post.py(+1 -0)📝
boosty_downloader/cli/commands/download.py(+1 -1)📝
boosty_downloader/infrastructure/external_videos_downloader/external_videos_downloader.py(+47 -3)📝
boosty_downloader/infrastructure/post_media_downloader.py(+16 -1)📝
docs/concepts/boosty/download-flow.md(+1 -0)📝
test/e2e/download_flow_test.py(+69 -10)➕
test/unit/external_videos_downloader/gone_video_test.py(+161 -0)📝
test/unit/post_media_downloader/post_media_downloader_test.py(+25 -0)📝
test/unit/use_cases/chunk_error_translation_test.py(+15 -0)📝
test/unit/use_cases/download_all_posts_test.py(+31 -0)📝
test/unit/use_cases/download_post_by_id_test.py(+29 -0)📄 Description
📝 Summary
Closes #76. A YouTube or Vimeo video that is gone for good no longer costs five attempts.
🔧 What changes
Skip post, retrying will not help: <post> (External video unavailable: This video is unavailable); the reason is the site's own answer.failed_downloads.loggets the entry.--post-urlstill exits with 1.How the two are told apart
yt-dlp keeps the original exception in
DownloadError.exc_info. AnExtractorErrormarkedexpectedis the site's normal answer (deleted, private, geo-blocked, unsupported url, "sign in to confirm"); a 404 or 410 of the video page means the same. Network failures come asTransportErrorand never carry the mark. The wrapper raisesExtVideoUnavailableError(url, reason)for the first group;MediaDownloadErrorandApplicationFailedDownloadErrorcarry aretryableflag to the retrier, which returns a newPostOutcome.unavailable.🚫 Not changed on purpose
post_contentstays out of the cache, so the page with the placeholder is rewritten on every run and never freezes. The cost is one probe of the video per run (about 2 seconds).🧪 Tests
--post-urlwith a gone video ends after one attempt; a full run with six gone videos in a row does not stop and gives every post one attempt.task cigreen locally: ruff, pyright strict, import-linter, 307 tests + e2e.✅ Checklist
--helpand README if neededdocs/if the download flow or dev process changed## Unreleasedin CHANGELOG.md (or theci/skip-changeloglabel if not user-facing)🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.