From d8df54859e0f8edcc8444aa4c9779ad9f00403f7 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Thu, 14 Dec 2023 16:23:15 -0800 Subject: [PATCH 1/4] [BUGFIX] Use proper extractor key for download archive --- src/ytdl_sub/entries/base_entry.py | 2 +- .../soundcloud/test_soundcloud_discography.py | 18 ++++++++++++++++++ tests/unit/conftest.py | 1 + tests/unit/entries/conftest.py | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ytdl_sub/entries/base_entry.py b/src/ytdl_sub/entries/base_entry.py index 697bb1f6d..4a5a27ddf 100644 --- a/src/ytdl_sub/entries/base_entry.py +++ b/src/ytdl_sub/entries/base_entry.py @@ -105,7 +105,7 @@ def extractor(self: "BaseEntry") -> str: # pylint: disable=line-too-long # Taken from https://github.com/yt-dlp/yt-dlp/blob/e6ab678e36c40ded0aae305bbb866cdab554d417/yt_dlp/YoutubeDL.py#L3514 # pylint: enable=line-too-long - return self.kwargs_get(EXTRACTOR) or self.kwargs(IE_KEY) + return self.kwargs_get("extractor_key") or self.kwargs("ie_key") @property def epoch(self: "BaseEntry") -> int: diff --git a/tests/e2e/soundcloud/test_soundcloud_discography.py b/tests/e2e/soundcloud/test_soundcloud_discography.py index de1f4a4fc..8e7f53456 100644 --- a/tests/e2e/soundcloud/test_soundcloud_discography.py +++ b/tests/e2e/soundcloud/test_soundcloud_discography.py @@ -1,7 +1,9 @@ import pytest +from conftest import assert_logs from expected_download import assert_expected_downloads from expected_transaction_log import assert_transaction_log_matches +from ytdl_sub.downloaders.ytdlp import YTDLP from ytdl_sub.subscriptions.subscription import Subscription @@ -48,3 +50,19 @@ def test_discography_download( dry_run=dry_run, expected_download_summary_file_name="soundcloud/test_soundcloud_discography.json", ) + + # Ensure another invocation will hit ExistingVideoReached + if not dry_run: + with assert_logs( + logger=YTDLP.logger, + expected_message="ExistingVideoReached, stopping additional downloads", + log_level="debug", + ): + transaction_log = discography_subscription.download() + + assert transaction_log.is_empty + assert_expected_downloads( + output_directory=output_directory, + dry_run=dry_run, + expected_download_summary_file_name="soundcloud/test_soundcloud_discography.json", + ) diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py index f25845a72..672361dd7 100644 --- a/tests/unit/conftest.py +++ b/tests/unit/conftest.py @@ -68,6 +68,7 @@ def _mock_entry_dict_factory( PLAYLIST_INDEX: playlist_index, PLAYLIST_COUNT: playlist_count, EXTRACTOR: "mock-entry-dict", + "extractor_key": "mock-entry-dict", TITLE: f"Mock Entry {uid}", EXT: "mp4", UPLOAD_DATE: upload_date, diff --git a/tests/unit/entries/conftest.py b/tests/unit/entries/conftest.py index 16199c7d1..f4895fac6 100644 --- a/tests/unit/entries/conftest.py +++ b/tests/unit/entries/conftest.py @@ -163,6 +163,7 @@ def mock_entry_kwargs( "id": uid, "epoch": 1596878400, "extractor": extractor, + "extractor_key": extractor, "title": title, "ext": ext, "upload_date": upload_date, From 423957a162916ba70eeec06135e4bccd915cb150 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Thu, 14 Dec 2023 16:27:11 -0800 Subject: [PATCH 2/4] lint --- src/ytdl_sub/entries/base_entry.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/ytdl_sub/entries/base_entry.py b/src/ytdl_sub/entries/base_entry.py index 4a5a27ddf..6728d6e3f 100644 --- a/src/ytdl_sub/entries/base_entry.py +++ b/src/ytdl_sub/entries/base_entry.py @@ -13,7 +13,6 @@ from ytdl_sub.entries.variables.kwargs import DESCRIPTION from ytdl_sub.entries.variables.kwargs import EPOCH -from ytdl_sub.entries.variables.kwargs import EXTRACTOR from ytdl_sub.entries.variables.kwargs import IE_KEY from ytdl_sub.entries.variables.kwargs import TITLE from ytdl_sub.entries.variables.kwargs import UID @@ -105,7 +104,7 @@ def extractor(self: "BaseEntry") -> str: # pylint: disable=line-too-long # Taken from https://github.com/yt-dlp/yt-dlp/blob/e6ab678e36c40ded0aae305bbb866cdab554d417/yt_dlp/YoutubeDL.py#L3514 # pylint: enable=line-too-long - return self.kwargs_get("extractor_key") or self.kwargs("ie_key") + return self.kwargs_get("extractor_key") or self.kwargs(IE_KEY) @property def epoch(self: "BaseEntry") -> int: From b933138b21e8a2dfe91257221492f65ad8f02f83 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Thu, 14 Dec 2023 16:41:46 -0800 Subject: [PATCH 3/4] lower --- src/ytdl_sub/entries/base_entry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ytdl_sub/entries/base_entry.py b/src/ytdl_sub/entries/base_entry.py index 6728d6e3f..e5e251511 100644 --- a/src/ytdl_sub/entries/base_entry.py +++ b/src/ytdl_sub/entries/base_entry.py @@ -99,12 +99,12 @@ def extractor(self: "BaseEntry") -> str: Returns ------- str - The ytdl extractor name + The ytdl extractor name used in the download archive """ # pylint: disable=line-too-long # Taken from https://github.com/yt-dlp/yt-dlp/blob/e6ab678e36c40ded0aae305bbb866cdab554d417/yt_dlp/YoutubeDL.py#L3514 # pylint: enable=line-too-long - return self.kwargs_get("extractor_key") or self.kwargs(IE_KEY) + return str(self.kwargs_get("extractor_key") or self.kwargs(IE_KEY)).lower() @property def epoch(self: "BaseEntry") -> int: From d93a262e5dc74891211c69bd7f2c1c5e98854ca8 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Thu, 14 Dec 2023 16:53:52 -0800 Subject: [PATCH 4/4] bandcamp --- .../expected_downloads_summaries/bandcamp/test_artist_url.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json b/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json index d1dd90b1c..9c2ea6ef1 100644 --- a/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json +++ b/tests/resources/expected_downloads_summaries/bandcamp/test_artist_url.json @@ -1,5 +1,5 @@ { - ".ytdl-sub-Sithu Aye-download-archive.json": "0c58919b660f699f6aea2ec523c812c5", + ".ytdl-sub-Sithu Aye-download-archive.json": "ca37a404a860a2a6b6b0f38b659c9f17", "Sithu Aye/[2021] 10 Years: Remixes and Reimaginings/01 - Double Helix Reimagined.mp3": "56f7ee579031f4795230e68b63b15f6b", "Sithu Aye/[2021] 10 Years: Remixes and Reimaginings/02 - Skye Reimagined.mp3": "dfb24e0ef03e203d471bb81f854f5cd3", "Sithu Aye/[2021] 10 Years: Remixes and Reimaginings/03 - Baryofusion.mp3": "95bd9ab2238e5372f445c59daafd0138",