diff --git a/subscriptions.yaml b/subscriptions.yaml index 25802f5b..117285e7 100644 --- a/subscriptions.yaml +++ b/subscriptions.yaml @@ -1,32 +1,32 @@ -ALISON: - preset: "soundcloud_with_id3_tags" - soundcloud: - username: alis_on - output_options: - output_directory: "/tmp/ALISON" - overrides: - artist: "A.L.I.S.O.N." - genre: "Synthwave / Electronic" - -delorra: - preset: "soundcloud_with_id3_tags" - soundcloud: - username: delorra - output_options: - output_directory: "/tmp/DeLorra" - overrides: - artist: "DeLorra" - genre: "Synthwave / Electronic" - -bl00dwave: - preset: "soundcloud_with_id3_tags" - soundcloud: - username: bl00dwave - output_options: - output_directory: "/tmp/bl00dwave" - overrides: - artist: "bl00dwave" - genre: "Synthwave / Electronic" +#ALISON: +# preset: "soundcloud_with_id3_tags" +# soundcloud: +# username: alis_on +# output_options: +# output_directory: "/tmp/ALISON" +# overrides: +# artist: "A.L.I.S.O.N." +# genre: "Synthwave / Electronic" +# +#delorra: +# preset: "soundcloud_with_id3_tags" +# soundcloud: +# username: delorra +# output_options: +# output_directory: "/tmp/DeLorra" +# overrides: +# artist: "DeLorra" +# genre: "Synthwave / Electronic" +# +#bl00dwave: +# preset: "soundcloud_with_id3_tags" +# soundcloud: +# username: bl00dwave +# output_options: +# output_directory: "/tmp/bl00dwave" +# overrides: +# artist: "bl00dwave" +# genre: "Synthwave / Electronic" tom_petty: preset: "music_videos" diff --git a/ytdl_subscribe/main.py b/ytdl_subscribe/main.py index 04173d8c..f3f4755b 100644 --- a/ytdl_subscribe/main.py +++ b/ytdl_subscribe/main.py @@ -4,7 +4,7 @@ from typing import List ################################################################################################### # GLOBAL PARSER -from ytdl_subscribe.validators.config.config_validator import ConfigFileValidator +from ytdl_subscribe.validators.config.config_file_validator import ConfigFileValidator from ytdl_subscribe.validators.config.subscription_validator import ( SubscriptionValidator, ) diff --git a/ytdl_subscribe/subscriptions/soundcloud.py b/ytdl_subscribe/subscriptions/soundcloud.py index 179b7fab..119f52d6 100644 --- a/ytdl_subscribe/subscriptions/soundcloud.py +++ b/ytdl_subscribe/subscriptions/soundcloud.py @@ -4,10 +4,10 @@ from ytdl_subscribe.downloaders.soundcloud_downloader import SoundcloudDownloade from ytdl_subscribe.entries.soundcloud import SoundcloudAlbum from ytdl_subscribe.entries.soundcloud import SoundcloudTrack from ytdl_subscribe.subscriptions.subscription import Subscription -from ytdl_subscribe.validators.config.sources.soundcloud_validators import ( +from ytdl_subscribe.validators.config.source_options.soundcloud_validators import ( SoundcloudAlbumsAndSinglesDownloadValidator, ) -from ytdl_subscribe.validators.config.sources.soundcloud_validators import ( +from ytdl_subscribe.validators.config.source_options.soundcloud_validators import ( SoundcloudSourceValidator, ) diff --git a/ytdl_subscribe/subscriptions/subscription.py b/ytdl_subscribe/subscriptions/subscription.py index 2cafd6d2..f7c7db39 100644 --- a/ytdl_subscribe/subscriptions/subscription.py +++ b/ytdl_subscribe/subscriptions/subscription.py @@ -10,19 +10,27 @@ from PIL import Image from ytdl_subscribe.downloaders.downloader import Downloader from ytdl_subscribe.entries.entry import Entry -from ytdl_subscribe.validators.config.config_validator import ConfigOptionsValidator +from ytdl_subscribe.validators.config.config_options.config_options_validator import ( + ConfigOptionsValidator, +) from ytdl_subscribe.validators.config.metadata_options.metadata_options_validator import ( MetadataOptionsValidator, ) from ytdl_subscribe.validators.config.output_options.output_options_validator import ( OutputOptionsValidator, ) -from ytdl_subscribe.validators.config.preset_validator import OverridesValidator -from ytdl_subscribe.validators.config.preset_validator import YTDLOptionsValidator -from ytdl_subscribe.validators.config.sources.source_validator import ( +from ytdl_subscribe.validators.config.overrides.overrides_validator import ( + OverridesValidator, +) +from ytdl_subscribe.validators.config.source_options.source_validator import ( DownloadStrategyValidator, ) -from ytdl_subscribe.validators.config.sources.source_validator import SourceValidator +from ytdl_subscribe.validators.config.source_options.source_validator import ( + SourceValidator, +) +from ytdl_subscribe.validators.config.ytdl_options.ytdl_options_validator import ( + YTDLOptionsValidator, +) SOURCE_T = TypeVar("SOURCE_T", bound=SourceValidator) DOWNLOAD_STRATEGY_T = TypeVar("DOWNLOAD_STRATEGY_T", bound=DownloadStrategyValidator) diff --git a/ytdl_subscribe/subscriptions/youtube.py b/ytdl_subscribe/subscriptions/youtube.py index cb7dd8da..496eb41f 100644 --- a/ytdl_subscribe/subscriptions/youtube.py +++ b/ytdl_subscribe/subscriptions/youtube.py @@ -1,9 +1,9 @@ from ytdl_subscribe.downloaders.youtube_downloader import YoutubeDownloader from ytdl_subscribe.subscriptions.subscription import Subscription -from ytdl_subscribe.validators.config.sources.youtube_validators import ( +from ytdl_subscribe.validators.config.source_options.youtube_validators import ( YoutubePlaylistDownloadValidator, ) -from ytdl_subscribe.validators.config.sources.youtube_validators import ( +from ytdl_subscribe.validators.config.source_options.youtube_validators import ( YoutubeSourceValidator, ) diff --git a/ytdl_subscribe/validators/config/config_validator.py b/ytdl_subscribe/validators/config/config_file_validator.py similarity index 73% rename from ytdl_subscribe/validators/config/config_validator.py rename to ytdl_subscribe/validators/config/config_file_validator.py index 5a7d422d..bfc58fdb 100644 --- a/ytdl_subscribe/validators/config/config_validator.py +++ b/ytdl_subscribe/validators/config/config_file_validator.py @@ -4,20 +4,9 @@ import yaml from ytdl_subscribe.validators.base.strict_dict_validator import StrictDictValidator from ytdl_subscribe.validators.base.validators import LiteralDictValidator -from ytdl_subscribe.validators.base.validators import StringValidator - - -class ConfigOptionsValidator(StrictDictValidator): - """Validation for the config options""" - - _required_keys = {"working_directory"} - - def __init__(self, name: str, value: Any): - super().__init__(name, value) - - self.working_directory = self._validate_key( - key="working_directory", validator=StringValidator - ) +from ytdl_subscribe.validators.config.config_options.config_options_validator import ( + ConfigOptionsValidator, +) class ConfigPresetsValidator(LiteralDictValidator): diff --git a/ytdl_subscribe/validators/config/sources/__init__.py b/ytdl_subscribe/validators/config/config_options/__init__.py similarity index 100% rename from ytdl_subscribe/validators/config/sources/__init__.py rename to ytdl_subscribe/validators/config/config_options/__init__.py diff --git a/ytdl_subscribe/validators/config/config_options/config_options_validator.py b/ytdl_subscribe/validators/config/config_options/config_options_validator.py new file mode 100644 index 00000000..ea294495 --- /dev/null +++ b/ytdl_subscribe/validators/config/config_options/config_options_validator.py @@ -0,0 +1,17 @@ +from typing import Any + +from ytdl_subscribe.validators.base.strict_dict_validator import StrictDictValidator +from ytdl_subscribe.validators.base.validators import StringValidator + + +class ConfigOptionsValidator(StrictDictValidator): + """Validation for the config options""" + + _required_keys = {"working_directory"} + + def __init__(self, name: str, value: Any): + super().__init__(name, value) + + self.working_directory = self._validate_key( + key="working_directory", validator=StringValidator + ) diff --git a/ytdl_subscribe/validators/config/overrides/__init__.py b/ytdl_subscribe/validators/config/overrides/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ytdl_subscribe/validators/config/overrides/overrides_validator.py b/ytdl_subscribe/validators/config/overrides/overrides_validator.py new file mode 100644 index 00000000..1abbd06d --- /dev/null +++ b/ytdl_subscribe/validators/config/overrides/overrides_validator.py @@ -0,0 +1,16 @@ +import sanitize_filename + +from ytdl_subscribe.validators.base.string_formatter_validator import ( + DictFormatterValidator, +) + + +class OverridesValidator(DictFormatterValidator): + """Ensures `overrides` is a dict""" + + def __init__(self, name, value): + super().__init__(name, value) + for key in self._keys: + self._value[f"sanitized_{key}"] = sanitize_filename.sanitize( + self._value[key] + ) diff --git a/ytdl_subscribe/validators/config/preset_validator.py b/ytdl_subscribe/validators/config/preset_validator.py index b0ec8f66..adb2f613 100644 --- a/ytdl_subscribe/validators/config/preset_validator.py +++ b/ytdl_subscribe/validators/config/preset_validator.py @@ -4,46 +4,30 @@ from typing import List from typing import Optional from typing import Type -import sanitize_filename - from ytdl_subscribe.validators.base.strict_dict_validator import StrictDictValidator -from ytdl_subscribe.validators.base.string_formatter_validator import ( - DictFormatterValidator, -) -from ytdl_subscribe.validators.base.validators import LiteralDictValidator from ytdl_subscribe.validators.config.metadata_options.metadata_options_validator import ( MetadataOptionsValidator, ) from ytdl_subscribe.validators.config.output_options.output_options_validator import ( OutputOptionsValidator, ) -from ytdl_subscribe.validators.config.sources.soundcloud_validators import ( +from ytdl_subscribe.validators.config.overrides.overrides_validator import ( + OverridesValidator, +) +from ytdl_subscribe.validators.config.source_options.soundcloud_validators import ( SoundcloudSourceValidator, ) -from ytdl_subscribe.validators.config.sources.source_validator import SourceValidator -from ytdl_subscribe.validators.config.sources.youtube_validators import ( +from ytdl_subscribe.validators.config.source_options.source_validator import ( + SourceValidator, +) +from ytdl_subscribe.validators.config.source_options.youtube_validators import ( YoutubeSourceValidator, ) +from ytdl_subscribe.validators.config.ytdl_options.ytdl_options_validator import ( + YTDLOptionsValidator, +) from ytdl_subscribe.validators.exceptions import ValidationException - -class YTDLOptionsValidator(LiteralDictValidator): - """Ensures `ytdl_options` is a dict""" - - pass - - -class OverridesValidator(DictFormatterValidator): - """Ensures `overrides` is a dict""" - - def __init__(self, name, value): - super().__init__(name, value) - for key in self._keys: - self._value[f"sanitized_{key}"] = sanitize_filename.sanitize( - self._value[key] - ) - - PRESET_SOURCE_VALIDATOR_MAPPING: Dict[str, Type[SourceValidator]] = { "soundcloud": SoundcloudSourceValidator, "youtube": YoutubeSourceValidator, diff --git a/ytdl_subscribe/validators/config/source_options/__init__.py b/ytdl_subscribe/validators/config/source_options/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ytdl_subscribe/validators/config/sources/soundcloud_validators.py b/ytdl_subscribe/validators/config/source_options/soundcloud_validators.py similarity index 83% rename from ytdl_subscribe/validators/config/sources/soundcloud_validators.py rename to ytdl_subscribe/validators/config/source_options/soundcloud_validators.py index dd3b3d01..abbba7c4 100644 --- a/ytdl_subscribe/validators/config/sources/soundcloud_validators.py +++ b/ytdl_subscribe/validators/config/source_options/soundcloud_validators.py @@ -1,9 +1,11 @@ from ytdl_subscribe.validators.base.validators import BoolValidator from ytdl_subscribe.validators.base.validators import StringValidator -from ytdl_subscribe.validators.config.sources.source_validator import ( +from ytdl_subscribe.validators.config.source_options.source_validator import ( DownloadStrategyValidator, ) -from ytdl_subscribe.validators.config.sources.source_validator import SourceValidator +from ytdl_subscribe.validators.config.source_options.source_validator import ( + SourceValidator, +) class SoundcloudAlbumsAndSinglesDownloadValidator(DownloadStrategyValidator): diff --git a/ytdl_subscribe/validators/config/sources/source_validator.py b/ytdl_subscribe/validators/config/source_options/source_validator.py similarity index 100% rename from ytdl_subscribe/validators/config/sources/source_validator.py rename to ytdl_subscribe/validators/config/source_options/source_validator.py diff --git a/ytdl_subscribe/validators/config/sources/youtube_validators.py b/ytdl_subscribe/validators/config/source_options/youtube_validators.py similarity index 77% rename from ytdl_subscribe/validators/config/sources/youtube_validators.py rename to ytdl_subscribe/validators/config/source_options/youtube_validators.py index 147e13b4..ad541047 100644 --- a/ytdl_subscribe/validators/config/sources/youtube_validators.py +++ b/ytdl_subscribe/validators/config/source_options/youtube_validators.py @@ -1,10 +1,12 @@ from typing import Any from ytdl_subscribe.validators.base.validators import StringValidator -from ytdl_subscribe.validators.config.sources.source_validator import ( +from ytdl_subscribe.validators.config.source_options.source_validator import ( DownloadStrategyValidator, ) -from ytdl_subscribe.validators.config.sources.source_validator import SourceValidator +from ytdl_subscribe.validators.config.source_options.source_validator import ( + SourceValidator, +) class YoutubePlaylistDownloadValidator(DownloadStrategyValidator): diff --git a/ytdl_subscribe/validators/config/subscription_validator.py b/ytdl_subscribe/validators/config/subscription_validator.py index 279414fe..bc561e4c 100644 --- a/ytdl_subscribe/validators/config/subscription_validator.py +++ b/ytdl_subscribe/validators/config/subscription_validator.py @@ -12,15 +12,17 @@ from ytdl_subscribe.subscriptions.subscription import Subscription from ytdl_subscribe.subscriptions.youtube import YoutubePlaylistSubscription from ytdl_subscribe.validators.base.strict_dict_validator import StrictDictValidator from ytdl_subscribe.validators.base.validators import StringValidator -from ytdl_subscribe.validators.config.config_validator import ConfigFileValidator +from ytdl_subscribe.validators.config.config_file_validator import ConfigFileValidator +from ytdl_subscribe.validators.config.overrides.overrides_validator import ( + OverridesValidator, +) from ytdl_subscribe.validators.config.preset_validator import PRESET_OPTIONAL_KEYS from ytdl_subscribe.validators.config.preset_validator import PRESET_REQUIRED_KEYS -from ytdl_subscribe.validators.config.preset_validator import OverridesValidator from ytdl_subscribe.validators.config.preset_validator import PresetValidator -from ytdl_subscribe.validators.config.sources.soundcloud_validators import ( +from ytdl_subscribe.validators.config.source_options.soundcloud_validators import ( SoundcloudAlbumsAndSinglesDownloadValidator, ) -from ytdl_subscribe.validators.config.sources.youtube_validators import ( +from ytdl_subscribe.validators.config.source_options.youtube_validators import ( YoutubePlaylistDownloadValidator, ) diff --git a/ytdl_subscribe/validators/config/ytdl_options/__init__.py b/ytdl_subscribe/validators/config/ytdl_options/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ytdl_subscribe/validators/config/ytdl_options/ytdl_options_validator.py b/ytdl_subscribe/validators/config/ytdl_options/ytdl_options_validator.py new file mode 100644 index 00000000..96e05eb6 --- /dev/null +++ b/ytdl_subscribe/validators/config/ytdl_options/ytdl_options_validator.py @@ -0,0 +1,7 @@ +from ytdl_subscribe.validators.base.validators import LiteralDictValidator + + +class YTDLOptionsValidator(LiteralDictValidator): + """Ensures `ytdl_options` is a dict""" + + pass