From a9f9b840cef47b018f2b690e929a9e4d96fe4e9a Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 9 Mar 2026 16:00:41 -0700 Subject: [PATCH] passing levels and mocks, fixed script classes not calling formatter --- examples/music_subscriptions.yaml | 2 +- src/ytdl_sub/cli/parsers/main.py | 2 +- src/ytdl_sub/config/validators/variable_validation.py | 10 +++++++++- src/ytdl_sub/validators/string_formatter_validators.py | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/examples/music_subscriptions.yaml b/examples/music_subscriptions.yaml index 4f6f0729..dd053562 100644 --- a/examples/music_subscriptions.yaml +++ b/examples/music_subscriptions.yaml @@ -13,7 +13,7 @@ # Override variables globally for all subscriptions __preset__: overrides: - music_directory: "/music" + music_directory: "music" # Supports downloading YouTube /releases tab. Also works for any playlist (or playlist of playlists) # where each video is a single track. diff --git a/src/ytdl_sub/cli/parsers/main.py b/src/ytdl_sub/cli/parsers/main.py index 5133c170..6e98efd4 100644 --- a/src/ytdl_sub/cli/parsers/main.py +++ b/src/ytdl_sub/cli/parsers/main.py @@ -307,6 +307,6 @@ inspect_parser.add_argument( InspectArguments.MOCK.short, InspectArguments.MOCK.long, metavar="VAR=VALUE", - nargs="+", + action="append", help="ability to mock one or more variable values, i.e. --mock 'title=Lets Play'", ) diff --git a/src/ytdl_sub/config/validators/variable_validation.py b/src/ytdl_sub/config/validators/variable_validation.py index 87cb0b3a..08be99c8 100644 --- a/src/ytdl_sub/config/validators/variable_validation.py +++ b/src/ytdl_sub/config/validators/variable_validation.py @@ -71,11 +71,17 @@ class VariableValidation: raise ValueError("Invalid resolution level for validation") if mocks is not None: + for mock_name in mocks.keys(): + if mock_name in self.unresolved_variables: + self.unresolved_variables.remove(mock_name) + self.script.add( variables=mocks, unresolvable=self.unresolved_variables, ) + + self.script = self.script.resolve_partial( unresolvable=self.unresolved_variables, output_filter=self._get_resolve_partial_filter(), @@ -182,8 +188,10 @@ class VariableValidation: resolved_subscription |= validate_formatters( script=self.script, unresolved_variables=self.unresolved_variables, + unresolved_runtime_variables=self.unresolved_runtime_variables, validator=self.overrides, + partial_resolve_formatters=partial_resolve_formatters, ) - assert not self.unresolved_variables + # assert not self.unresolved_variables return resolved_subscription diff --git a/src/ytdl_sub/validators/string_formatter_validators.py b/src/ytdl_sub/validators/string_formatter_validators.py index 780976ba..400e3d82 100644 --- a/src/ytdl_sub/validators/string_formatter_validators.py +++ b/src/ytdl_sub/validators/string_formatter_validators.py @@ -293,7 +293,7 @@ def _validate_formatter( ) if maybe_resolved := parsed.maybe_resolvable: - return formatter_validator.post_process(maybe_resolved) + return formatter_validator.post_process(maybe_resolved.native) return ScriptUtils.to_native_script(parsed) except RuntimeException as exc: