validators!
This commit is contained in:
parent
9d8bf31f73
commit
54d35dce0e
9 changed files with 110 additions and 27 deletions
|
|
@ -2,6 +2,7 @@ import re
|
|||
from keyword import iskeyword
|
||||
from typing import List
|
||||
|
||||
from ytdl_subscribe.validators.base.validators import DictValidator
|
||||
from ytdl_subscribe.validators.base.validators import StringValidator
|
||||
|
||||
|
||||
|
|
@ -65,3 +66,15 @@ class StringFormatterValidator(StringValidator):
|
|||
The literal format string, unformatted.
|
||||
"""
|
||||
return self._value
|
||||
|
||||
|
||||
class DictFormatterValidator(DictValidator):
|
||||
"""
|
||||
Validates a dictionary made up of key: string_formatters
|
||||
"""
|
||||
|
||||
def __init__(self, name, value):
|
||||
super().__init__(name, value)
|
||||
|
||||
for key in self.keys:
|
||||
_ = self.validate_key(key=key, validator=StringFormatterValidator)
|
||||
|
|
|
|||
|
|
@ -123,7 +123,10 @@ class DictValidator(Validator):
|
|||
return sorted(list(self.dict.keys()))
|
||||
|
||||
def validate_key(
|
||||
self, key: str, validator: Type[T], default: Optional[Any] = None
|
||||
self,
|
||||
key: str,
|
||||
validator: Type[T],
|
||||
default: Optional[Any] = None,
|
||||
) -> T:
|
||||
"""
|
||||
Parameters
|
||||
|
|
@ -149,3 +152,14 @@ class DictValidator(Validator):
|
|||
name=f"{self.name}.{key}",
|
||||
value=value,
|
||||
)
|
||||
|
||||
def validate_key_if_present(
|
||||
self,
|
||||
key: str,
|
||||
validator: Type[T],
|
||||
default: Optional[Any] = None,
|
||||
) -> Optional[T]:
|
||||
if key not in self.dict:
|
||||
return None
|
||||
|
||||
return self.validate_key(key=key, validator=validator, default=default)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
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.string_select_validator import StringSelectValidator
|
||||
from ytdl_subscribe.validators.base.validators import StringValidator
|
||||
|
||||
|
||||
class Id3VersionValidator(StringSelectValidator):
|
||||
select_values = {"2.3", "2.4"}
|
||||
|
||||
|
||||
class Id3Validator(StrictDictValidator):
|
||||
required_keys = {"id3_version", "tags"}
|
||||
optional_keys = {"multi_value_separator"}
|
||||
|
||||
def __init__(self, name, value):
|
||||
super().__init__(name, value)
|
||||
|
||||
self.id3_version = self.validate_key(
|
||||
key="id3_version", validator=Id3VersionValidator
|
||||
).value
|
||||
self.tags = self.validate_key(key="tags", validator=DictFormatterValidator)
|
||||
|
||||
self.multi_value_separator = self.validate_key_if_present(
|
||||
key="multi_value_separator", validator=StringValidator
|
||||
)
|
||||
|
|
@ -4,7 +4,8 @@ from ytdl_subscribe.validators.base.strict_dict_validator import StrictDictValid
|
|||
from ytdl_subscribe.validators.base.string_formatter_validator import (
|
||||
StringFormatterValidator,
|
||||
)
|
||||
from ytdl_subscribe.validators.base.string_select_validator import StringSelectValidator
|
||||
from ytdl_subscribe.validators.config.metadata_options.id3_validator import Id3Validator
|
||||
from ytdl_subscribe.validators.config.metadata_options.nfo_validator import NFOValidator
|
||||
|
||||
|
||||
class MetadataOptionsValidator(StrictDictValidator):
|
||||
|
|
@ -13,6 +14,9 @@ class MetadataOptionsValidator(StrictDictValidator):
|
|||
def __init__(self, name, value):
|
||||
super().__init__(name, value)
|
||||
|
||||
self.id3 = self.validate_key_if_present(key="id3", validator=Id3Validator)
|
||||
self.nfo = self.validate_key_if_present(key="nfo", validator=NFOValidator)
|
||||
|
||||
self.output_directory: StringFormatterValidator = self.validate_key(
|
||||
key="output_directory", validator=StringFormatterValidator
|
||||
)
|
||||
|
|
@ -20,15 +24,3 @@ class MetadataOptionsValidator(StrictDictValidator):
|
|||
self.file_name: StringFormatterValidator = self.validate_key(
|
||||
key="file_name", validator=StringFormatterValidator
|
||||
)
|
||||
|
||||
self.convert_thumbnail: Optional[str] = None
|
||||
if "convert_thumbnail" in self.dict:
|
||||
self.convert_thumbnail = self.validate_key(
|
||||
key="convert_thumbnail", validator=ConvertThumbnailValidator
|
||||
).value
|
||||
|
||||
self.thumbnail_name: Optional[StringFormatterValidator] = None
|
||||
if "thumbnail_name" in self.dict:
|
||||
self.thumbnail_name = self.validate_key(
|
||||
key="thumbnail_name", validator=StringFormatterValidator
|
||||
)
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
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.string_formatter_validator import (
|
||||
StringFormatterValidator,
|
||||
)
|
||||
from ytdl_subscribe.validators.base.string_select_validator import StringSelectValidator
|
||||
from ytdl_subscribe.validators.base.validators import StringValidator
|
||||
|
||||
|
||||
class NFOValidator(StrictDictValidator):
|
||||
required_keys = {"nfo_name", "nfo_root", "tags"}
|
||||
|
||||
def __init__(self, name, value):
|
||||
super().__init__(name, value)
|
||||
|
||||
self.nfo_name = self.validate_key(
|
||||
key="nfo_name", validator=StringFormatterValidator
|
||||
)
|
||||
self.nfo_root = self.validate_key(
|
||||
key="nfo_root", validator=StringFormatterValidator
|
||||
)
|
||||
self.tags = self.validate_key(key="tags", validator=DictFormatterValidator)
|
||||
|
|
@ -21,19 +21,13 @@ class OutputOptionsValidator(StrictDictValidator):
|
|||
self.output_directory: StringFormatterValidator = self.validate_key(
|
||||
key="output_directory", validator=StringFormatterValidator
|
||||
)
|
||||
|
||||
self.file_name: StringFormatterValidator = self.validate_key(
|
||||
key="file_name", validator=StringFormatterValidator
|
||||
)
|
||||
|
||||
self.convert_thumbnail: Optional[str] = None
|
||||
if "convert_thumbnail" in self.dict:
|
||||
self.convert_thumbnail = self.validate_key(
|
||||
key="convert_thumbnail", validator=ConvertThumbnailValidator
|
||||
).value
|
||||
|
||||
self.thumbnail_name: Optional[StringFormatterValidator] = None
|
||||
if "thumbnail_name" in self.dict:
|
||||
self.thumbnail_name = self.validate_key(
|
||||
key="thumbnail_name", validator=StringFormatterValidator
|
||||
)
|
||||
self.convert_thumbnail = self.validate_key_if_present(
|
||||
key="convert_thumbnail", validator=ConvertThumbnailValidator
|
||||
)
|
||||
self.thumbnail_name = self.validate_key_if_present(
|
||||
key="thumbnail_name", validator=StringFormatterValidator
|
||||
)
|
||||
|
|
@ -4,7 +4,14 @@ from typing import Tuple
|
|||
|
||||
from ytdl_subscribe.utils.enums import SubscriptionSourceName
|
||||
from ytdl_subscribe.validators.base.strict_dict_validator import StrictDictValidator
|
||||
from ytdl_subscribe.validators.config.output_options_validator import (
|
||||
from ytdl_subscribe.validators.base.string_formatter_validator import (
|
||||
DictFormatterValidator,
|
||||
)
|
||||
from ytdl_subscribe.validators.base.validators import DictValidator
|
||||
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 (
|
||||
|
|
@ -62,7 +69,19 @@ class PresetValidator(StrictDictValidator):
|
|||
self.subscription_source_name,
|
||||
self.subscription_source,
|
||||
) = self.__validate_and_get_subscription_source()
|
||||
|
||||
self.output_options = self.validate_key(
|
||||
key="output_options",
|
||||
validator=OutputOptionsValidator,
|
||||
)
|
||||
self.metadata_options = self.validate_key(
|
||||
key="metadata_options", validator=MetadataOptionsValidator
|
||||
)
|
||||
|
||||
self.ytdl_options = self.validate_key_if_present(
|
||||
key="ytdl_options", validator=DictValidator
|
||||
)
|
||||
|
||||
self.overrides = self.validate_key_if_present(
|
||||
key="overrides", validator=DictFormatterValidator
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in a new issue