unit tests almost passing
This commit is contained in:
parent
d1705e3942
commit
b6af2c8de7
6 changed files with 45 additions and 10 deletions
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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]
|
||||||
|
|
|
||||||
18
src/ytdl_sub/validators/file_path_validators.py
Normal file
18
src/ytdl_sub/validators/file_path_validators.py
Normal 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))
|
||||||
|
|
@ -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")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue