diff --git a/src/ytdl_sub/config/config_validator.py b/src/ytdl_sub/config/config_validator.py index b2ed0aef..897684ea 100644 --- a/src/ytdl_sub/config/config_validator.py +++ b/src/ytdl_sub/config/config_validator.py @@ -10,6 +10,7 @@ from ytdl_sub.config.defaults import DEFAULT_FFPROBE_PATH from ytdl_sub.config.defaults import DEFAULT_LOCK_DIRECTORY from ytdl_sub.config.defaults import MAX_FILE_NAME_BYTES from ytdl_sub.prebuilt_presets import PREBUILT_PRESETS +from ytdl_sub.subscriptions.utils import SUBSCRIPTION_VALUE_CONFIG_KEY from ytdl_sub.validators.file_path_validators import FFmpegFileValidator from ytdl_sub.validators.file_path_validators import FFprobeFileValidator from ytdl_sub.validators.strict_dict_validator import StrictDictValidator @@ -106,7 +107,7 @@ class ConfigOptions(StrictDictValidator): "ffprobe_path", "file_name_max_bytes", "experimental", - "subscription_value", + SUBSCRIPTION_VALUE_CONFIG_KEY, } def __init__(self, name: str, value: Any): @@ -142,7 +143,7 @@ class ConfigOptions(StrictDictValidator): key="file_name_max_bytes", validator=IntValidator, default=MAX_FILE_NAME_BYTES ) self._subscription_value = self._validate_key_if_present( - key="subscription_value", validator=StringValidator + key=SUBSCRIPTION_VALUE_CONFIG_KEY, validator=StringValidator ) @property diff --git a/src/ytdl_sub/config/preset_options.py b/src/ytdl_sub/config/preset_options.py index 08ed5086..efc269dc 100644 --- a/src/ytdl_sub/config/preset_options.py +++ b/src/ytdl_sub/config/preset_options.py @@ -9,6 +9,7 @@ from yt_dlp.utils import sanitize_filename from ytdl_sub.config.defaults import DEFAULT_DOWNLOAD_ARCHIVE_NAME from ytdl_sub.entries.entry import Entry +from ytdl_sub.subscriptions.utils import SUBSCRIPTION_NAME from ytdl_sub.utils.exceptions import ValidationException from ytdl_sub.validators.file_path_validators import OverridesStringFormatterFilePathValidator from ytdl_sub.validators.file_path_validators import StringFormatterFileNameValidator @@ -173,6 +174,22 @@ class Overrides(DictFormatterValidator): sanitize=True, ) + if SUBSCRIPTION_NAME not in self._value: + self._add_override_variable( + key_name=SUBSCRIPTION_NAME, + format_string=self.subscription_name, + sanitize=True, + ) + + @property + def subscription_name(self) -> str: + """ + Returns + ------- + Name of the subscription + """ + return self._root_name + def apply_formatter( self, formatter: StringFormatterValidator, diff --git a/src/ytdl_sub/subscriptions/subscription_validators.py b/src/ytdl_sub/subscriptions/subscription_validators.py index 6b0f8a3f..007b2b9a 100644 --- a/src/ytdl_sub/subscriptions/subscription_validators.py +++ b/src/ytdl_sub/subscriptions/subscription_validators.py @@ -9,6 +9,10 @@ from typing import final from ytdl_sub.config.config_file import ConfigFile from ytdl_sub.config.preset_options import Overrides +from ytdl_sub.subscriptions.utils import SUBSCRIPTION_NAME +from ytdl_sub.subscriptions.utils import SUBSCRIPTION_VALUE +from ytdl_sub.subscriptions.utils import subscription_indent_variable_name +from ytdl_sub.subscriptions.utils import subscription_list_variable_name from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator from ytdl_sub.validators.validators import DictValidator from ytdl_sub.validators.validators import StringListValidator @@ -16,29 +20,6 @@ from ytdl_sub.validators.validators import StringValidator from ytdl_sub.validators.validators import Validator -def subscription_indent_variable_name(index: int) -> str: - """ - Parameters - ---------- - index - 0th-based index - - Returns - ------- - subscription_index_i, where i is 1-based index - """ - return f"subscription_indent_{index + 1}" - - -def subscription_value_variable_name() -> str: - """ - Returns - ------- - The override variable name containing the subscription value if present - """ - return "subscription_value" - - class SubscriptionOutput(Validator, ABC): def __init__(self, name, value, presets: List[str], indent_overrides: List[str]): super().__init__(name, value) @@ -95,7 +76,7 @@ class SubscriptionPresetDictValidator(SubscriptionOutput, DictValidator): output_dict["overrides"] = dict( output_dict.get("overrides", {}), **self._indent_overrides_dict(), - **{"subscription_name": self.subscription_name}, + **{SUBSCRIPTION_NAME: self.subscription_name}, ) return {self.subscription_name: output_dict} @@ -117,7 +98,7 @@ class SubscriptionLeafValidator(SubscriptionOutput, 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] = {SUBSCRIPTION_NAME: self.subscription_name} @final def subscription_dicts(self, global_presets_to_apply: List[str]) -> Dict[str, Dict]: @@ -153,7 +134,7 @@ class SubscriptionValueValidator(SubscriptionLeafValidator, StringValidator): # TODO: Eventually delete in favor of {subscription_value} if subscription_value: self._overrides_to_add[subscription_value] = self.value - self._overrides_to_add["subscription_value"] = self.value + self._overrides_to_add[SUBSCRIPTION_VALUE] = self.value class SubscriptionListValuesValidator(SubscriptionLeafValidator, StringListValidator): @@ -176,8 +157,9 @@ 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[f"subscription_value_{idx + 1}"] = list_value.value + self._overrides_to_add[SUBSCRIPTION_VALUE] = list_value.value + + self._overrides_to_add[subscription_list_variable_name(index=idx)] = list_value.value class SubscriptionWithOverridesValidator(SubscriptionLeafValidator, DictFormatterValidator): diff --git a/src/ytdl_sub/subscriptions/utils.py b/src/ytdl_sub/subscriptions/utils.py new file mode 100644 index 00000000..3e2c9a00 --- /dev/null +++ b/src/ytdl_sub/subscriptions/utils.py @@ -0,0 +1,33 @@ +SUBSCRIPTION_NAME = "subscription_name" +SUBSCRIPTION_VALUE = "subscription_value" + +# Key used in configs, should delete at some point +SUBSCRIPTION_VALUE_CONFIG_KEY = "subscription_value" + + +def subscription_indent_variable_name(index: int) -> str: + """ + Parameters + ---------- + index + 0th-based index + + Returns + ------- + subscription_index_i, where i is 1-based index + """ + return f"subscription_indent_{index + 1}" + + +def subscription_list_variable_name(index: int) -> str: + """ + Parameters + ---------- + index + 0th-based index + + Returns + ------- + subscription_value_i, where i is 1-based index + """ + return f"subscription_value_{index + 1}"