diff --git a/tools/run_linter b/tools/linter similarity index 100% rename from tools/run_linter rename to tools/linter diff --git a/tools/run_tests b/tools/test similarity index 100% rename from tools/run_tests rename to tools/test diff --git a/ytdl_subscribe/subscriptions/soundcloud.py b/ytdl_subscribe/subscriptions/soundcloud.py index aa208f52..129cde94 100644 --- a/ytdl_subscribe/subscriptions/soundcloud.py +++ b/ytdl_subscribe/subscriptions/soundcloud.py @@ -4,38 +4,14 @@ from typing import List from ytdl_subscribe.downloaders.soundcloud_downloader import SoundcloudDownloader from ytdl_subscribe.entries.soundcloud import SoundcloudAlbum from ytdl_subscribe.entries.soundcloud import SoundcloudTrack -from ytdl_subscribe.subscriptions.subscription import SourceT from ytdl_subscribe.subscriptions.subscription import Subscription -from ytdl_subscribe.validators.config.config_options.config_options_validator import ( - ConfigOptionsValidator, -) -from ytdl_subscribe.validators.config.preset_validator import PresetValidator from ytdl_subscribe.validators.config.source_options.soundcloud_validators import ( SoundcloudAlbumsAndSinglesSourceValidator, ) -class SoundcloudSubscription(Subscription[SourceT], ABC): - """ - Abstract class for all Soundcloud-based subscriptions. Sets entry type to SoundcloudTrack - """ - - def __init__( - self, - name: str, - config_options: ConfigOptionsValidator, - preset_options: PresetValidator, - ): - super().__init__( - name=name, - config_options=config_options, - preset_options=preset_options, - entry_type=SoundcloudTrack, - ) - - class SoundcloudAlbumsAndSinglesSubscription( - SoundcloudSubscription[SoundcloudAlbumsAndSinglesSourceValidator] + Subscription[SoundcloudAlbumsAndSinglesSourceValidator, SoundcloudTrack] ): """ Soundcloud subscription to download albums and tracks as singles. diff --git a/ytdl_subscribe/subscriptions/subscription.py b/ytdl_subscribe/subscriptions/subscription.py index 7dfddeab..99990b52 100644 --- a/ytdl_subscribe/subscriptions/subscription.py +++ b/ytdl_subscribe/subscriptions/subscription.py @@ -39,7 +39,7 @@ EntryT = TypeVar("EntryT", bound=Entry) DownloaderT = TypeVar("DownloaderT", bound=Downloader) -class Subscription(Generic[SourceT], ABC): +class Subscription(Generic[SourceT, EntryT], ABC): """ Subscription classes are the 'controllers' that perform... @@ -58,7 +58,6 @@ class Subscription(Generic[SourceT], ABC): name: str, config_options: ConfigOptionsValidator, preset_options: PresetValidator, - entry_type: Type[EntryT], ): """ Parameters @@ -71,7 +70,6 @@ class Subscription(Generic[SourceT], ABC): self.name = name self.__config_options = config_options self.__preset_options = preset_options - self.__entry_type = entry_type self._enhanced_download_archive = EnhancedDownloadArchive( subscription_name=name, @@ -80,11 +78,11 @@ class Subscription(Generic[SourceT], ABC): ) @property - def entry_type(self) -> EntryT: + def entry_type(self) -> Type[EntryT]: """ :return: The Entry type this subscription uses to represent downloaded media """ - return self.__entry_type + return EntryT.__class__ @property def source_options(self) -> SourceT: diff --git a/ytdl_subscribe/subscriptions/youtube.py b/ytdl_subscribe/subscriptions/youtube.py index b0138d3b..354f7c5d 100644 --- a/ytdl_subscribe/subscriptions/youtube.py +++ b/ytdl_subscribe/subscriptions/youtube.py @@ -3,12 +3,7 @@ from typing import List from ytdl_subscribe.downloaders.youtube_downloader import YoutubeDownloader from ytdl_subscribe.entries.youtube import YoutubeVideo -from ytdl_subscribe.subscriptions.subscription import SourceT from ytdl_subscribe.subscriptions.subscription import Subscription -from ytdl_subscribe.validators.config.config_options.config_options_validator import ( - ConfigOptionsValidator, -) -from ytdl_subscribe.validators.config.preset_validator import PresetValidator from ytdl_subscribe.validators.config.source_options.youtube_validators import ( YoutubeChannelSourceValidator, ) @@ -20,26 +15,7 @@ from ytdl_subscribe.validators.config.source_options.youtube_validators import ( ) -class YoutubeSubscription(Subscription[SourceT], ABC): - """ - Abstract class for all Youtube-based subscriptions. Sets entry type to YoutubeVideo - """ - - def __init__( - self, - name: str, - config_options: ConfigOptionsValidator, - preset_options: PresetValidator, - ): - super().__init__( - name=name, - config_options=config_options, - preset_options=preset_options, - entry_type=YoutubeVideo, - ) - - -class YoutubePlaylistSubscription(YoutubeSubscription[YoutubePlaylistSourceValidator]): +class YoutubePlaylistSubscription(Subscription[YoutubePlaylistSourceValidator, YoutubeVideo]): """ Youtube subscription to download videos from a playlist """ @@ -50,7 +26,7 @@ class YoutubePlaylistSubscription(YoutubeSubscription[YoutubePlaylistSourceValid ) -class YoutubeChannelSubscription(YoutubeSubscription[YoutubeChannelSourceValidator]): +class YoutubeChannelSubscription(Subscription[YoutubeChannelSourceValidator, YoutubeVideo]): """ Youtube subscription to download videos from a channel """ @@ -65,7 +41,7 @@ class YoutubeChannelSubscription(YoutubeSubscription[YoutubeChannelSourceValidat return downloader.download_channel(channel_id=self.source_options.channel_id.value) -class YoutubeVideoSubscription(YoutubeSubscription[YoutubeVideoSourceValidator]): +class YoutubeVideoSubscription(Subscription[YoutubeVideoSourceValidator, YoutubeVideo]): """ Youtube subscription to download a single video """