python3.10 better generics

This commit is contained in:
jbannon 2022-04-12 23:45:10 +00:00
parent 688c6361bf
commit beb48ac5aa
5 changed files with 7 additions and 57 deletions

View file

@ -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.

View file

@ -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:

View file

@ -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
"""