better usage

This commit is contained in:
Jesse Bannon 2023-12-29 15:04:11 -08:00
parent 90f7f6e227
commit 5dad43f236
6 changed files with 25 additions and 19 deletions

View file

@ -8,6 +8,7 @@ import mergedeep
from ytdl_sub.entries.entry import Entry
from ytdl_sub.entries.script.variable_definitions import VARIABLES
from ytdl_sub.entries.variables.override_variables import OverrideHelpers
from ytdl_sub.entries.variables.override_variables import OverrideVariables
from ytdl_sub.script.parser import parse
from ytdl_sub.script.script import Script
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
@ -126,10 +127,13 @@ class Overrides(DictFormatterValidator, Scriptable):
)
return ScriptUtils.add_sanitized_variables(initial_variables)
def initialize_script(self, unresolved_variables: Set[str]) -> "Overrides":
def initialize_script(
self, subscription_name: str, unresolved_variables: Set[str]
) -> "Overrides":
"""
Initialize the override script with override variables + any unresolved variables
"""
self.script.add({OverrideVariables.subscription_name(): subscription_name})
self.script.add(
self.initial_variables(
unresolved_variables={

View file

@ -198,7 +198,9 @@ class Preset(_PresetShell):
downloader_options=self.downloader_options,
output_options=self.output_options,
plugins=self.plugins,
).initialize_overrides(overrides=self.overrides).ensure_proper_usage()
).initialize_overrides(
subscription_name=self.name, overrides=self.overrides
).ensure_proper_usage()
@property
def name(self) -> str:

View file

@ -88,7 +88,9 @@ class VariableValidation:
self.resolved_variables: Set[str] = set()
self.unresolved_variables: Set[str] = set()
def initialize_overrides(self, overrides: Overrides) -> "VariableValidation":
def initialize_overrides(
self, subscription_name: str, overrides: Overrides
) -> "VariableValidation":
"""
Do some gymnastics to initialize the Overrides script.
"""
@ -127,7 +129,9 @@ class VariableValidation:
# Initialize overrides with unresolved variables + modified variables to throw an error.
# For modified variables, this is to prevent a resolve(update=True) to setting any
# dependencies until it has been explicitly added
overrides = overrides.initialize_script(unresolved_variables=self.unresolved_variables)
overrides = overrides.initialize_script(
subscription_name=subscription_name, unresolved_variables=self.unresolved_variables
)
# copy the script and mock entry variables
self.script = copy.deepcopy(overrides.script).add(_add_dummy_variables(entry_variables))

View file

@ -3,9 +3,7 @@ from ytdl_sub.entries.script.variable_definitions import VARIABLE_SCRIPTS
from ytdl_sub.script.functions import Functions
from ytdl_sub.script.utils.name_validation import is_valid_name
SUBSCRIPTION_NAME = "subscription_name"
SUBSCRIPTION_VALUE = "subscription_value"
SUBSCRIPTION_MAP = "subscription_map"
# TODO: use this
SUBSCRIPTION_ARRAY = "subscription_array"
@ -15,7 +13,7 @@ class OverrideVariables:
"""
Name of the subscription
"""
return SUBSCRIPTION_NAME
return "subscription_name"
@staticmethod
def subscription_value() -> str:
@ -28,7 +26,7 @@ class OverrideVariables:
``subscription_value`` gets set to ``https://...``.
"""
return SUBSCRIPTION_VALUE
return "subscription_value"
@staticmethod
def subscription_indent_i(index: int) -> str:
@ -90,7 +88,7 @@ class OverrideVariables:
]
}
"""
return SUBSCRIPTION_MAP
return "subscription_map"
class OverrideHelpers:

View file

@ -9,9 +9,6 @@ from typing import final
from ytdl_sub.config.config_file import ConfigFile
from ytdl_sub.config.overrides import Overrides
from ytdl_sub.entries.variables.override_variables import SUBSCRIPTION_MAP
from ytdl_sub.entries.variables.override_variables import SUBSCRIPTION_NAME
from ytdl_sub.entries.variables.override_variables import SUBSCRIPTION_VALUE
from ytdl_sub.entries.variables.override_variables import OverrideVariables
from ytdl_sub.utils.script import ScriptUtils
from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator
@ -85,7 +82,6 @@ class SubscriptionPresetDictValidator(NamedSubscriptionValidator, DictValidator)
output_dict["overrides"] = dict(
output_dict.get("overrides", {}),
**self._indent_overrides_dict(),
**{SUBSCRIPTION_NAME: self.subscription_name},
)
return {self.subscription_name: output_dict}
@ -114,7 +110,7 @@ class SubscriptionLeafValidator(NamedSubscriptionValidator, ABC):
f"used as a subscription name"
)
self._overrides_to_add: Dict[str, str] = {SUBSCRIPTION_NAME: self.subscription_name}
self._overrides_to_add: Dict[str, str] = {}
@final
def subscription_dicts(self, global_presets_to_apply: List[str]) -> Dict[str, Dict]:
@ -147,7 +143,7 @@ class SubscriptionValueValidator(SubscriptionLeafValidator, StringValidator):
presets=presets,
indent_overrides=indent_overrides,
)
self._overrides_to_add[SUBSCRIPTION_VALUE] = self.value
self._overrides_to_add[OverrideVariables.subscription_value()] = self.value
class SubscriptionListValuesValidator(SubscriptionLeafValidator, StringListValidator):
@ -172,7 +168,7 @@ class SubscriptionListValuesValidator(SubscriptionLeafValidator, StringListValid
for idx, list_value in enumerate(self.list):
# Write the first list value into subscription_value as well
if idx == 0:
self._overrides_to_add[SUBSCRIPTION_VALUE] = list_value.value
self._overrides_to_add[OverrideVariables.subscription_value()] = list_value.value
self._overrides_to_add[
OverrideVariables.subscription_value_i(index=idx)
@ -219,7 +215,9 @@ class SubscriptionMapValidator(SubscriptionLeafValidator, LiteralDictValidator):
presets=presets,
indent_overrides=indent_overrides,
)
self._overrides_to_add[SUBSCRIPTION_MAP] = ScriptUtils.to_script(self.dict)
self._overrides_to_add[OverrideVariables.subscription_map()] = ScriptUtils.to_script(
self.dict
)
class SubscriptionValidator(SubscriptionOutput):

View file

@ -451,7 +451,7 @@ def test_advanced_tv_show_subscriptions(
assert subs[5].name == "Gardening with Ciscoe"
overrides = subs[5].overrides
assert overrides.apply_formatter(overrides.dict["subscription_name"]) == "Gardening with Ciscoe"
assert overrides.script.get("subscription_name").native == "Gardening with Ciscoe"
assert (
overrides.apply_formatter(overrides.dict["url"])
== "https://www.youtube.com/@gardeningwithciscoe4430"