diff --git a/src/ytdl_sub/config/preset_options.py b/src/ytdl_sub/config/preset_options.py index db07ca02..27ad8a92 100644 --- a/src/ytdl_sub/config/preset_options.py +++ b/src/ytdl_sub/config/preset_options.py @@ -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( diff --git a/src/ytdl_sub/validators/string_formatter_validators.py b/src/ytdl_sub/validators/string_formatter_validators.py index 3783293d..66a9815a 100644 --- a/src/ytdl_sub/validators/string_formatter_validators.py +++ b/src/ytdl_sub/validators/string_formatter_validators.py @@ -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( diff --git a/tests/unit/plugins/test_ytdl_options.py b/tests/unit/plugins/test_ytdl_options.py index e72d960e..ace6680a 100644 --- a/tests/unit/plugins/test_ytdl_options.py +++ b/tests/unit/plugins/test_ytdl_options.py @@ -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