from ytdl_subscribe.validators.strict_dict_validator import StrictDictValidator from ytdl_subscribe.validators.string_formatter_validators import OverridesStringFormatterValidator from ytdl_subscribe.validators.string_formatter_validators import StringFormatterValidator from ytdl_subscribe.validators.validators import BoolValidator class OutputOptionsValidator(StrictDictValidator): """Where to output the final files and thumbnails""" _required_keys = {"output_directory", "file_name"} _optional_keys = { "thumbnail_name", "maintain_download_archive", "maintain_stale_file_deletion", } def __init__(self, name, value): super().__init__(name, value) # Output directory should resolve without any entry variables. # This is to check the directory for any download-archives before any downloads begin self.output_directory: OverridesStringFormatterValidator = self._validate_key( key="output_directory", validator=OverridesStringFormatterValidator ) # file name and thumbnails however can use entry variables self.file_name: StringFormatterValidator = self._validate_key( key="file_name", validator=StringFormatterValidator ) self.thumbnail_name = self._validate_key_if_present( key="thumbnail_name", validator=StringFormatterValidator ) self.maintain_download_archive = self._validate_key_if_present( key="maintain_download_archive", validator=BoolValidator, default=False ) self.maintain_stale_file_deletion = self._validate_key_if_present( key="maintain_stale_file_deletion", validator=BoolValidator, default=False ) if self.maintain_stale_file_deletion.value and not self.maintain_download_archive.value: raise self._validation_exception( "maintain_stale_file_deletion requires maintain_download_archive set to True" )