from typing import Optional from yt_dlp.utils import sanitize_filename from ytdl_subscribe.entries.entry import Entry from ytdl_subscribe.validators.base.string_formatter_validators import DictFormatterValidator from ytdl_subscribe.validators.base.string_formatter_validators import StringFormatterValidator class OverridesValidator(DictFormatterValidator): """Ensures `overrides` is a dict""" def __init__(self, name, value): super().__init__(name, value) for key in self._keys: sanitized_key_name = f"sanitized_{key}" # First, sanitize the format string self._value[sanitized_key_name] = sanitize_filename(self._value[key].format_string) # Then, convert it into a StringFormatterValidator self._value[sanitized_key_name] = StringFormatterValidator( name="__should_never_fail__", value=self._value[sanitized_key_name], ) def apply_formatter( self, formatter: StringFormatterValidator, entry: Optional[Entry] = None ) -> str: """ Returns the format_string after .format has been called on it using entry (if provided) and override values """ variable_dict = self.dict_with_format_strings if entry: variable_dict = dict(entry.to_dict(), **variable_dict) return formatter.apply_formatter(variable_dict)