improved added source var validation
This commit is contained in:
parent
d9bca00bc4
commit
adc61f6ed1
4 changed files with 24 additions and 11 deletions
|
|
@ -203,16 +203,18 @@ class Preset(StrictDictValidator):
|
||||||
|
|
||||||
# Validate added download option variables here since plugins could subsequently use them
|
# Validate added download option variables here since plugins could subsequently use them
|
||||||
self.downloader_options.validate_with_variables(
|
self.downloader_options.validate_with_variables(
|
||||||
source_variables=source_variables, override_variables=self.overrides.keys
|
source_variables=source_variables,
|
||||||
|
override_variables=self.overrides.dict_with_format_strings,
|
||||||
)
|
)
|
||||||
source_variables.extend(self.downloader_options.added_source_variables())
|
source_variables.extend(self.downloader_options.added_source_variables())
|
||||||
|
|
||||||
for plugin_options in sorted(
|
for _, plugin_options in sorted(
|
||||||
self.plugins.plugin_options, key=lambda pl_options: pl_options.priority.modify_entry
|
self.plugins.zipped(), key=lambda pl: pl[0].priority.modify_entry
|
||||||
):
|
):
|
||||||
# Validate current plugin using source + added plugin variables
|
# Validate current plugin using source + added plugin variables
|
||||||
plugin_options.validate_with_variables(
|
plugin_options.validate_with_variables(
|
||||||
source_variables=source_variables, override_variables=self.overrides.keys
|
source_variables=source_variables,
|
||||||
|
override_variables=self.overrides.dict_with_format_strings,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Extend existing source variables with ones created from this plugin
|
# Extend existing source variables with ones created from this plugin
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ class AddsVariablesMixin(ABC):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def validate_with_variables(
|
def validate_with_variables(
|
||||||
self, source_variables: List[str], override_variables: List[str]
|
self, source_variables: List[str], override_variables: Dict[str, str]
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Optional validation after init with the session's source and override variables.
|
Optional validation after init with the session's source and override variables.
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ from ytdl_sub.entries.entry_parent import EntryParent
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler
|
||||||
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
||||||
from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator
|
||||||
|
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
||||||
from ytdl_sub.validators.validators import ListValidator
|
from ytdl_sub.validators.validators import ListValidator
|
||||||
from ytdl_sub.validators.validators import StringValidator
|
from ytdl_sub.validators.validators import StringValidator
|
||||||
|
|
||||||
|
|
@ -124,19 +125,29 @@ class CollectionDownloadOptions(DownloaderValidator):
|
||||||
return list(self._urls.list[0].variables.keys())
|
return list(self._urls.list[0].variables.keys())
|
||||||
|
|
||||||
def validate_with_variables(
|
def validate_with_variables(
|
||||||
self, source_variables: List[str], override_variables: List[str]
|
self, source_variables: List[str], override_variables: Dict[str, str]
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Ensures new variables added are not existing variables
|
Ensures new variables added are not existing variables
|
||||||
"""
|
"""
|
||||||
# TODO: Make sure they resolve
|
for source_var_name in self.added_source_variables():
|
||||||
for added_source_var in self.added_source_variables():
|
if source_var_name in source_variables:
|
||||||
if added_source_var in source_variables:
|
|
||||||
raise self._validation_exception(
|
raise self._validation_exception(
|
||||||
f"'{added_source_var}' cannot be used as a variable name because it "
|
f"'{source_var_name}' cannot be used as a variable name because it "
|
||||||
f"is an existing source variable"
|
f"is an existing source variable"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
base_variables = dict(
|
||||||
|
override_variables, **{source_var: "dummy_string" for source_var in source_variables}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Apply formatting to each new source variable, ensure it resolves
|
||||||
|
for collection_url in self.collection_urls.list:
|
||||||
|
for source_var_name, source_var_formatter_str in collection_url.variables.items():
|
||||||
|
_ = StringFormatterValidator(
|
||||||
|
name=f"{self._name}.{source_var_name}", value=source_var_formatter_str
|
||||||
|
).apply_formatter(base_variables)
|
||||||
|
|
||||||
|
|
||||||
class CollectionDownloader(Downloader[CollectionDownloadOptions, Entry]):
|
class CollectionDownloader(Downloader[CollectionDownloadOptions, Entry]):
|
||||||
downloader_options_type = CollectionDownloadOptions
|
downloader_options_type = CollectionDownloadOptions
|
||||||
|
|
|
||||||
|
|
@ -165,7 +165,7 @@ class RegexOptions(PluginOptions):
|
||||||
return self._skip_if_match_fails
|
return self._skip_if_match_fails
|
||||||
|
|
||||||
def validate_with_variables(
|
def validate_with_variables(
|
||||||
self, source_variables: List[str], override_variables: List[str]
|
self, source_variables: List[str], override_variables: Dict[str, str]
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Ensures each source variable capture group is valid
|
Ensures each source variable capture group is valid
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue