unit tests almost passing

This commit is contained in:
Jesse Bannon 2023-02-24 17:16:22 -08:00
parent d1705e3942
commit b6af2c8de7
6 changed files with 45 additions and 10 deletions

View file

@ -7,6 +7,8 @@ from typing import Optional
from yt_dlp.utils import sanitize_filename from yt_dlp.utils import sanitize_filename
from ytdl_sub.entries.entry import Entry from ytdl_sub.entries.entry import Entry
from ytdl_sub.validators.file_path_validators import OverridesStringFormatterValidatorFilePathValidator, \
StringFormatterFilePathValidator
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
from ytdl_sub.validators.string_datetime import StringDatetimeValidator from ytdl_sub.validators.string_datetime import StringDatetimeValidator
from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator
@ -221,19 +223,19 @@ class OutputOptions(StrictDictValidator):
# Output directory should resolve without any entry variables. # Output directory should resolve without any entry variables.
# This is to check the directory for any download-archives before any downloads begin # This is to check the directory for any download-archives before any downloads begin
self._output_directory: OverridesStringFormatterValidator = self._validate_key( self._output_directory = self._validate_key(
key="output_directory", validator=OverridesStringFormatterValidator key="output_directory", validator=OverridesStringFormatterValidatorFilePathValidator
) )
# file name and thumbnails however can use entry variables # file name and thumbnails however can use entry variables
self._file_name: StringFormatterValidator = self._validate_key( self._file_name = self._validate_key(
key="file_name", validator=StringFormatterValidator key="file_name", validator=StringFormatterFilePathValidator
) )
self._thumbnail_name = self._validate_key_if_present( self._thumbnail_name = self._validate_key_if_present(
key="thumbnail_name", validator=StringFormatterValidator key="thumbnail_name", validator=StringFormatterFilePathValidator
) )
self._info_json_name = self._validate_key_if_present( self._info_json_name = self._validate_key_if_present(
key="info_json_name", validator=StringFormatterValidator key="info_json_name", validator=StringFormatterFilePathValidator
) )
self._maintain_download_archive = self._validate_key_if_present( self._maintain_download_archive = self._validate_key_if_present(

View file

@ -16,6 +16,7 @@ from ytdl_sub.utils.xml import XmlElement
from ytdl_sub.utils.xml import to_max_3_byte_utf8_dict from ytdl_sub.utils.xml import to_max_3_byte_utf8_dict
from ytdl_sub.utils.xml import to_max_3_byte_utf8_string from ytdl_sub.utils.xml import to_max_3_byte_utf8_string
from ytdl_sub.utils.xml import to_xml from ytdl_sub.utils.xml import to_xml
from ytdl_sub.validators.file_path_validators import StringFormatterFilePathValidator
from ytdl_sub.validators.nfo_validators import NfoTagsValidator from ytdl_sub.validators.nfo_validators import NfoTagsValidator
from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
@ -46,7 +47,7 @@ class SharedNfoTagsOptions(PluginOptions):
super().__init__(name, value) super().__init__(name, value)
self._nfo_name = self._validate_key_if_present( self._nfo_name = self._validate_key_if_present(
key="nfo_name", validator=StringFormatterValidator key="nfo_name", validator=StringFormatterFilePathValidator
) )
self._nfo_root = self._validate_key_if_present( self._nfo_root = self._validate_key_if_present(
key="nfo_root", validator=StringFormatterValidator key="nfo_root", validator=StringFormatterValidator
@ -57,7 +58,7 @@ class SharedNfoTagsOptions(PluginOptions):
).value ).value
@property @property
def nfo_name(self) -> StringFormatterValidator: def nfo_name(self) -> StringFormatterFilePathValidator:
""" """
The NFO file name. The NFO file name.
""" """

View file

@ -11,6 +11,7 @@ from ytdl_sub.plugins.plugin import PluginOptions
from ytdl_sub.utils.file_handler import FileHandler from ytdl_sub.utils.file_handler import FileHandler
from ytdl_sub.utils.file_handler import FileMetadata from ytdl_sub.utils.file_handler import FileMetadata
from ytdl_sub.utils.logger import Logger from ytdl_sub.utils.logger import Logger
from ytdl_sub.validators.file_path_validators import StringFormatterFilePathValidator
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
from ytdl_sub.validators.string_select_validator import StringSelectValidator from ytdl_sub.validators.string_select_validator import StringSelectValidator
from ytdl_sub.validators.validators import BoolValidator from ytdl_sub.validators.validators import BoolValidator
@ -58,7 +59,7 @@ class SubtitleOptions(PluginOptions):
def __init__(self, name, value): def __init__(self, name, value):
super().__init__(name, value) super().__init__(name, value)
self._subtitles_name = self._validate_key_if_present( self._subtitles_name = self._validate_key_if_present(
key="subtitles_name", validator=StringFormatterValidator key="subtitles_name", validator=StringFormatterFilePathValidator
) )
self._subtitles_type = self._validate_key_if_present( self._subtitles_type = self._validate_key_if_present(
key="subtitles_type", validator=SubtitlesTypeValidator, default="srt" key="subtitles_type", validator=SubtitlesTypeValidator, default="srt"

View file

@ -155,6 +155,15 @@ class FileHandlerTransactionLog:
Tracks file 'transactions' performed by a FileHandler Tracks file 'transactions' performed by a FileHandler
""" """
@classmethod
def format_path_str(cls, path_str: Path | str) -> str:
"""
Returns
-------
str formatted to always look like a unix string
"""
return str(path_str).replace(os.sep, '/')
def __init__(self): def __init__(self):
self.files_created: Dict[str, FileMetadata] = {} self.files_created: Dict[str, FileMetadata] = {}
self.files_modified: Dict[str, FileMetadata] = {} self.files_modified: Dict[str, FileMetadata] = {}
@ -241,6 +250,10 @@ class FileHandlerTransactionLog:
file_directory = os.path.dirname(Path(output_directory) / file_path) file_directory = os.path.dirname(Path(output_directory) / file_path)
file_name = os.path.basename(Path(output_directory) / file_path) file_name = os.path.basename(Path(output_directory) / file_path)
# Format file directories/names to always look like unix
file_directory = cls.format_path_str(file_directory)
file_name = cls.format_path_str(file_name)
directory_set[file_directory][file_name] = file_metadata directory_set[file_directory][file_name] = file_metadata
lines: List[str] = [file_set_title, "-" * 40] lines: List[str] = [file_set_title, "-" * 40]

View file

@ -0,0 +1,18 @@
import os
from typing import Dict
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator, OverridesStringFormatterValidator
class StringFormatterFilePathValidator(StringFormatterValidator):
_expected_value_type_name = "filepath"
def apply_formatter(self, variable_dict: Dict[str, str]) -> str:
return os.path.relpath(super().apply_formatter(variable_dict))
class OverridesStringFormatterValidatorFilePathValidator(OverridesStringFormatterValidator):
_expected_value_type_name = "static filepath"
def apply_formatter(self, variable_dict: Dict[str, str]) -> str:
return os.path.relpath(super().apply_formatter(variable_dict))

View file

@ -43,7 +43,7 @@ def assert_transaction_log_matches(
# Read the expected summary file # Read the expected summary file
with open(transaction_log_path, "r", encoding="utf-8") as summary_file: with open(transaction_log_path, "r", encoding="utf-8") as summary_file:
expected_summary = summary_file.read().format(output_directory=output_directory) expected_summary = summary_file.read().format(output_directory=FileHandlerTransactionLog.format_path_str(output_directory))
# Split, ensure there are the same number of new lines # Split, ensure there are the same number of new lines
summary_lines: List[str] = summary.split("\n") summary_lines: List[str] = summary.split("\n")