from pathlib import Path import pytest import yaml from conftest import mock_run_from_cli class TestInspect: @pytest.mark.parametrize("config_provided", [True, False]) def test_inspect_command( self, capsys, default_config_path: str, tv_show_subscriptions_path: Path, output_directory: str, config_provided: bool, ): args = f"--config {default_config_path} " if config_provided else "" args += f"inspect {tv_show_subscriptions_path} --match 'Jake Trains'" subscriptions = mock_run_from_cli(args=args) assert len(subscriptions) == 0 captured_as_dict = yaml.safe_load(capsys.readouterr().out) assert captured_as_dict == { "chapters": { "allow_chapters_from_comments": False, "embed_chapters": True, "enable": "True", "force_key_frames": False, }, "date_range": {"breaks": "True", "enable": "True", "type": "upload_date"}, "download": [ { "download_reverse": "True", "include_sibling_metadata": False, "playlist_thumbnails": [ { "name": "{avatar_uncropped_thumbnail_file_name}", "uid": "avatar_uncropped", }, { "name": "{banner_uncropped_thumbnail_file_name}", "uid": "banner_uncropped", }, ], "source_thumbnails": [ { "name": "{avatar_uncropped_thumbnail_file_name}", "uid": "avatar_uncropped", }, { "name": "{banner_uncropped_thumbnail_file_name}", "uid": "banner_uncropped", }, ], "url": "https://www.youtube.com/@JakeTrains", "variables": {}, "webpage_url": "{modified_webpage_url}", "ytdl_options": {}, } ], "file_convert": {"convert_to": "mp4", "convert_with": "yt-dlp", "enable": "True"}, "format": "(bv*[ext=mp4][vcodec~='^((he|a)vc|h26[45])']+ba[ext=m4a]) / (bv[ext=mp4]*+ba[ext=m4a]/b)", "output_options": { "download_archive_name": ".ytdl-sub-Jake Trains-download-archive.json", "file_name": "{episode_file_path}.{ext}", "info_json_name": "{episode_file_path}.{info_json_ext}", "keep_files_date_eval": "{episode_date_standardized}", "maintain_download_archive": True, "output_directory": f"{output_directory}/Jake Trains", "preserve_mtime": False, "thumbnail_name": "{thumbnail_file_name}", }, "overrides": { "%bilateral_url": "{ %if( %and( enable_bilateral_scraping, subscription_has_download_archive, %is_bilateral_url( $0 ) ), $0, '' ) }", "%episode_ordering_": "{ %eq( %lower( tv_show_by_date_episode_ordering ), $0 ) }", "%is_bilateral_url": '{ %contains( $0, "youtube.com/playlist" ) }', "%ordering_pair_eq": "{ %eq( [ tv_show_by_date_season_ordering, tv_show_by_date_episode_ordering ], [ $0, $1 ] ) }", "%season_ordering_": "{ %eq( %lower( tv_show_by_date_season_ordering ), $0 ) }", "assert_not_collection": '{ %assert( %and( %not( %bool( s01_url ) ), %not( %bool( s01_name ) ) ), "Provided `s01_url` or `s01_name` variable to TV Show by Date preset when it expects `url`. Perhaps you meant to use the `TV Show Collection` preset?" ) }', "avatar_uncropped_thumbnail_file_name": "{ tv_show_poster_file_name }", "banner_uncropped_thumbnail_file_name": "{ tv_show_fanart_file_name }", "enable_bilateral_scraping": "{ %bool(True) }", "enable_resolution_assert": "{ %bool(True) }", "enable_throttle_protection": "{ %bool(True) }", "episode_content_rating": "{ tv_show_content_rating }", "episode_date_standardized": '{ %if( %contains( tv_show_by_date_season_ordering, "release" ), release_date_standardized, upload_date_standardized ) }', "episode_file_name": '{ %concat( %string( "s" ), %string( season_number_padded ), %string( ".e" ), %string( episode_number_padded ), %string( " - " ), %string( file_title ) ) }', "episode_file_path": '{ %concat( %string( season_directory_name_sanitized ), %string( "/" ), %string( episode_file_name_sanitized ) ) }', "episode_number": "{ %array_at( episode_number_and_padded_, 0 ) }", "episode_number_and_padded_": '{ %elif( %episode_ordering_( "upload-day" ), [ %concat( upload_day, upload_date_index_padded ), 4 ], %episode_ordering_( "upload-month-day" ), [ %concat( upload_month, upload_day_padded, upload_date_index_padded ), 6 ], %episode_ordering_( "upload-month-day-reversed" ), [ %concat( upload_day_of_year_reversed, upload_date_index_reversed_padded ), 5 ], %episode_ordering_( "release-day" ), [ %concat( release_day, upload_date_index_padded ), 4 ], %episode_ordering_( "release-month-day" ), [ %concat( release_month, release_day_padded, upload_date_index_padded ), 6 ], %episode_ordering_( "release-month-day-reversed" ), [ %concat( release_day_of_year_reversed, upload_date_index_reversed_padded ), 5 ], %episode_ordering_( "download-index" ), [ download_index, 6 ], %throw( \'tv_show_by_date_episode_ordering must be one of the following: "upload-day", "upload-month-day", "upload-month-day-reversed", "release-day", "release-month-day", "release-month-day-reversed", "download-index"\' ) ) }', "episode_number_padded": "{ %pad_zero( %int( episode_number ), %int( %array_at( episode_number_and_padded_, 1 ) ) ) }", "episode_plot": '{ %concat( %string( webpage_url ), %string( "\n\n" ), %string( description ) ) }', "episode_title": '{ %concat( %string( episode_date_standardized ), %string( " - " ), %string( title ) ) }', "episode_year": "{ %slice( episode_date_standardized, 0, 4 ) }", "file_title": "{ title_sanitized_plex }", "file_uid": "{ uid_sanitized_plex }", "include_sibling_metadata": "{ %bool(False) }", "modified_webpage_url": "{ webpage_url }", "only_recent_date_range": "2months", "only_recent_max_files": "{ %int(30) }", "resolution_assert": '{ %if( %and( enable_resolution_assert, %ne( height, 0 ), %not( resolution_assert_is_ignored ) ), %assert( %gte( height, resolution_assert_height_gte ), %concat( "Entry ", title, " downloaded at a low resolution (", resolution_readable, "), you\'ve probably been throttled. ", "Stopping further downloads, wait a few hours and try again. ", "Disable using the override variable `enable_resolution_assert: False`." ) ), "false is no-op" ) }', "resolution_assert_height_gte": "{ %int(361) }", "resolution_assert_ignore_titles": "{ [ ] }", "resolution_assert_is_ignored": '{ %print_if_true( %concat( title, " has a match in resolution_assert_ignore_titles, skipping resolution assert." ), %contains_any( title, resolution_assert_ignore_titles ) ) }', "resolution_assert_print": '{ %print( %if( enable_resolution_assert, "Resolution assert is enabled, will fail on low-quality video downloads and presume throttle. Disable using the override variable `enable_resolution_assert: False`", "Resolution assert is disabled. Use at your own risk!" ), enable_resolution_assert, -1 ) }', "resolution_readable": '{ %concat( %string( width ), %string( "x" ), %string( height ) ) }', "s01_name": "", "s01_url": "", "season_directory_name": '{ %concat( %string( "Season " ), %string( season_number_padded ) ) }', "season_number": '{ %elif( %season_ordering_( "upload-year" ), upload_year, %season_ordering_( "upload-year-month" ), %concat( upload_year, upload_month_padded ), %season_ordering_( "release-year" ), release_year, %season_ordering_( "release-year-month" ), %concat( release_year, release_month_padded ), %throw( \'tv_show_by_date_season_ordering must be one of the following: "upload-year", "upload-year-month", "release-year", "release-year-month"\' ) ) }', "season_number_padded": "{ season_number }", "season_poster_file_name": '{ %concat( %string( season_directory_name_sanitized ), %string( "/Season" ), %string( season_number_padded ), %string( ".jpg" ) ) }', "subscription_array": "{ %from_json( '[\"https://www.youtube.com/@JakeTrains\"]' ) }", "subscription_indent_1": "Kids", "subscription_indent_2": "TV-Y", "subscription_value": "https://www.youtube.com/@JakeTrains", "subscription_value_1": "https://www.youtube.com/@JakeTrains", "thumbnail_file_name": '{ %concat( %string( episode_file_path ), %string( "-thumb.jpg" ) ) }', "tv_show_by_date_episode_ordering": "upload-month-day", "tv_show_by_date_ordering_pair_validation_": '{ %assert_then( %or( %ordering_pair_eq( "upload-year", "upload-month-day" ), %ordering_pair_eq( "upload-year", "upload-month-day-reversed" ), %ordering_pair_eq( "upload-year", "download-index" ), %ordering_pair_eq( "upload-year-month", "upload-day" ), %ordering_pair_eq( "release-year", "release-month-day" ), %ordering_pair_eq( "release-year", "release-month-day-reversed" ), %ordering_pair_eq( "release-year", "download-index" ), %ordering_pair_eq( "release-year-month", "release-day" ) ), episode_number_and_padded_, "Detected incompatibility between tv_show_by_date_season_ordering and tv_show_by_date_episode_ordering. Ensure you are not using both upload and release date, and that the year/month/day are included in the combined season and episode." ) }', "tv_show_by_date_season_ordering": "upload-year", "tv_show_content_rating": "{ subscription_indent_2 }", "tv_show_content_rating_default": "TV-14", "tv_show_date_range_type": '{ %if( %contains( tv_show_by_date_season_ordering, "release" ), "release_date", "upload_date" ) }', "tv_show_directory": output_directory, "tv_show_fanart_file_name": "fanart.jpg", "tv_show_genre": "{ subscription_indent_1 }", "tv_show_genre_default": "ytdl-sub", "tv_show_name": "{ subscription_name }", "tv_show_poster_file_name": "poster.jpg", "url": "{ subscription_value }", "url10": "", "url100": "", "url11": "", "url12": "", "url13": "", "url14": "", "url15": "", "url16": "", "url17": "", "url18": "", "url19": "", "url2": "", "url20": "", "url21": "", "url22": "", "url23": "", "url24": "", "url25": "", "url26": "", "url27": "", "url28": "", "url29": "", "url3": "", "url30": "", "url31": "", "url32": "", "url33": "", "url34": "", "url35": "", "url36": "", "url37": "", "url38": "", "url39": "", "url4": "", "url40": "", "url41": "", "url42": "", "url43": "", "url44": "", "url45": "", "url46": "", "url47": "", "url48": "", "url49": "", "url5": "", "url50": "", "url51": "", "url52": "", "url53": "", "url54": "", "url55": "", "url56": "", "url57": "", "url58": "", "url59": "", "url6": "", "url60": "", "url61": "", "url62": "", "url63": "", "url64": "", "url65": "", "url66": "", "url67": "", "url68": "", "url69": "", "url7": "", "url70": "", "url71": "", "url72": "", "url73": "", "url74": "", "url75": "", "url76": "", "url77": "", "url78": "", "url79": "", "url8": "", "url80": "", "url81": "", "url82": "", "url83": "", "url84": "", "url85": "", "url86": "", "url87": "", "url88": "", "url89": "", "url9": "", "url90": "", "url91": "", "url92": "", "url93": "", "url94": "", "url95": "", "url96": "", "url97": "", "url98": "", "url99": "", "urls": "{ subscription_array }", }, "throttle_protection": { "enable": True, "sleep_per_download_s": {"max": "28.4", "min": "13.8"}, "sleep_per_request_s": {"max": "0.75", "min": "0.0"}, "sleep_per_subscription_s": {"max": "26.1", "min": "16.3"}, }, "video_tags": { "contentRating": "{episode_content_rating}", "date": "{episode_date_standardized}", "episode_id": "{episode_number}", "genre": "{tv_show_genre}", "show": "{tv_show_name}", "synopsis": "{episode_plot}", "title": "{episode_title}", "year": "{episode_year}", }, }