From d9bca00bc4f0418dec09f41409e1bcbd7c1278ca Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 12 Sep 2022 22:57:12 -0700 Subject: [PATCH] separate func for variable checking, need to make it more advanced --- src/ytdl_sub/config/preset.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/ytdl_sub/config/preset.py b/src/ytdl_sub/config/preset.py index 93681817..db77412e 100644 --- a/src/ytdl_sub/config/preset.py +++ b/src/ytdl_sub/config/preset.py @@ -186,7 +186,6 @@ class Preset(StrictDictValidator): def __validate_and_get_plugins(self) -> PresetPlugins: preset_plugins = PresetPlugins() - source_variables = copy.deepcopy(self._source_variables) for key in self._keys: if key not in PluginMapping.plugins(): @@ -197,9 +196,19 @@ class Preset(StrictDictValidator): preset_plugins.add(plugin_type=plugin, plugin_options=plugin_options) - for plugin, plugin_options in sorted( - preset_plugins.zipped(), - key=lambda _plugin_and_options: _plugin_and_options[0].priority.modify_entry, + return preset_plugins + + def __validate_added_variables(self): + source_variables = copy.deepcopy(self._source_variables) + + # Validate added download option variables here since plugins could subsequently use them + self.downloader_options.validate_with_variables( + source_variables=source_variables, override_variables=self.overrides.keys + ) + source_variables.extend(self.downloader_options.added_source_variables()) + + for plugin_options in sorted( + self.plugins.plugin_options, key=lambda pl_options: pl_options.priority.modify_entry ): # Validate current plugin using source + added plugin variables plugin_options.validate_with_variables( @@ -209,8 +218,6 @@ class Preset(StrictDictValidator): # Extend existing source variables with ones created from this plugin source_variables.extend(plugin_options.added_source_variables()) - return preset_plugins - def __validate_override_string_formatter_validator( self, formatter_validator: Union[StringFormatterValidator, OverridesStringFormatterValidator], @@ -330,6 +337,7 @@ class Preset(StrictDictValidator): self.overrides = self._validate_key(key="overrides", validator=Overrides, default={}) self.plugins: PresetPlugins = self.__validate_and_get_plugins() + self.__validate_added_variables() # After all options are initialized, perform a recursive post-validate that requires # values from multiple validators