36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
from typing import Optional
|
|
|
|
from yt_dlp.utils import sanitize_filename
|
|
|
|
from ytdl_subscribe.entries.entry import Entry
|
|
from ytdl_subscribe.validators.string_formatter_validators import DictFormatterValidator
|
|
from ytdl_subscribe.validators.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)
|