diff --git a/examples/advanced/tv_show_config.yaml b/examples/advanced/tv_show_config.yaml index 1736d3f6..b2d0c694 100644 --- a/examples/advanced/tv_show_config.yaml +++ b/examples/advanced/tv_show_config.yaml @@ -95,3 +95,6 @@ presets: - "no_shorts" - "season_by_year__episode_by_month_day_reversed" - "Only Recent" + + overrides: + date_range: "2months" diff --git a/examples/advanced/tv_show_subscriptions.yaml b/examples/advanced/tv_show_subscriptions.yaml index bc19de9f..1b8859b8 100644 --- a/examples/advanced/tv_show_subscriptions.yaml +++ b/examples/advanced/tv_show_subscriptions.yaml @@ -1,27 +1,29 @@ # Subscriptions using custom presets made in `tv_show_config.yaml` TV Show Full Archive: - = Documentaries | TV-PG: + = Documentaries | = TV-PG: "NOVA PBS": "https://www.youtube.com/@novapbs" "National Geographic": "https://www.youtube.com/@NatGeo" "Cosmos - What If": "https://www.youtube.com/playlist?list=PLZdXRHYAVxTJno6oFF9nLGuwXNGYHmE8U" - = Kids | TV-Y: + = Kids | = TV-Y: "Jake Trains": "https://www.youtube.com/@JakeTrains" "Kids Toys Play": "https://www.youtube.com/@KidsToysPlayChannel" - = Gardening | TV-Y: + = Gardening | = TV-Y: + # TV Show presets support multiple URLs as a list "Gardening with Ciscoe": - # Can define a subscription using 'preset' syntax. Needed for using multiple - # urls in a single TV show - overrides: - url: "https://www.youtube.com/@gardeningwithciscoe4430" - url2: "https://www.youtube.com/playlist?list=PLi8V8UemxeG6lo5if5H5g5EbsteELcb0_" - url3: "https://www.youtube.com/playlist?list=PLsJlQSR-KjmaQqqJ9jq18cF6XXXAR4kyn" - url4: "https://www.youtube.com/watch?v=2vq-vPubS5I" + - "https://www.youtube.com/@gardeningwithciscoe4430" + - "https://www.youtube.com/playlist?list=PLi8V8UemxeG6lo5if5H5g5EbsteELcb0_" + - "https://www.youtube.com/playlist?list=PLsJlQSR-KjmaQqqJ9jq18cF6XXXAR4kyn" + - "https://www.youtube.com/watch?v=2vq-vPubS5I" TV Show Only Recent: - = News | TV-14: - "BBC": "https://www.youtube.com/@BBCNews" + = News | = TV-14: + # Subscriptions can prefix a tilda to specify override variables + # to set only for that subscriptions + "~BBC News": + url: "https://www.youtube.com/@BBCNews" + date_range: "2weeks" "Frontline PBS": "https://www.youtube.com/@frontline" "Whitehouse": "https://www.bitchute.com/channel/zWsYVmCOu4JA/" # Supports non-YT sites \ No newline at end of file diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml index 9ec8c5b8..45a59c3d 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show.yaml @@ -61,26 +61,45 @@ presets: - url: "{url20}" overrides: subscription_value: "" + subscription_value_2: "" + subscription_value_3: "" + subscription_value_4: "" + subscription_value_5: "" + subscription_value_6: "" + subscription_value_7: "" + subscription_value_8: "" + subscription_value_9: "" + subscription_value_10: "" + subscription_value_11: "" + subscription_value_12: "" + subscription_value_13: "" + subscription_value_14: "" + subscription_value_15: "" + subscription_value_16: "" + subscription_value_17: "" + subscription_value_18: "" + subscription_value_19: "" + subscription_value_20: "" url: "{subscription_value}" - url2: "" - url3: "" - url4: "" - url5: "" - url6: "" - url7: "" - url8: "" - url9: "" - url10: "" - url11: "" - url12: "" - url13: "" - url14: "" - url15: "" - url16: "" - url17: "" - url18: "" - url19: "" - url20: "" + url2: "{subscription_value_2}" + url3: "{subscription_value_3}" + url4: "{subscription_value_4}" + url5: "{subscription_value_5}" + url6: "{subscription_value_6}" + url7: "{subscription_value_7}" + url8: "{subscription_value_8}" + url9: "{subscription_value_9}" + url10: "{subscription_value_10}" + url11: "{subscription_value_11}" + url12: "{subscription_value_12}" + url13: "{subscription_value_13}" + url14: "{subscription_value_14}" + url15: "{subscription_value_15}" + url16: "{subscription_value_16}" + url17: "{subscription_value_17}" + url18: "{subscription_value_18}" + url19: "{subscription_value_19}" + url20: "{subscription_value_20}" #################################################################################################### diff --git a/tests/conftest.py b/tests/conftest.py index d3426a57..18582577 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -183,6 +183,11 @@ def tv_show_subscriptions_path() -> Path: return Path("examples/tv_show_subscriptions.yaml") +@pytest.fixture() +def advanced_tv_show_subscriptions_path() -> Path: + return Path("examples/advanced/tv_show_subscriptions.yaml") + + @pytest.fixture() def default_config(working_directory) -> ConfigFile: return ConfigFile.from_dict({"configuration": {"working_directory": working_directory}}) diff --git a/tests/unit/config/test_subscription.py b/tests/unit/config/test_subscription.py index 1a7dc0a9..d5846ad5 100644 --- a/tests/unit/config/test_subscription.py +++ b/tests/unit/config/test_subscription.py @@ -489,9 +489,9 @@ def test_subscription_file_invalid_form(config_file: ConfigFile): _ = Subscription.from_file_path(config=config_file, subscription_path="mocked") -def test_tv_show_subscriptions(tv_show_config: ConfigFile, tv_show_subscriptions_path: Path): +def test_tv_show_subscriptions(config_file: ConfigFile, tv_show_subscriptions_path: Path): subs = Subscription.from_file_path( - config=tv_show_config, subscription_path=tv_show_subscriptions_path + config=config_file, subscription_path=tv_show_subscriptions_path ) assert len(subs) == 6 @@ -505,6 +505,24 @@ def test_tv_show_subscriptions(tv_show_config: ConfigFile, tv_show_subscriptions assert jake_train_overrides["subscription_indent_2"] == "TV-Y" +def test_advanced_tv_show_subscriptions( + tv_show_config: ConfigFile, advanced_tv_show_subscriptions_path: Path +): + subs = Subscription.from_file_path( + config=tv_show_config, subscription_path=advanced_tv_show_subscriptions_path + ) + + assert len(subs) == 9 + assert subs[3].name == "Jake Trains" + jake_train_overrides = subs[3].overrides.dict_with_format_strings + + assert jake_train_overrides["subscription_name"] == "Jake Trains" + assert jake_train_overrides["subscription_name_sanitized"] == "Jake Trains" + assert jake_train_overrides["subscription_value"] == "https://www.youtube.com/@JakeTrains" + assert jake_train_overrides["subscription_indent_1"] == "Kids" + assert jake_train_overrides["subscription_indent_2"] == "TV-Y" + + def test_music_subscriptions(default_config: ConfigFile, music_subscriptions_path: Path): subs = Subscription.from_file_path( config=default_config, subscription_path=music_subscriptions_path