[BACKEND] Disallow override names conflicting with plugin names
This commit is contained in:
parent
157a0b59c4
commit
55cf6bc48d
4 changed files with 45 additions and 5 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
from typing import Any
|
from typing import Any, List, Iterable
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Set
|
from typing import Set
|
||||||
|
|
@ -88,6 +88,19 @@ class Overrides(UnstructuredDictFormatterValidator, Scriptable):
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def ensure_variable_names_not_a_plugin(self, plugin_names: Iterable[str]) -> None:
|
||||||
|
for name in self.keys:
|
||||||
|
if name.startswith("%"):
|
||||||
|
name = name[1:]
|
||||||
|
|
||||||
|
if name in plugin_names:
|
||||||
|
raise self._validation_exception(
|
||||||
|
f"Override variable with name {name} cannot be used since it is"
|
||||||
|
" the name of a plugin. Perhaps you meant to define it as a plugin? If so,"
|
||||||
|
" indent it left to make it at the same level as overrides.",
|
||||||
|
exception_class=InvalidVariableNameException,
|
||||||
|
)
|
||||||
|
|
||||||
def ensure_variable_name_valid(self, name: str) -> None:
|
def ensure_variable_name_valid(self, name: str) -> None:
|
||||||
"""
|
"""
|
||||||
Ensures the variable name does not collide with any entry variables or built-in functions.
|
Ensures the variable name does not collide with any entry variables or built-in functions.
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,10 @@ class Preset(_PresetShell):
|
||||||
self.plugins: PresetPlugins = self._validate_and_get_plugins()
|
self.plugins: PresetPlugins = self._validate_and_get_plugins()
|
||||||
self.overrides = self._validate_key(key="overrides", validator=Overrides, default={})
|
self.overrides = self._validate_key(key="overrides", validator=Overrides, default={})
|
||||||
|
|
||||||
|
self.overrides.ensure_variable_names_not_a_plugin(
|
||||||
|
plugin_names=PRESET_KEYS
|
||||||
|
)
|
||||||
|
|
||||||
VariableValidation(
|
VariableValidation(
|
||||||
downloader_options=self.downloader_options,
|
downloader_options=self.downloader_options,
|
||||||
output_options=self.output_options,
|
output_options=self.output_options,
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,6 @@ from ytdl_sub.entries.script.variable_types import Variable
|
||||||
from ytdl_sub.script.functions import Functions
|
from ytdl_sub.script.functions import Functions
|
||||||
from ytdl_sub.script.utils.name_validation import is_valid_name
|
from ytdl_sub.script.utils.name_validation import is_valid_name
|
||||||
|
|
||||||
# TODO: use this
|
|
||||||
SUBSCRIPTION_ARRAY = "subscription_array"
|
|
||||||
|
|
||||||
|
|
||||||
class SubscriptionVariables:
|
class SubscriptionVariables:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
@ -163,7 +160,7 @@ class OverrideHelpers:
|
||||||
True if the override name itself is valid. False otherwise.
|
True if the override name itself is valid. False otherwise.
|
||||||
"""
|
"""
|
||||||
if name.startswith("%"):
|
if name.startswith("%"):
|
||||||
return is_valid_name(name=name[1:])
|
name = name[1:]
|
||||||
|
|
||||||
return is_valid_name(name=name)
|
return is_valid_name(name=name)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -435,3 +435,29 @@ class TestPreset:
|
||||||
"output_options": {"output_directory": "dir", "file_name": "acjk"},
|
"output_options": {"output_directory": "dir", "file_name": "acjk"},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_preset_error_override_name_conflicts_with_plugin(self, config_file, output_options):
|
||||||
|
with pytest.raises(
|
||||||
|
ValidationException,
|
||||||
|
match=re.escape(
|
||||||
|
"Override variable with name throttle_protection cannot be used since it is the "
|
||||||
|
"name of a plugin. Perhaps you meant to define it as a plugin? If so, indent it "
|
||||||
|
"left to make it at the same level as overrides."
|
||||||
|
),
|
||||||
|
):
|
||||||
|
_ = Preset(
|
||||||
|
config=config_file,
|
||||||
|
name="test",
|
||||||
|
value={
|
||||||
|
"download": {
|
||||||
|
"url": "youtube.com/watch?v=123abc",
|
||||||
|
},
|
||||||
|
"subtitles": {
|
||||||
|
"embed_subtitles": True,
|
||||||
|
},
|
||||||
|
"output_options": {"output_directory": "dir", "file_name": "acjk"},
|
||||||
|
"overrides": {
|
||||||
|
"throttle_protection": "nope"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
Loading…
Reference in a new issue