This commit is contained in:
Jesse Bannon 2026-01-25 14:07:00 -08:00
parent 9d43849a64
commit 5f36531113
3 changed files with 28 additions and 23 deletions

View file

@ -62,7 +62,10 @@ class YTDLOptions(UnstructuredOverridesDictFormatterValidator):
Materializes the entire ytdl-options dict from OverrideStringFormatters into
native python.
"""
out = {key: overrides.apply_formatter(val) for key, val in self.dict.items()}
out = {
key: overrides.apply_formatter(val, expected_type=object)
for key, val in self.dict.items()
}
if "cookiefile" in out:
if not FileHandler.is_file_existent(out["cookiefile"]):
raise ValidationException(

View file

@ -214,7 +214,22 @@ class OverridesDictFormatterValidator(DictFormatterValidator):
_key_validator = OverridesStringFormatterValidator
class AnyFormatterValidator(StringFormatterValidator):
"""
Applies no post-processing.
"""
def post_process(self, resolved: Any) -> Any:
return resolved
class AnyOverridesFormatterValidator(AnyFormatterValidator, OverridesStringFormatterValidator):
pass
class UnstructuredDictFormatterValidator(DictFormatterValidator):
_key_validator = AnyFormatterValidator
def __init__(self, name, value):
# Convert the unstructured-ness into a script
if isinstance(value, dict):
@ -223,19 +238,7 @@ class UnstructuredDictFormatterValidator(DictFormatterValidator):
class UnstructuredOverridesDictFormatterValidator(UnstructuredDictFormatterValidator):
_key_validator = OverridesStringFormatterValidator
def to_variable_dependency_format_string(script: Script, parsed_format_string: SyntaxTree) -> str:
"""
Create a dummy format string that contains all variable deps as a string.
"""
dummy_format_string = ""
for var in parsed_format_string.variables:
dummy_format_string += f"{{ {var.name} }}"
for variable_dependency in script._variables[var.name].variables:
dummy_format_string += f"{{ {variable_dependency.name} }}"
return dummy_format_string
_key_validator = AnyOverridesFormatterValidator
def _validate_formatter(

View file

@ -82,13 +82,17 @@ class TestYtdlOptions:
default_config: ConfigFile,
output_directory: str,
):
expected = {
"break_on_existing": True,
"js_runtimes": {"deno": {"path": "/usr/local/bin/deno"}},
"string_path": "test",
"list_test": ["hmmm"],
}
preset_dict = {
"download": "https://your.name.here",
"output_options": {"output_directory": output_directory, "file_name": "will_error.mp4"},
"ytdl_options": {
"break_on_existing": True,
"js_runtimes": {"deno": {"path": "/usr/local/bin/deno"}},
},
"ytdl_options": expected,
}
sub = Subscription.from_dict(
@ -97,10 +101,5 @@ class TestYtdlOptions:
preset_dict=preset_dict,
)
expected = {
"break_on_existing": True,
"js_runtimes": {"deno": {"path": "/usr/local/bin/deno"}},
}
out = sub.ytdl_options.to_native_dict(sub.overrides)
assert out == expected