From d8e416416ac2fee950a65d0535611bcf5a23373a Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Fri, 27 Oct 2023 16:29:40 -0700 Subject: [PATCH] [FEATURE] TV Show prebuilt presets that require no config --- .../prebuilt_presets/helpers/__init__.py | 220 ------------------ .../prebuilt_presets/tv_show/__init__.py | 8 + .../tv_show/tv_show_by_date.yaml | 18 +- .../prebuilt_presets/test_prebuilt_presets.py | 4 +- 4 files changed, 27 insertions(+), 223 deletions(-) delete mode 100644 src/ytdl_sub/prebuilt_presets/helpers/__init__.py diff --git a/src/ytdl_sub/prebuilt_presets/helpers/__init__.py b/src/ytdl_sub/prebuilt_presets/helpers/__init__.py deleted file mode 100644 index 598e8fa7..00000000 --- a/src/ytdl_sub/prebuilt_presets/helpers/__init__.py +++ /dev/null @@ -1,220 +0,0 @@ -from typing import Any -from typing import Dict -from typing import List -from typing import Optional -from typing import Set - -from ytdl_sub.entries.variables.entry_variables import pad - -Preset = Dict[str, Any] - -#################################################### -# TV SHOW TYPES - -KODI_TV_SHOW = "_kodi_tv_show" -JELLYFIN_TV_SHOW = "_jellyfin_tv_show" -PLEX_TV_SHOW = "_plex_tv_show" - -##################################################### -# TV SHOW URL PRESETS - -TV_SHOW_BY_DATE = "_tv_show_by_date" - -SEASON_YEAR__EPISODE_MONTH_DAY = "season_by_year__episode_by_month_day" -SEASON_YEAR__EPISODE_MONTH_DAY_REVERSED = "season_by_year__episode_by_month_day_reversed" -SEASON_YEAR_MONTH__EPISODE_DAY = "season_by_year_month__episode_by_day" - -##################################################### -# TV SHOW COLLECTION PRESETS - -TV_SHOW_COLLECTION = "_tv_show_collection" - -SEASON_COLLECTION__EPISODE_Y_M_D = "season_by_collection__episode_by_year_month_day" -SEASON_COLLECTION__EPISODE_Y_M_D_REV = "season_by_collection__episode_by_year_month_day_reversed" - - -class PrebuiltPresets: - @classmethod - def _build_preset(cls, name: str, parent_presets: List[str]) -> Preset: - return {"presets": {name: {"preset": parent_presets}}} - - @classmethod - def _document_preset(cls) -> Preset: - return {} - - @classmethod - def get_preset_names(cls) -> Set[str]: - """ - Returns - ------- - Preset names in the set - """ - preset_names = [prop for prop in dir(cls) if isinstance(getattr(cls, prop), property)] - return set(preset_names) - - @classmethod - def get_presets(cls) -> List[Preset]: - """ - Returns - ------- - Preset dicts in the set if they are not added in other yamls - """ - return [getattr(cls(), preset_name) for preset_name in cls.get_preset_names()] - - -class TvShowByDatePresets(PrebuiltPresets): - """ - TV Show by Date presets create a TV show from a single URL using upload dates as season/episode - numbers. - """ - - @property - def kodi_tv_show_by_date(self): - """ - Formats a TV show organized by date for Kodi - """ - return self._build_preset( - name="kodi_tv_show_by_date", parent_presets=[KODI_TV_SHOW, TV_SHOW_BY_DATE] - ) - - @property - def jellyfin_tv_show_by_date(self): - """ - Formats a TV show organized by date for Jellyfin - """ - return self._build_preset( - name="jellyfin_tv_show_by_date", parent_presets=[JELLYFIN_TV_SHOW, TV_SHOW_BY_DATE] - ) - - @property - def plex_tv_show_by_date(self): - """ - Formats a TV show organized by date for Plex - """ - return self._build_preset( - name="plex_tv_show_by_date", parent_presets=[PLEX_TV_SHOW, TV_SHOW_BY_DATE] - ) - - -class TvShowByDateEpisodeFormattingPresets(PrebuiltPresets): - @property - def season_by_year__episode_by_month_day(self) -> Preset: - """ - DOC - """ - return self._document_preset() - - @property - def season_by_year__episode_by_month_day_reversed(self) -> Preset: - """ - DOC - """ - return self._document_preset() - - @property - def season_by_year_month__episode_by_day(self) -> Preset: - """ - DOC - """ - return self._document_preset() - - -class TvShowCollectionPresets(PrebuiltPresets): - """ - Docstring for all TV SHOW URL presets - """ - - @property - def kodi_tv_show_collection(self) -> Preset: - """ - Kodi TV Show with seasons as years, episodes ordered by upload date - """ - return self._build_preset( - name="kodi_tv_show_collection", parent_presets=[KODI_TV_SHOW, TV_SHOW_COLLECTION] - ) - - @property - def jellyfin_tv_show_collection(self) -> Preset: - """ - Kodi TV Show with seasons as years, episodes ordered by upload date - """ - return self._build_preset( - name="jellyfin_tv_show_collection", - parent_presets=[JELLYFIN_TV_SHOW, TV_SHOW_COLLECTION], - ) - - @property - def plex_tv_show_collection(self) -> Preset: - """ - Kodi TV Show with seasons as years, episodes ordered by upload date - """ - return self._build_preset( - name="plex_tv_show_collection", parent_presets=[PLEX_TV_SHOW, TV_SHOW_COLLECTION] - ) - - -class TvShowCollectionEpisodeFormattingPresets(PrebuiltPresets): - @property - def season_by_collection__episode_by_year_month_day(self) -> Preset: - """ - DOC - """ - return self._document_preset() - - @property - def season_by_collection__episode_by_year_month_day_reversed(self) -> Preset: - """ - DOC - """ - return self._document_preset() - - @property - def season_by_collection__episode_by_playlist_index(self) -> Preset: - """ - DOC - """ - return self._document_preset() - - @property - def season_by_collection__episode_by_playlist_index_reversed(self) -> Preset: - """ - DOC - """ - return self._document_preset() - - -class TvShowCollectionSeasonPresets(PrebuiltPresets): - @property - def collection_season_1(self): - """ - DOC - """ - return self._document_preset() - - @property - def collection_season_2(self): - """ - DOC - """ - return self._document_preset() - - @property - def collection_season_3(self): - """ - DOC - """ - return self._document_preset() - - @property - def collection_season_4(self): - """ - DOC - """ - return self._document_preset() - - @property - def collection_season_5(self): - """ - DOC - """ - return self._document_preset() diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/__init__.py b/src/ytdl_sub/prebuilt_presets/tv_show/__init__.py index b2604726..fa87eaa1 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/__init__.py +++ b/src/ytdl_sub/prebuilt_presets/tv_show/__init__.py @@ -2,6 +2,14 @@ from ytdl_sub.prebuilt_presets import PrebuiltPresets class TvShowByDatePresets(PrebuiltPresets): + preset_names = { + "Kodi TV Show by Date", + "Jellyfin TV Show by Date", + "Plex TV Show by Date", + } + + +class TvShowByDateOldPresets(PrebuiltPresets): """ TV Show by Date presets create a TV show from a single URL using upload dates as season/episode numbers. diff --git a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_by_date.yaml b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_by_date.yaml index 096c2d0a..275216fe 100644 --- a/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_by_date.yaml +++ b/src/ytdl_sub/prebuilt_presets/tv_show/tv_show_by_date.yaml @@ -13,4 +13,20 @@ presets: plex_tv_show_by_date: preset: - "_plex_tv_show" - - "_tv_show_by_date" \ No newline at end of file + - "_tv_show_by_date" + + # All-in-one presets that require no config + "Kodi TV Show by Date": + preset: + - "kodi_tv_show_by_date" + - "season_by_year__episode_by_month_day" + + "Jellyfin TV Show by Date": + preset: + - "jellyfin_tv_show_by_date" + - "season_by_year__episode_by_month_day" + + "Plex TV Show by Date": + preset: + - "plex_tv_show_by_date" + - "season_by_year__episode_by_month_day" \ No newline at end of file diff --git a/tests/unit/prebuilt_presets/test_prebuilt_presets.py b/tests/unit/prebuilt_presets/test_prebuilt_presets.py index 03225dca..6af2a4c8 100644 --- a/tests/unit/prebuilt_presets/test_prebuilt_presets.py +++ b/tests/unit/prebuilt_presets/test_prebuilt_presets.py @@ -8,7 +8,7 @@ from expected_transaction_log import assert_transaction_log_matches from ytdl_sub.prebuilt_presets.music import MusicPresets from ytdl_sub.prebuilt_presets.tv_show import TvShowByDateEpisodeFormattingPresets -from ytdl_sub.prebuilt_presets.tv_show import TvShowByDatePresets +from ytdl_sub.prebuilt_presets.tv_show import TvShowByDateOldPresets from ytdl_sub.prebuilt_presets.tv_show import TvShowCollectionEpisodeFormattingPresets from ytdl_sub.prebuilt_presets.tv_show import TvShowCollectionPresets from ytdl_sub.prebuilt_presets.tv_show import TvShowCollectionSeasonPresets @@ -16,7 +16,7 @@ from ytdl_sub.subscriptions.subscription import Subscription from ytdl_sub.utils.exceptions import ValidationException -@pytest.mark.parametrize("media_player_preset", TvShowByDatePresets.preset_names) +@pytest.mark.parametrize("media_player_preset", TvShowByDateOldPresets.preset_names) @pytest.mark.parametrize( "tv_show_structure_preset", TvShowByDateEpisodeFormattingPresets.preset_names )