[DEV] Linter: Use ruff over black and isort (#1445)
Will eventually replace pylint with ruff
This commit is contained in:
parent
a758a8870d
commit
57fd6901e4
166 changed files with 639 additions and 1025 deletions
8
Makefile
8
Makefile
|
|
@ -36,12 +36,12 @@ endif
|
||||||
all: check_lint docs docker docker_ubuntu docker_gui
|
all: check_lint docs docker docker_ubuntu docker_gui
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
python3 -m isort .
|
python3 -m ruff format .
|
||||||
python3 -m black .
|
python3 -m ruff check --fix .
|
||||||
python3 -m pylint src
|
python3 -m pylint src
|
||||||
check_lint:
|
check_lint:
|
||||||
isort . --check-only --diff \
|
ruff format --check . \
|
||||||
&& black . --check \
|
&& ruff check . \
|
||||||
&& pylint src/
|
&& pylint src/
|
||||||
wheel: clean
|
wheel: clean
|
||||||
$(shell echo "__pypi_version__ = \"$(PYPI_VERSION)\"" > src/ytdl_sub/__init__.py)
|
$(shell echo "__pypi_version__ = \"$(PYPI_VERSION)\"" > src/ytdl_sub/__init__.py)
|
||||||
|
|
|
||||||
|
|
@ -47,9 +47,8 @@ test = [
|
||||||
"pytest-rerunfailures>=14,<17",
|
"pytest-rerunfailures>=14,<17",
|
||||||
]
|
]
|
||||||
lint = [
|
lint = [
|
||||||
"black==24.10.0",
|
|
||||||
"isort==7.0.0",
|
|
||||||
"pylint==4.0.1",
|
"pylint==4.0.1",
|
||||||
|
"ruff==0.15.5",
|
||||||
]
|
]
|
||||||
docs = [
|
docs = [
|
||||||
"sphinx>=7,<10",
|
"sphinx>=7,<10",
|
||||||
|
|
@ -66,15 +65,6 @@ build = [
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
ytdl-sub = "ytdl_sub.main:main"
|
ytdl-sub = "ytdl_sub.main:main"
|
||||||
|
|
||||||
[tool.isort]
|
|
||||||
profile = "black"
|
|
||||||
line_length = 100
|
|
||||||
force_single_line = true
|
|
||||||
|
|
||||||
[tool.black]
|
|
||||||
line_length = 100
|
|
||||||
target-version = ["py310"]
|
|
||||||
|
|
||||||
[tool.pylint.MASTER]
|
[tool.pylint.MASTER]
|
||||||
disable = [
|
disable = [
|
||||||
"C0115", # Missing class docstring
|
"C0115", # Missing class docstring
|
||||||
|
|
@ -100,3 +90,27 @@ include = [
|
||||||
exclude_also = [
|
exclude_also = [
|
||||||
"raise UNREACHABLE.*",
|
"raise UNREACHABLE.*",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# ruff
|
||||||
|
[tool.ruff]
|
||||||
|
line-length = 100
|
||||||
|
indent-width = 4
|
||||||
|
|
||||||
|
# Assume Python 3.10
|
||||||
|
target-version = "py310"
|
||||||
|
|
||||||
|
[tool.ruff.lint]
|
||||||
|
extend-select = ["I"]
|
||||||
|
|
||||||
|
[tool.ruff.format]
|
||||||
|
# Like Black, use double quotes for strings.
|
||||||
|
quote-style = "double"
|
||||||
|
|
||||||
|
# Like Black, indent with spaces, rather than tabs.
|
||||||
|
indent-style = "space"
|
||||||
|
|
||||||
|
# Like Black, respect magic trailing commas.
|
||||||
|
skip-magic-trailing-comma = false
|
||||||
|
|
||||||
|
# Like Black, automatically detect the appropriate line ending.
|
||||||
|
line-ending = "auto"
|
||||||
|
|
@ -4,23 +4,21 @@ import random
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from yt_dlp.utils import sanitize_filename
|
from yt_dlp.utils import sanitize_filename
|
||||||
|
|
||||||
from ytdl_sub.cli.output_summary import output_summary
|
from ytdl_sub.cli.output_summary import output_summary
|
||||||
from ytdl_sub.cli.output_transaction_log import _maybe_validate_transaction_log_file
|
from ytdl_sub.cli.output_transaction_log import (
|
||||||
from ytdl_sub.cli.output_transaction_log import output_transaction_log
|
_maybe_validate_transaction_log_file,
|
||||||
|
output_transaction_log,
|
||||||
|
)
|
||||||
from ytdl_sub.cli.parsers.cli_to_sub import print_cli_to_sub
|
from ytdl_sub.cli.parsers.cli_to_sub import print_cli_to_sub
|
||||||
from ytdl_sub.cli.parsers.dl import DownloadArgsParser
|
from ytdl_sub.cli.parsers.dl import DownloadArgsParser
|
||||||
from ytdl_sub.cli.parsers.main import DEFAULT_CONFIG_FILE_NAME
|
from ytdl_sub.cli.parsers.main import DEFAULT_CONFIG_FILE_NAME, parser
|
||||||
from ytdl_sub.cli.parsers.main import parser
|
|
||||||
from ytdl_sub.config.config_file import ConfigFile
|
from ytdl_sub.config.config_file import ConfigFile
|
||||||
from ytdl_sub.subscriptions.subscription import Subscription
|
from ytdl_sub.subscriptions.subscription import Subscription
|
||||||
from ytdl_sub.utils.exceptions import ExperimentalFeatureNotEnabled
|
from ytdl_sub.utils.exceptions import ExperimentalFeatureNotEnabled, ValidationException
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler
|
||||||
from ytdl_sub.utils.file_lock import working_directory_lock
|
from ytdl_sub.utils.file_lock import working_directory_lock
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.subscriptions.subscription import Subscription
|
from ytdl_sub.subscriptions.subscription import Subscription
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@ create_parser = yt_dlp.options.create_parser
|
||||||
|
|
||||||
|
|
||||||
def parse_patched_options(opts):
|
def parse_patched_options(opts):
|
||||||
|
|
||||||
patched_parser = create_parser()
|
patched_parser = create_parser()
|
||||||
patched_parser.defaults.update(
|
patched_parser.defaults.update(
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
import re
|
import re
|
||||||
import shlex
|
import shlex
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Tuple
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Tuple
|
|
||||||
|
|
||||||
from mergedeep import mergedeep
|
from mergedeep import mergedeep
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import os
|
import os
|
||||||
from typing import Any
|
from typing import Any, Dict
|
||||||
from typing import Dict
|
|
||||||
|
|
||||||
from ytdl_sub.config.config_validator import ConfigValidator
|
from ytdl_sub.config.config_validator import ConfigValidator
|
||||||
from ytdl_sub.config.preset import Preset
|
from ytdl_sub.config.preset import Preset
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,27 @@
|
||||||
import os
|
import os
|
||||||
import posixpath
|
import posixpath
|
||||||
from typing import Any
|
from typing import Any, Dict, Optional
|
||||||
from typing import Dict
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from mergedeep import mergedeep
|
from mergedeep import mergedeep
|
||||||
from yt_dlp.utils import datetime_from_str
|
from yt_dlp.utils import datetime_from_str
|
||||||
|
|
||||||
from ytdl_sub.config.defaults import DEFAULT_FFMPEG_PATH
|
from ytdl_sub.config.defaults import (
|
||||||
from ytdl_sub.config.defaults import DEFAULT_FFPROBE_PATH
|
DEFAULT_FFMPEG_PATH,
|
||||||
from ytdl_sub.config.defaults import DEFAULT_LOCK_DIRECTORY
|
DEFAULT_FFPROBE_PATH,
|
||||||
from ytdl_sub.config.defaults import MAX_FILE_NAME_BYTES
|
DEFAULT_LOCK_DIRECTORY,
|
||||||
|
MAX_FILE_NAME_BYTES,
|
||||||
|
)
|
||||||
from ytdl_sub.prebuilt_presets import PREBUILT_PRESETS
|
from ytdl_sub.prebuilt_presets import PREBUILT_PRESETS
|
||||||
from ytdl_sub.utils.exceptions import SubscriptionPermissionError
|
from ytdl_sub.utils.exceptions import SubscriptionPermissionError
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler
|
||||||
from ytdl_sub.validators.file_path_validators import FFmpegFileValidator
|
from ytdl_sub.validators.file_path_validators import FFmpegFileValidator, FFprobeFileValidator
|
||||||
from ytdl_sub.validators.file_path_validators import FFprobeFileValidator
|
|
||||||
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
||||||
from ytdl_sub.validators.validators import BoolValidator
|
from ytdl_sub.validators.validators import (
|
||||||
from ytdl_sub.validators.validators import IntValidator
|
BoolValidator,
|
||||||
from ytdl_sub.validators.validators import LiteralDictValidator
|
IntValidator,
|
||||||
from ytdl_sub.validators.validators import StringValidator
|
LiteralDictValidator,
|
||||||
|
StringValidator,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ExperimentalValidator(StrictDictValidator):
|
class ExperimentalValidator(StrictDictValidator):
|
||||||
|
|
|
||||||
|
|
@ -1,29 +1,28 @@
|
||||||
from typing import Any
|
from typing import Any, Dict, Iterable, Optional, Set, Type, TypeVar
|
||||||
from typing import Dict
|
|
||||||
from typing import Iterable
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
||||||
from ytdl_sub.entries.variables.override_variables import REQUIRED_OVERRIDE_VARIABLE_NAMES
|
from ytdl_sub.entries.variables.override_variables import (
|
||||||
from ytdl_sub.entries.variables.override_variables import OverrideHelpers
|
REQUIRED_OVERRIDE_VARIABLE_NAMES,
|
||||||
|
OverrideHelpers,
|
||||||
|
)
|
||||||
from ytdl_sub.script.parser import parse
|
from ytdl_sub.script.parser import parse
|
||||||
from ytdl_sub.script.script import Script
|
from ytdl_sub.script.script import Script
|
||||||
from ytdl_sub.script.types.function import BuiltInFunction
|
from ytdl_sub.script.types.function import BuiltInFunction
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
from ytdl_sub.script.types.resolvable import Resolvable, String
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
||||||
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
|
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
|
||||||
from ytdl_sub.utils.exceptions import InvalidVariableNameException
|
from ytdl_sub.utils.exceptions import (
|
||||||
from ytdl_sub.utils.exceptions import StringFormattingException
|
InvalidVariableNameException,
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
StringFormattingException,
|
||||||
|
ValidationException,
|
||||||
|
)
|
||||||
from ytdl_sub.utils.script import ScriptUtils
|
from ytdl_sub.utils.script import ScriptUtils
|
||||||
from ytdl_sub.utils.scriptable import Scriptable
|
from ytdl_sub.utils.scriptable import Scriptable
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import (
|
||||||
from ytdl_sub.validators.string_formatter_validators import UnstructuredDictFormatterValidator
|
StringFormatterValidator,
|
||||||
|
UnstructuredDictFormatterValidator,
|
||||||
|
)
|
||||||
|
|
||||||
ExpectedT = TypeVar("ExpectedT")
|
ExpectedT = TypeVar("ExpectedT")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,15 @@
|
||||||
from abc import ABC
|
from abc import ABC, abstractmethod
|
||||||
from abc import abstractmethod
|
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import Dict
|
from typing import Dict, Generic, List, Optional, Tuple, Type
|
||||||
from typing import Generic
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Tuple
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.validators.options import OptionsValidatorT
|
from ytdl_sub.config.validators.options import OptionsValidatorT, ToggleableOptionsDictValidator
|
||||||
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
from ytdl_sub.utils.file_handler import FileMetadata
|
||||||
from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadArchiver
|
from ytdl_sub.ytdl_additions.enhanced_download_archive import (
|
||||||
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
DownloadArchiver,
|
||||||
|
EnhancedDownloadArchive,
|
||||||
|
)
|
||||||
|
|
||||||
# pylint: disable=unused-argument
|
# pylint: disable=unused-argument
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,12 @@
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional, Tuple, Type
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Tuple
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin, SplitPlugin
|
||||||
from ytdl_sub.config.plugin.plugin import SplitPlugin
|
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.config.validators.options import OptionsValidator
|
from ytdl_sub.config.validators.options import OptionsValidator
|
||||||
from ytdl_sub.downloaders.url.downloader import UrlDownloaderCollectionVariablePlugin
|
from ytdl_sub.downloaders.url.downloader import (
|
||||||
from ytdl_sub.downloaders.url.downloader import UrlDownloaderThumbnailPlugin
|
UrlDownloaderCollectionVariablePlugin,
|
||||||
|
UrlDownloaderThumbnailPlugin,
|
||||||
|
)
|
||||||
from ytdl_sub.plugins.audio_extract import AudioExtractPlugin
|
from ytdl_sub.plugins.audio_extract import AudioExtractPlugin
|
||||||
from ytdl_sub.plugins.chapters import ChaptersPlugin
|
from ytdl_sub.plugins.chapters import ChaptersPlugin
|
||||||
from ytdl_sub.plugins.date_range import DateRangePlugin
|
from ytdl_sub.plugins.date_range import DateRangePlugin
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,7 @@
|
||||||
from typing import Iterable
|
from typing import Iterable, List, Optional, Set, Tuple, Type
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
from typing import Tuple
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.validators.options import OptionsValidator
|
from ytdl_sub.config.validators.options import OptionsValidator, OptionsValidatorT
|
||||||
from ytdl_sub.config.validators.options import OptionsValidatorT
|
|
||||||
|
|
||||||
|
|
||||||
class PresetPlugins:
|
class PresetPlugins:
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
import copy
|
import copy
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from mergedeep import mergedeep
|
from mergedeep import mergedeep
|
||||||
|
|
||||||
|
|
@ -10,17 +7,14 @@ from ytdl_sub.config.config_validator import ConfigValidator
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.plugin_mapping import PluginMapping
|
from ytdl_sub.config.plugin.plugin_mapping import PluginMapping
|
||||||
from ytdl_sub.config.plugin.preset_plugins import PresetPlugins
|
from ytdl_sub.config.plugin.preset_plugins import PresetPlugins
|
||||||
from ytdl_sub.config.preset_options import OutputOptions
|
from ytdl_sub.config.preset_options import OutputOptions, YTDLOptions
|
||||||
from ytdl_sub.config.preset_options import YTDLOptions
|
|
||||||
from ytdl_sub.downloaders.url.validators import MultiUrlValidator
|
from ytdl_sub.downloaders.url.validators import MultiUrlValidator
|
||||||
from ytdl_sub.prebuilt_presets import PREBUILT_PRESET_NAMES
|
from ytdl_sub.prebuilt_presets import PREBUILT_PRESET_NAMES, PUBLISHED_PRESET_NAMES
|
||||||
from ytdl_sub.prebuilt_presets import PUBLISHED_PRESET_NAMES
|
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
from ytdl_sub.utils.yaml import dump_yaml
|
from ytdl_sub.utils.yaml import dump_yaml
|
||||||
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
||||||
from ytdl_sub.validators.validators import StringListValidator
|
from ytdl_sub.validators.validators import StringListValidator, validation_exception
|
||||||
from ytdl_sub.validators.validators import validation_exception
|
|
||||||
|
|
||||||
PRESET_KEYS = {
|
PRESET_KEYS = {
|
||||||
"preset",
|
"preset",
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,22 @@
|
||||||
from typing import Any
|
from typing import Any, Dict, Optional, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.config.defaults import DEFAULT_DOWNLOAD_ARCHIVE_NAME
|
from ytdl_sub.config.defaults import DEFAULT_DOWNLOAD_ARCHIVE_NAME
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.config.validators.options import OptionsDictValidator
|
from ytdl_sub.config.validators.options import OptionsDictValidator
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES as v
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES as v
|
||||||
from ytdl_sub.utils.exceptions import SubscriptionPermissionError
|
from ytdl_sub.utils.exceptions import SubscriptionPermissionError, ValidationException
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler
|
||||||
from ytdl_sub.validators.file_path_validators import OverridesStringFormatterFilePathValidator
|
from ytdl_sub.validators.file_path_validators import (
|
||||||
from ytdl_sub.validators.file_path_validators import StringFormatterFileNameValidator
|
OverridesStringFormatterFilePathValidator,
|
||||||
|
StringFormatterFileNameValidator,
|
||||||
|
)
|
||||||
from ytdl_sub.validators.string_datetime import StringDatetimeValidator
|
from ytdl_sub.validators.string_datetime import StringDatetimeValidator
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesIntegerFormatterValidator
|
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesStringFormatterValidator
|
|
||||||
from ytdl_sub.validators.string_formatter_validators import StandardizedDateValidator
|
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
|
||||||
from ytdl_sub.validators.string_formatter_validators import (
|
from ytdl_sub.validators.string_formatter_validators import (
|
||||||
|
OverridesIntegerFormatterValidator,
|
||||||
|
OverridesStringFormatterValidator,
|
||||||
|
StandardizedDateValidator,
|
||||||
|
StringFormatterValidator,
|
||||||
UnstructuredOverridesDictFormatterValidator,
|
UnstructuredOverridesDictFormatterValidator,
|
||||||
)
|
)
|
||||||
from ytdl_sub.validators.validators import BoolValidator
|
from ytdl_sub.validators.validators import BoolValidator
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from typing import Dict
|
from typing import Dict, Set, TypeVar
|
||||||
from typing import Set
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
|
|
@ -61,9 +59,9 @@ class ToggleableOptionsDictValidator(OptionsDictValidator):
|
||||||
_optional_keys = {"enable"}
|
_optional_keys = {"enable"}
|
||||||
|
|
||||||
def __init__(self, name, value):
|
def __init__(self, name, value):
|
||||||
assert (
|
assert "enable" in self._optional_keys, (
|
||||||
"enable" in self._optional_keys
|
f"{self.__class__.__name__} does not have enable as an optional field"
|
||||||
), f"{self.__class__.__name__} does not have enable as an optional field"
|
)
|
||||||
super().__init__(name, value)
|
super().__init__(name, value)
|
||||||
|
|
||||||
self._enable = self._validate_key(
|
self._enable = self._validate_key(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
from typing import Dict
|
from typing import Dict, List, Set
|
||||||
from typing import List
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.plugin_mapping import PluginMapping
|
from ytdl_sub.config.plugin.plugin_mapping import PluginMapping
|
||||||
|
|
@ -9,8 +7,7 @@ from ytdl_sub.config.plugin.preset_plugins import PresetPlugins
|
||||||
from ytdl_sub.config.preset_options import OutputOptions
|
from ytdl_sub.config.preset_options import OutputOptions
|
||||||
from ytdl_sub.config.validators.options import OptionsValidator
|
from ytdl_sub.config.validators.options import OptionsValidator
|
||||||
from ytdl_sub.downloaders.url.validators import MultiUrlValidator
|
from ytdl_sub.downloaders.url.validators import MultiUrlValidator
|
||||||
from ytdl_sub.entries.script.variable_definitions import UNRESOLVED_VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import UNRESOLVED_VARIABLES, VARIABLES
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
|
||||||
from ytdl_sub.script.script import Script
|
from ytdl_sub.script.script import Script
|
||||||
from ytdl_sub.script.utils.name_validation import is_function
|
from ytdl_sub.script.utils.name_validation import is_function
|
||||||
from ytdl_sub.utils.script import ScriptUtils
|
from ytdl_sub.utils.script import ScriptUtils
|
||||||
|
|
@ -47,7 +44,6 @@ class ResolutionLevel:
|
||||||
|
|
||||||
|
|
||||||
class VariableValidation:
|
class VariableValidation:
|
||||||
|
|
||||||
def _get_resolve_partial_filter(self) -> Set[str]:
|
def _get_resolve_partial_filter(self) -> Set[str]:
|
||||||
# Exclude sanitized variables from partial validation. This lessens the work
|
# Exclude sanitized variables from partial validation. This lessens the work
|
||||||
# and prevents double-evaluation, which can lead to bad behavior like double-prints.
|
# and prevents double-evaluation, which can lead to bad behavior like double-prints.
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,24 @@
|
||||||
import copy
|
import copy
|
||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict
|
from typing import Dict, Iterable, List, Optional
|
||||||
from typing import Iterable
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.validators.options import OptionsDictValidator
|
from ytdl_sub.config.validators.options import OptionsDictValidator
|
||||||
from ytdl_sub.downloaders.source_plugin import SourcePlugin
|
from ytdl_sub.downloaders.source_plugin import SourcePlugin
|
||||||
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLE_SCRIPTS
|
from ytdl_sub.entries.script.variable_definitions import (
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
VARIABLE_SCRIPTS,
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
VARIABLES,
|
||||||
|
VariableDefinitions,
|
||||||
|
)
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, get_file_extension
|
||||||
from ytdl_sub.utils.file_handler import get_file_extension
|
from ytdl_sub.ytdl_additions.enhanced_download_archive import (
|
||||||
from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadMapping
|
DownloadMapping,
|
||||||
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
EnhancedDownloadArchive,
|
||||||
|
)
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,9 @@
|
||||||
import abc
|
import abc
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from typing import Dict
|
from typing import Dict, Generic, Iterable, List, Optional, Type, final
|
||||||
from typing import Generic
|
|
||||||
from typing import Iterable
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import final
|
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.plugin import BasePlugin
|
from ytdl_sub.config.plugin.plugin import BasePlugin, Plugin
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
|
||||||
from ytdl_sub.config.validators.options import OptionsValidatorT
|
from ytdl_sub.config.validators.options import OptionsValidatorT
|
||||||
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,29 @@
|
||||||
import contextlib
|
import contextlib
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict
|
from typing import Dict, Iterable, Iterator, List, Optional, Set, Tuple
|
||||||
from typing import Iterable
|
|
||||||
from typing import Iterator
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
from typing import Tuple
|
|
||||||
|
|
||||||
from yt_dlp.utils import RejectedVideoReached
|
from yt_dlp.utils import RejectedVideoReached
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.downloaders.source_plugin import SourcePlugin
|
from ytdl_sub.downloaders.source_plugin import SourcePlugin, SourcePluginExtension
|
||||||
from ytdl_sub.downloaders.source_plugin import SourcePluginExtension
|
from ytdl_sub.downloaders.url.validators import (
|
||||||
from ytdl_sub.downloaders.url.validators import MultiUrlValidator
|
MultiUrlValidator,
|
||||||
from ytdl_sub.downloaders.url.validators import UrlThumbnailListValidator
|
UrlThumbnailListValidator,
|
||||||
from ytdl_sub.downloaders.url.validators import UrlValidator
|
UrlValidator,
|
||||||
|
)
|
||||||
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
||||||
from ytdl_sub.downloaders.ytdlp import YTDLP
|
from ytdl_sub.downloaders.ytdlp import YTDLP
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.entries.entry_parent import EntryParent
|
from ytdl_sub.entries.entry_parent import EntryParent
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
from ytdl_sub.utils.thumbnail import ThumbnailTypes
|
from ytdl_sub.utils.thumbnail import (
|
||||||
from ytdl_sub.utils.thumbnail import download_and_convert_url_thumbnail
|
ThumbnailTypes,
|
||||||
from ytdl_sub.utils.thumbnail import try_convert_download_thumbnail
|
download_and_convert_url_thumbnail,
|
||||||
|
try_convert_download_thumbnail,
|
||||||
|
)
|
||||||
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
@ -97,7 +93,6 @@ class UrlDownloaderThumbnailPlugin(UrlDownloaderBasePluginExtension):
|
||||||
|
|
||||||
# If latest entry, always update the thumbnail on each entry
|
# If latest entry, always update the thumbnail on each entry
|
||||||
if thumbnail_id == ThumbnailTypes.LATEST_ENTRY:
|
if thumbnail_id == ThumbnailTypes.LATEST_ENTRY:
|
||||||
|
|
||||||
# always save in dry-run even if it doesn't exist...
|
# always save in dry-run even if it doesn't exist...
|
||||||
if self.is_dry_run or entry.is_thumbnail_downloaded():
|
if self.is_dry_run or entry.is_thumbnail_downloaded():
|
||||||
self.save_file(
|
self.save_file(
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,16 @@
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Optional, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.config.preset_options import YTDLOptions
|
from ytdl_sub.config.preset_options import YTDLOptions
|
||||||
from ytdl_sub.config.validators.options import OptionsValidator
|
from ytdl_sub.config.validators.options import OptionsValidator
|
||||||
from ytdl_sub.script.parser import parse
|
from ytdl_sub.script.parser import parse
|
||||||
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
||||||
from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import (
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesBooleanFormatterValidator
|
DictFormatterValidator,
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesStringFormatterValidator
|
OverridesBooleanFormatterValidator,
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
OverridesStringFormatterValidator,
|
||||||
|
StringFormatterValidator,
|
||||||
|
)
|
||||||
from ytdl_sub.validators.validators import ListValidator
|
from ytdl_sub.validators.validators import ListValidator
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import copy
|
import copy
|
||||||
from typing import Dict
|
from typing import Dict, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
import mergedeep
|
import mergedeep
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,15 +5,10 @@ import os
|
||||||
import time
|
import time
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Callable
|
from typing import Callable, Dict, List, Optional
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
import yt_dlp as ytdl
|
import yt_dlp as ytdl
|
||||||
from yt_dlp.utils import ExistingVideoReached
|
from yt_dlp.utils import ExistingVideoReached, MaxDownloadsReached, RejectedVideoReached
|
||||||
from yt_dlp.utils import MaxDownloadsReached
|
|
||||||
from yt_dlp.utils import RejectedVideoReached
|
|
||||||
|
|
||||||
from ytdl_sub.thread.log_entries_downloaded_listener import LogEntriesDownloadedListener
|
from ytdl_sub.thread.log_entries_downloaded_listener import LogEntriesDownloadedListener
|
||||||
from ytdl_sub.utils.exceptions import FileNotDownloadedException
|
from ytdl_sub.utils.exceptions import FileNotDownloadedException
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,11 @@
|
||||||
# pylint: disable=protected-access
|
# pylint: disable=protected-access
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Dict, Optional, Type, TypeVar, final
|
||||||
from typing import Dict
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
from typing import final
|
|
||||||
|
|
||||||
from yt_dlp.utils import LazyList
|
from yt_dlp.utils import LazyList, sanitize_filename
|
||||||
from yt_dlp.utils import sanitize_filename
|
|
||||||
|
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,24 +3,15 @@ import copy
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Dict, Optional, Type, TypeVar, final
|
||||||
from typing import Dict
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
from typing import final
|
|
||||||
|
|
||||||
from ytdl_sub.entries.base_entry import BaseEntry
|
from ytdl_sub.entries.base_entry import BaseEntry
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
from ytdl_sub.entries.script.variable_types import ArrayVariable, StringVariable, Variable
|
||||||
from ytdl_sub.entries.script.variable_types import ArrayVariable
|
|
||||||
from ytdl_sub.entries.script.variable_types import StringVariable
|
|
||||||
from ytdl_sub.entries.script.variable_types import Variable
|
|
||||||
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
|
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
|
||||||
from ytdl_sub.utils.script import ScriptUtils
|
from ytdl_sub.utils.script import ScriptUtils
|
||||||
from ytdl_sub.utils.scriptable import Scriptable
|
from ytdl_sub.utils.scriptable import Scriptable
|
||||||
from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_EXTS
|
from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_EXTS, VIDEO_CODEC_EXTS
|
||||||
from ytdl_sub.validators.audo_codec_validator import VIDEO_CODEC_EXTS
|
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,10 @@
|
||||||
import math
|
import math
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Optional, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from ytdl_sub.entries.base_entry import BaseEntry
|
from ytdl_sub.entries.base_entry import BaseEntry, BaseEntryT
|
||||||
from ytdl_sub.entries.base_entry import BaseEntryT
|
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
from ytdl_sub.entries.script.variable_types import MetadataVariable
|
from ytdl_sub.entries.script.variable_types import MetadataVariable
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,7 @@ from yt_dlp.utils import sanitize_filename
|
||||||
|
|
||||||
from ytdl_sub.script.functions import Functions
|
from ytdl_sub.script.functions import Functions
|
||||||
from ytdl_sub.script.types.map import Map
|
from ytdl_sub.script.types.map import Map
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import AnyArgument, Integer, ReturnableArgument, String
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import ReturnableArgument
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
from ytdl_sub.script.utils.exceptions import RuntimeException
|
from ytdl_sub.script.utils.exceptions import RuntimeException
|
||||||
from ytdl_sub.utils.file_path import FilePathTruncater
|
from ytdl_sub.utils.file_path import FilePathTruncater
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from functools import cache
|
from functools import cache, cached_property
|
||||||
from functools import cached_property
|
from typing import Dict, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.entries.script.custom_functions import CustomFunctions
|
from ytdl_sub.entries.script.custom_functions import CustomFunctions
|
||||||
from ytdl_sub.entries.script.variable_types import ArrayMetadataVariable
|
from ytdl_sub.entries.script.variable_types import (
|
||||||
from ytdl_sub.entries.script.variable_types import IntegerMetadataVariable
|
ArrayMetadataVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import IntegerVariable
|
IntegerMetadataVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import MapMetadataVariable
|
IntegerVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import MapVariable
|
MapMetadataVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import MetadataVariable
|
MapVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import StringDateMetadataVariable
|
MetadataVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import StringDateVariable
|
StringDateMetadataVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import StringMetadataVariable
|
StringDateVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import StringVariable
|
StringMetadataVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import Variable
|
StringVariable,
|
||||||
|
Variable,
|
||||||
|
)
|
||||||
|
|
||||||
# This file contains mixins to a BaseEntry subclass. Ignore pylint's "no kwargs member" suggestion
|
# This file contains mixins to a BaseEntry subclass. Ignore pylint's "no kwargs member" suggestion
|
||||||
# pylint: disable=no-member
|
# pylint: disable=no-member
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,10 @@
|
||||||
from abc import ABC
|
from abc import ABC, abstractmethod
|
||||||
from abc import abstractmethod
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional, Type, TypeVar
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array
|
||||||
from ytdl_sub.script.types.map import Map
|
from ytdl_sub.script.types.map import Map
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
from ytdl_sub.script.types.resolvable import Boolean, Integer, String
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
|
|
||||||
ENTRY_METADATA_VARIABLE_NAME = "entry_metadata"
|
ENTRY_METADATA_VARIABLE_NAME = "entry_metadata"
|
||||||
PLAYLIST_METADATA_VARIABLE_NAME = "playlist_metadata"
|
PLAYLIST_METADATA_VARIABLE_NAME = "playlist_metadata"
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
from typing import Dict
|
from typing import Dict, Set
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.entries.script.function_scripts import CUSTOM_FUNCTION_SCRIPTS
|
from ytdl_sub.entries.script.function_scripts import CUSTOM_FUNCTION_SCRIPTS
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLE_SCRIPTS
|
from ytdl_sub.entries.script.variable_definitions import VARIABLE_SCRIPTS
|
||||||
from ytdl_sub.entries.script.variable_types import ArrayVariable
|
from ytdl_sub.entries.script.variable_types import (
|
||||||
from ytdl_sub.entries.script.variable_types import BooleanVariable
|
ArrayVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import MapVariable
|
BooleanVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import StringVariable
|
MapVariable,
|
||||||
from ytdl_sub.entries.script.variable_types import Variable
|
StringVariable,
|
||||||
|
Variable,
|
||||||
|
)
|
||||||
from ytdl_sub.script.functions import Functions
|
from ytdl_sub.script.functions import Functions
|
||||||
from ytdl_sub.script.utils.name_validation import is_valid_name
|
from ytdl_sub.script.utils.name_validation import is_valid_name
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,19 @@
|
||||||
import os.path
|
import os.path
|
||||||
from typing import Any
|
from typing import Any, Dict, Optional, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
||||||
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
from ytdl_sub.utils.exceptions import FileNotDownloadedException
|
from ytdl_sub.utils.exceptions import FileNotDownloadedException
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
from ytdl_sub.utils.file_handler import FileMetadata
|
||||||
from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_EXTS
|
from ytdl_sub.validators.audo_codec_validator import (
|
||||||
from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_TYPES_EXTENSION_MAPPING
|
AUDIO_CODEC_EXTS,
|
||||||
from ytdl_sub.validators.audo_codec_validator import AudioTypeValidator
|
AUDIO_CODEC_TYPES_EXTENSION_MAPPING,
|
||||||
|
AudioTypeValidator,
|
||||||
|
)
|
||||||
from ytdl_sub.validators.validators import FloatValidator
|
from ytdl_sub.validators.validators import FloatValidator
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,23 @@
|
||||||
import collections
|
import collections
|
||||||
import re
|
import re
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional, Set
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
||||||
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import (
|
||||||
from ytdl_sub.entries.entry import ytdl_sub_chapters_from_comments
|
Entry,
|
||||||
from ytdl_sub.entries.entry import ytdl_sub_split_by_chapters_parent_uid
|
ytdl_sub_chapters_from_comments,
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
ytdl_sub_split_by_chapters_parent_uid,
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
)
|
||||||
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.utils.chapters import Chapters
|
from ytdl_sub.utils.chapters import Chapters
|
||||||
from ytdl_sub.utils.ffmpeg import set_ffmpeg_metadata_chapters
|
from ytdl_sub.utils.ffmpeg import set_ffmpeg_metadata_chapters
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
from ytdl_sub.utils.file_handler import FileMetadata
|
||||||
from ytdl_sub.validators.regex_validator import RegexListValidator
|
from ytdl_sub.validators.regex_validator import RegexListValidator
|
||||||
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, ListValidator
|
||||||
from ytdl_sub.validators.validators import ListValidator
|
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
from typing import List
|
from typing import List, Optional, Set, Tuple
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
from typing import Tuple
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
import mediafile
|
import mediafile
|
||||||
|
|
||||||
|
|
@ -7,8 +6,7 @@ from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.validators.options import OptionsValidator
|
from ytdl_sub.config.validators.options import OptionsValidator
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.utils.ffmpeg import FFMPEG
|
from ytdl_sub.utils.ffmpeg import FFMPEG
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, 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.audo_codec_validator import AUDIO_CODEC_EXTS
|
from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_EXTS
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesBooleanFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import OverridesBooleanFormatterValidator
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,16 @@
|
||||||
import os
|
import os
|
||||||
from subprocess import CalledProcessError
|
from subprocess import CalledProcessError
|
||||||
from typing import Any
|
from typing import Any, Dict, Optional, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
from ytdl_sub.utils.exceptions import FileNotDownloadedException, ValidationException
|
||||||
from ytdl_sub.utils.exceptions import FileNotDownloadedException
|
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
|
||||||
from ytdl_sub.utils.ffmpeg import FFMPEG
|
from ytdl_sub.utils.ffmpeg import FFMPEG
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, FileMetadata
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
|
||||||
from ytdl_sub.validators.audo_codec_validator import FileTypeValidator
|
from ytdl_sub.validators.audo_codec_validator import FileTypeValidator
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesStringFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import OverridesStringFormatterValidator
|
||||||
from ytdl_sub.validators.string_select_validator import StringSelectValidator
|
from ytdl_sub.validators.string_select_validator import StringSelectValidator
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from typing import Dict
|
from typing import Dict, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from typing import Dict
|
from typing import Dict, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from typing import Dict
|
from typing import Dict, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.validators.options import OptionsValidator
|
from ytdl_sub.config.validators.options import OptionsValidator
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
import copy
|
import copy
|
||||||
from typing import Any
|
from typing import Any, List, Tuple
|
||||||
from typing import List
|
|
||||||
from typing import Tuple
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,21 @@
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Any
|
from typing import Any, Dict, List
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
import mediafile
|
import mediafile
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.validators.options import OptionsDictValidator
|
from ytdl_sub.config.validators.options import OptionsDictValidator
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
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.audo_codec_validator import AUDIO_CODEC_EXTS
|
from ytdl_sub.validators.audo_codec_validator import AUDIO_CODEC_EXTS
|
||||||
from ytdl_sub.validators.string_formatter_validators import ListFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import (
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
ListFormatterValidator,
|
||||||
|
StringFormatterValidator,
|
||||||
|
)
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
||||||
|
|
@ -147,8 +146,7 @@ class MusicTagsPlugin(Plugin[MusicTagsOptions]):
|
||||||
else:
|
else:
|
||||||
if len(tag_value) > 1:
|
if len(tag_value) > 1:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
"Music tag '%s' does not support lists. "
|
"Music tag '%s' does not support lists. Only setting the first element",
|
||||||
"Only setting the first element",
|
|
||||||
tag_name,
|
tag_name,
|
||||||
)
|
)
|
||||||
setattr(audio_file, tag_name, tag_value[0])
|
setattr(audio_file, tag_name, tag_value[0])
|
||||||
|
|
|
||||||
|
|
@ -2,24 +2,25 @@ import os
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Dict, List
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, FileMetadata
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
from ytdl_sub.utils.xml import (
|
||||||
from ytdl_sub.utils.xml import XmlElement
|
XmlElement,
|
||||||
from ytdl_sub.utils.xml import to_max_3_byte_utf8_dict
|
to_max_3_byte_utf8_dict,
|
||||||
from ytdl_sub.utils.xml import to_max_3_byte_utf8_string
|
to_max_3_byte_utf8_string,
|
||||||
from ytdl_sub.utils.xml import to_xml
|
to_xml,
|
||||||
|
)
|
||||||
from ytdl_sub.validators.file_path_validators import StringFormatterFileNameValidator
|
from ytdl_sub.validators.file_path_validators import StringFormatterFileNameValidator
|
||||||
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 (
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesBooleanFormatterValidator
|
DictFormatterValidator,
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
OverridesBooleanFormatterValidator,
|
||||||
|
StringFormatterValidator,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SharedNfoTagsOptions(ToggleableOptionsDictValidator):
|
class SharedNfoTagsOptions(ToggleableOptionsDictValidator):
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.plugins.nfo_tags import NfoTagsValidator
|
from ytdl_sub.plugins.nfo_tags import NfoTagsValidator, SharedNfoTagsOptions, SharedNfoTagsPlugin
|
||||||
from ytdl_sub.plugins.nfo_tags import SharedNfoTagsOptions
|
|
||||||
from ytdl_sub.plugins.nfo_tags import SharedNfoTagsPlugin
|
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
||||||
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,14 @@
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Optional, Set, Tuple
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
from typing import Tuple
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import SplitPlugin
|
from ytdl_sub.config.plugin.plugin import SplitPlugin
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.config.validators.options import OptionsDictValidator
|
from ytdl_sub.config.validators.options import OptionsDictValidator
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry, ytdl_sub_split_by_chapters_parent_uid
|
||||||
from ytdl_sub.entries.entry import ytdl_sub_split_by_chapters_parent_uid
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.utils.chapters import Chapters, Timestamp
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
from ytdl_sub.utils.chapters import Chapters
|
|
||||||
from ytdl_sub.utils.chapters import Timestamp
|
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
from ytdl_sub.utils.ffmpeg import FFMPEG
|
from ytdl_sub.utils.ffmpeg import FFMPEG
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, FileMetadata
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
|
||||||
from ytdl_sub.validators.string_select_validator import StringSelectValidator
|
from ytdl_sub.validators.string_select_validator import StringSelectValidator
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,10 @@
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.validators.options import OptionsValidator
|
from ytdl_sub.config.validators.options import OptionsValidator
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.utils.ffmpeg import FFMPEG
|
from ytdl_sub.utils.ffmpeg import FFMPEG
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, 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.string_formatter_validators import OverridesBooleanFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import OverridesBooleanFormatterValidator
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.plugins.nfo_tags import NfoTagsValidator
|
from ytdl_sub.plugins.nfo_tags import NfoTagsValidator, SharedNfoTagsOptions, SharedNfoTagsPlugin
|
||||||
from ytdl_sub.plugins.nfo_tags import SharedNfoTagsOptions
|
|
||||||
from ytdl_sub.plugins.nfo_tags import SharedNfoTagsPlugin
|
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,21 @@
|
||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional, Set, Tuple
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
from typing import Tuple
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
|
||||||
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
from ytdl_sub.script.utils.exceptions import UserThrownRuntimeError
|
from ytdl_sub.script.utils.exceptions import UserThrownRuntimeError
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, 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.utils.subtitles import SUBTITLE_EXTENSIONS
|
from ytdl_sub.utils.subtitles import SUBTITLE_EXTENSIONS
|
||||||
from ytdl_sub.validators.file_path_validators import StringFormatterFileNameValidator
|
from ytdl_sub.validators.file_path_validators import StringFormatterFileNameValidator
|
||||||
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, StringListValidator
|
||||||
from ytdl_sub.validators.validators import StringListValidator
|
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,7 @@
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from typing import Dict
|
from typing import Dict, Optional, Type, TypeVar
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin
|
||||||
|
|
@ -13,8 +10,10 @@ from ytdl_sub.entries.entry import Entry
|
||||||
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.strict_dict_validator import StrictDictValidator
|
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
||||||
from ytdl_sub.validators.string_formatter_validators import FloatFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import (
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesFloatFormatterValidator
|
FloatFormatterValidator,
|
||||||
|
OverridesFloatFormatterValidator,
|
||||||
|
)
|
||||||
from ytdl_sub.validators.validators import ProbabilityValidator
|
from ytdl_sub.validators.validators import ProbabilityValidator
|
||||||
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
import os
|
import os
|
||||||
import pathlib
|
import pathlib
|
||||||
from typing import Any
|
from typing import Any, Dict, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
import mergedeep
|
import mergedeep
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from ytdl_sub.prebuilt_presets import PrebuiltPresets
|
from ytdl_sub.prebuilt_presets import PrebuiltPresets, get_prebuilt_preset_package_name
|
||||||
from ytdl_sub.prebuilt_presets import get_prebuilt_preset_package_name
|
|
||||||
|
|
||||||
PREBUILT_PRESET_PACKAGE_NAME = get_prebuilt_preset_package_name(__file__)
|
PREBUILT_PRESET_PACKAGE_NAME = get_prebuilt_preset_package_name(__file__)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from ytdl_sub.prebuilt_presets import PrebuiltPresets
|
from ytdl_sub.prebuilt_presets import PrebuiltPresets, get_prebuilt_preset_package_name
|
||||||
from ytdl_sub.prebuilt_presets import get_prebuilt_preset_package_name
|
|
||||||
|
|
||||||
PREBUILT_PRESET_PACKAGE_NAME = get_prebuilt_preset_package_name(__file__)
|
PREBUILT_PRESET_PACKAGE_NAME = get_prebuilt_preset_package_name(__file__)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from ytdl_sub.prebuilt_presets import PrebuiltPresets
|
from ytdl_sub.prebuilt_presets import PrebuiltPresets, get_prebuilt_preset_package_name
|
||||||
from ytdl_sub.prebuilt_presets import get_prebuilt_preset_package_name
|
|
||||||
|
|
||||||
PREBUILT_PRESET_PACKAGE_NAME = get_prebuilt_preset_package_name(__file__)
|
PREBUILT_PRESET_PACKAGE_NAME = get_prebuilt_preset_package_name(__file__)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from typing import Callable
|
from typing import Callable, Dict
|
||||||
from typing import Dict
|
|
||||||
|
|
||||||
from ytdl_sub.script.functions.array_functions import ArrayFunctions
|
from ytdl_sub.script.functions.array_functions import ArrayFunctions
|
||||||
from ytdl_sub.script.functions.boolean_functions import BooleanFunctions
|
from ytdl_sub.script.functions.boolean_functions import BooleanFunctions
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,21 @@
|
||||||
import itertools
|
import itertools
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
AnyArgument,
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
Boolean,
|
||||||
from ytdl_sub.script.types.resolvable import Lambda
|
Integer,
|
||||||
from ytdl_sub.script.types.resolvable import LambdaReduce
|
Lambda,
|
||||||
from ytdl_sub.script.types.resolvable import LambdaTwo
|
LambdaReduce,
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
LambdaTwo,
|
||||||
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
Resolvable,
|
||||||
from ytdl_sub.script.utils.exceptions import ArrayValueDoesNotExist
|
)
|
||||||
from ytdl_sub.script.utils.exceptions import FunctionRuntimeException
|
from ytdl_sub.script.utils.exceptions import (
|
||||||
|
UNREACHABLE,
|
||||||
|
ArrayValueDoesNotExist,
|
||||||
|
FunctionRuntimeException,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ArrayFunctions:
|
class ArrayFunctions:
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,6 @@
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array
|
||||||
from ytdl_sub.script.types.map import Map
|
from ytdl_sub.script.types.map import Map
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import AnyArgument, Boolean, Float, Integer, String
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
|
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
AnyArgument,
|
||||||
from ytdl_sub.script.types.resolvable import ReturnableArgumentA
|
Boolean,
|
||||||
from ytdl_sub.script.types.resolvable import ReturnableArgumentB
|
ReturnableArgumentA,
|
||||||
|
ReturnableArgumentB,
|
||||||
|
)
|
||||||
from ytdl_sub.script.utils.exceptions import FunctionRuntimeException
|
from ytdl_sub.script.utils.exceptions import FunctionRuntimeException
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
from ytdl_sub.script.types.resolvable import Integer, String
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
|
|
||||||
|
|
||||||
class DateFunctions:
|
class DateFunctions:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,4 @@
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import AnyArgument, ReturnableArgument, String
|
||||||
from ytdl_sub.script.types.resolvable import ReturnableArgument
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
from ytdl_sub.script.utils.exceptions import UserThrownRuntimeError
|
from ytdl_sub.script.utils.exceptions import UserThrownRuntimeError
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,12 +3,14 @@ from typing import Any
|
||||||
|
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array
|
||||||
from ytdl_sub.script.types.map import Map
|
from ytdl_sub.script.types.map import Map
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
AnyArgument,
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
Boolean,
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
Float,
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
Integer,
|
||||||
from ytdl_sub.script.types.resolvable import String
|
Resolvable,
|
||||||
|
String,
|
||||||
|
)
|
||||||
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,21 @@
|
||||||
from typing import Dict
|
from typing import Dict, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array
|
||||||
from ytdl_sub.script.types.map import Map
|
from ytdl_sub.script.types.map import Map
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
AnyArgument,
|
||||||
from ytdl_sub.script.types.resolvable import Hashable
|
Boolean,
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
Hashable,
|
||||||
from ytdl_sub.script.types.resolvable import LambdaThree
|
Integer,
|
||||||
from ytdl_sub.script.types.resolvable import LambdaTwo
|
LambdaThree,
|
||||||
from ytdl_sub.script.types.resolvable import String
|
LambdaTwo,
|
||||||
from ytdl_sub.script.utils.exceptions import FunctionRuntimeException
|
String,
|
||||||
from ytdl_sub.script.utils.exceptions import KeyDoesNotExistRuntimeException
|
)
|
||||||
from ytdl_sub.script.utils.exceptions import KeyNotHashableRuntimeException
|
from ytdl_sub.script.utils.exceptions import (
|
||||||
|
FunctionRuntimeException,
|
||||||
|
KeyDoesNotExistRuntimeException,
|
||||||
|
KeyNotHashableRuntimeException,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class MapFunctions:
|
class MapFunctions:
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,7 @@ import math
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import AnyArgument, Float, Integer, Numeric
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import Numeric
|
|
||||||
|
|
||||||
|
|
||||||
def _to_numeric(value: int | float) -> Numeric:
|
def _to_numeric(value: int | float) -> Numeric:
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import AnyArgument, Integer, ReturnableArgument
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import ReturnableArgument
|
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
|
|
||||||
logger = Logger.get(name="preset")
|
logger = Logger.get(name="preset")
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,9 @@
|
||||||
import re
|
import re
|
||||||
from typing import AnyStr
|
from typing import AnyStr, List, Match, Optional
|
||||||
from typing import List
|
|
||||||
from typing import Match
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.script.functions.array_functions import ArrayFunctions
|
from ytdl_sub.script.functions.array_functions import ArrayFunctions
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
from ytdl_sub.script.types.resolvable import Boolean, Float, Integer, String
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
from ytdl_sub.script.utils.exceptions import FunctionRuntimeException
|
from ytdl_sub.script.utils.exceptions import FunctionRuntimeException
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,7 @@
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array
|
||||||
from ytdl_sub.script.types.resolvable import AnyArgument
|
from ytdl_sub.script.types.resolvable import AnyArgument, Boolean, Float, Integer, Numeric, String
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import Numeric
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
|
|
||||||
|
|
||||||
class StringFunctions:
|
class StringFunctions:
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,31 @@
|
||||||
import json
|
import json
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional, Set
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.script.functions import Functions
|
from ytdl_sub.script.functions import Functions
|
||||||
from ytdl_sub.script.types.array import UnresolvedArray
|
from ytdl_sub.script.types.array import UnresolvedArray
|
||||||
from ytdl_sub.script.types.function import Argument
|
from ytdl_sub.script.types.function import Argument, BuiltInFunction, CustomFunction, Function
|
||||||
from ytdl_sub.script.types.function import BuiltInFunction
|
|
||||||
from ytdl_sub.script.types.function import CustomFunction
|
|
||||||
from ytdl_sub.script.types.function import Function
|
|
||||||
from ytdl_sub.script.types.map import UnresolvedMap
|
from ytdl_sub.script.types.map import UnresolvedMap
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
from ytdl_sub.script.types.resolvable import Boolean, Float, Integer, Lambda, NonHashable, String
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import Lambda
|
|
||||||
from ytdl_sub.script.types.resolvable import NonHashable
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
||||||
from ytdl_sub.script.types.variable import FunctionArgument
|
from ytdl_sub.script.types.variable import FunctionArgument, Variable
|
||||||
from ytdl_sub.script.types.variable import Variable
|
|
||||||
from ytdl_sub.script.utils.exception_formatters import ParserExceptionFormatter
|
from ytdl_sub.script.utils.exception_formatters import ParserExceptionFormatter
|
||||||
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
from ytdl_sub.script.utils.exceptions import (
|
||||||
from ytdl_sub.script.utils.exceptions import CycleDetected
|
UNREACHABLE,
|
||||||
from ytdl_sub.script.utils.exceptions import FunctionDoesNotExist
|
CycleDetected,
|
||||||
from ytdl_sub.script.utils.exceptions import IncompatibleFunctionArguments
|
FunctionDoesNotExist,
|
||||||
from ytdl_sub.script.utils.exceptions import InvalidCustomFunctionArgumentName
|
IncompatibleFunctionArguments,
|
||||||
from ytdl_sub.script.utils.exceptions import InvalidSyntaxException
|
InvalidCustomFunctionArgumentName,
|
||||||
from ytdl_sub.script.utils.exceptions import InvalidVariableName
|
InvalidSyntaxException,
|
||||||
from ytdl_sub.script.utils.exceptions import UserException
|
InvalidVariableName,
|
||||||
from ytdl_sub.script.utils.exceptions import VariableDoesNotExist
|
UserException,
|
||||||
from ytdl_sub.script.utils.name_validation import is_function
|
VariableDoesNotExist,
|
||||||
from ytdl_sub.script.utils.name_validation import to_function_name
|
)
|
||||||
from ytdl_sub.script.utils.name_validation import validate_variable_name
|
from ytdl_sub.script.utils.name_validation import (
|
||||||
|
is_function,
|
||||||
|
to_function_name,
|
||||||
|
validate_variable_name,
|
||||||
|
)
|
||||||
|
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
# pylint: disable=too-many-branches
|
# pylint: disable=too-many-branches
|
||||||
|
|
@ -580,7 +572,6 @@ class _Parser:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _parse(self) -> SyntaxTree:
|
def _parse(self) -> SyntaxTree:
|
||||||
|
|
||||||
while ch := self._read():
|
while ch := self._read():
|
||||||
continue_parse = self._parse_main_loop(ch)
|
continue_parse = self._parse_main_loop(ch)
|
||||||
if not continue_parse:
|
if not continue_parse:
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,28 @@
|
||||||
# pylint: disable=missing-raises-doc
|
# pylint: disable=missing-raises-doc
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional, Set
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.script.functions import Functions
|
from ytdl_sub.script.functions import Functions
|
||||||
from ytdl_sub.script.parser import parse
|
from ytdl_sub.script.parser import parse
|
||||||
from ytdl_sub.script.script_output import ScriptOutput
|
from ytdl_sub.script.script_output import ScriptOutput
|
||||||
from ytdl_sub.script.types.resolvable import Argument
|
from ytdl_sub.script.types.resolvable import Argument, BuiltInFunctionType, Lambda, Resolvable
|
||||||
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
|
from ytdl_sub.script.types.syntax_tree import ResolvedSyntaxTree, SyntaxTree
|
||||||
from ytdl_sub.script.types.resolvable import Lambda
|
from ytdl_sub.script.types.variable import FunctionArgument, Variable
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
|
||||||
from ytdl_sub.script.types.syntax_tree import ResolvedSyntaxTree
|
|
||||||
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
|
||||||
from ytdl_sub.script.types.variable import FunctionArgument
|
|
||||||
from ytdl_sub.script.types.variable import Variable
|
|
||||||
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
||||||
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
from ytdl_sub.script.utils.exceptions import (
|
||||||
from ytdl_sub.script.utils.exceptions import CycleDetected
|
UNREACHABLE,
|
||||||
from ytdl_sub.script.utils.exceptions import IncompatibleFunctionArguments
|
CycleDetected,
|
||||||
from ytdl_sub.script.utils.exceptions import InvalidCustomFunctionArguments
|
IncompatibleFunctionArguments,
|
||||||
from ytdl_sub.script.utils.exceptions import RuntimeException
|
InvalidCustomFunctionArguments,
|
||||||
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
|
RuntimeException,
|
||||||
from ytdl_sub.script.utils.name_validation import is_function
|
ScriptVariableNotResolved,
|
||||||
from ytdl_sub.script.utils.name_validation import to_function_definition_name
|
)
|
||||||
from ytdl_sub.script.utils.name_validation import to_function_name
|
from ytdl_sub.script.utils.name_validation import (
|
||||||
from ytdl_sub.script.utils.name_validation import validate_variable_name
|
is_function,
|
||||||
|
to_function_definition_name,
|
||||||
|
to_function_name,
|
||||||
|
validate_variable_name,
|
||||||
|
)
|
||||||
from ytdl_sub.script.utils.type_checking import FunctionSpec
|
from ytdl_sub.script.utils.type_checking import FunctionSpec
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -737,7 +733,6 @@ class Script:
|
||||||
|
|
||||||
partially_resolved = True
|
partially_resolved = True
|
||||||
while partially_resolved:
|
while partially_resolved:
|
||||||
|
|
||||||
partially_resolved = False
|
partially_resolved = False
|
||||||
|
|
||||||
for variable in list(to_partially_resolve):
|
for variable in list(to_partially_resolve):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
from typing import Any, Dict
|
||||||
from typing import Dict
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
from ytdl_sub.script.types.resolvable import Resolvable
|
||||||
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
|
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,14 @@
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Type
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import Argument
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import FutureResolvable
|
Argument,
|
||||||
from ytdl_sub.script.types.resolvable import NonHashable
|
FutureResolvable,
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
NonHashable,
|
||||||
from ytdl_sub.script.types.resolvable import ResolvableToJson
|
Resolvable,
|
||||||
|
ResolvableToJson,
|
||||||
|
)
|
||||||
from ytdl_sub.script.types.variable import Variable
|
from ytdl_sub.script.types.variable import Variable
|
||||||
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,38 +1,34 @@
|
||||||
import functools
|
import functools
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Callable
|
from typing import Callable, Dict, List, Optional, Type, Union
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from ytdl_sub.script.functions import Functions
|
from ytdl_sub.script.functions import Functions
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array, UnresolvedArray
|
||||||
from ytdl_sub.script.types.array import UnresolvedArray
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import Argument
|
Argument,
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
Boolean,
|
||||||
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
|
BuiltInFunctionType,
|
||||||
from ytdl_sub.script.types.resolvable import FunctionType
|
FunctionType,
|
||||||
from ytdl_sub.script.types.resolvable import FutureResolvable
|
FutureResolvable,
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
Integer,
|
||||||
from ytdl_sub.script.types.resolvable import Lambda
|
Lambda,
|
||||||
from ytdl_sub.script.types.resolvable import NamedCustomFunction
|
NamedCustomFunction,
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
Resolvable,
|
||||||
from ytdl_sub.script.types.resolvable import ReturnableArgument
|
ReturnableArgument,
|
||||||
from ytdl_sub.script.types.resolvable import ReturnableArgumentA
|
ReturnableArgumentA,
|
||||||
from ytdl_sub.script.types.resolvable import ReturnableArgumentB
|
ReturnableArgumentB,
|
||||||
from ytdl_sub.script.types.variable import FunctionArgument
|
)
|
||||||
from ytdl_sub.script.types.variable import Variable
|
from ytdl_sub.script.types.variable import FunctionArgument, Variable
|
||||||
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
||||||
from ytdl_sub.script.utils.exception_formatters import FunctionArgumentsExceptionFormatter
|
from ytdl_sub.script.utils.exception_formatters import FunctionArgumentsExceptionFormatter
|
||||||
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
from ytdl_sub.script.utils.exceptions import (
|
||||||
from ytdl_sub.script.utils.exceptions import FunctionRuntimeException
|
UNREACHABLE,
|
||||||
from ytdl_sub.script.utils.exceptions import RuntimeException
|
FunctionRuntimeException,
|
||||||
from ytdl_sub.script.utils.exceptions import UserThrownRuntimeError
|
RuntimeException,
|
||||||
from ytdl_sub.script.utils.type_checking import FunctionSpec
|
UserThrownRuntimeError,
|
||||||
from ytdl_sub.script.utils.type_checking import is_union
|
)
|
||||||
|
from ytdl_sub.script.utils.type_checking import FunctionSpec, is_union
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,16 @@
|
||||||
import itertools
|
import itertools
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Type
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import Argument
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import FutureResolvable
|
Argument,
|
||||||
from ytdl_sub.script.types.resolvable import Hashable
|
FutureResolvable,
|
||||||
from ytdl_sub.script.types.resolvable import NonHashable
|
Hashable,
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
NonHashable,
|
||||||
from ytdl_sub.script.types.resolvable import ResolvableToJson
|
Resolvable,
|
||||||
|
ResolvableToJson,
|
||||||
|
)
|
||||||
from ytdl_sub.script.types.variable import Variable
|
from ytdl_sub.script.types.variable import Variable
|
||||||
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
||||||
from ytdl_sub.script.utils.exceptions import KeyNotHashableRuntimeException
|
from ytdl_sub.script.utils.exceptions import KeyNotHashableRuntimeException
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,7 @@
|
||||||
import json
|
import json
|
||||||
from abc import ABC
|
from abc import ABC, abstractmethod
|
||||||
from abc import abstractmethod
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
from typing import Any, Generic, List, Type, TypeVar
|
||||||
from typing import Generic
|
|
||||||
from typing import List
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
NumericT = TypeVar("NumericT", bound=int | float)
|
NumericT = TypeVar("NumericT", bound=int | float)
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,8 @@
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.function import BuiltInFunction
|
from ytdl_sub.script.types.function import BuiltInFunction
|
||||||
from ytdl_sub.script.types.resolvable import Argument
|
from ytdl_sub.script.types.resolvable import Argument, Resolvable, String
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
from ytdl_sub.script.types.variable import Variable
|
from ytdl_sub.script.types.variable import Variable
|
||||||
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
from ytdl_sub.script.types.variable_dependency import VariableDependency
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,17 @@
|
||||||
from abc import ABC
|
from abc import ABC, abstractmethod
|
||||||
from abc import abstractmethod
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Dict
|
from typing import Dict, Iterable, List, Set, Tuple, Type, TypeVar, final
|
||||||
from typing import Iterable
|
|
||||||
from typing import List
|
|
||||||
from typing import Set
|
|
||||||
from typing import Tuple
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
from typing import final
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import Argument
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
|
Argument,
|
||||||
from ytdl_sub.script.types.resolvable import FunctionType
|
BuiltInFunctionType,
|
||||||
from ytdl_sub.script.types.resolvable import Lambda
|
FunctionType,
|
||||||
from ytdl_sub.script.types.resolvable import NamedCustomFunction
|
Lambda,
|
||||||
from ytdl_sub.script.types.resolvable import ParsedCustomFunction
|
NamedCustomFunction,
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
ParsedCustomFunction,
|
||||||
from ytdl_sub.script.types.variable import FunctionArgument
|
Resolvable,
|
||||||
from ytdl_sub.script.types.variable import Variable
|
)
|
||||||
|
from ytdl_sub.script.types.variable import FunctionArgument, Variable
|
||||||
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
||||||
|
|
||||||
TypeT = TypeVar("TypeT")
|
TypeT = TypeVar("TypeT")
|
||||||
|
|
@ -44,7 +37,7 @@ class VariableDependency(ABC):
|
||||||
output.append(arg)
|
output.append(arg)
|
||||||
elif instance and isinstance(arg, ttype):
|
elif instance and isinstance(arg, ttype):
|
||||||
output.append(arg)
|
output.append(arg)
|
||||||
elif type(arg) == ttype: # pylint: disable=unidiomatic-typecheck
|
elif type(arg) is ttype: # pylint: disable=unidiomatic-typecheck
|
||||||
output.append(arg)
|
output.append(arg)
|
||||||
|
|
||||||
if isinstance(arg, VariableDependency):
|
if isinstance(arg, VariableDependency):
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,9 @@
|
||||||
import sys
|
import sys
|
||||||
from typing import List
|
from typing import List, TypeVar
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
|
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
|
||||||
from ytdl_sub.script.utils.exceptions import IncompatibleFunctionArguments
|
from ytdl_sub.script.utils.exceptions import IncompatibleFunctionArguments, UserException
|
||||||
from ytdl_sub.script.utils.exceptions import UserException
|
from ytdl_sub.script.utils.type_checking import FunctionSpec, is_union
|
||||||
from ytdl_sub.script.utils.type_checking import FunctionSpec
|
|
||||||
from ytdl_sub.script.utils.type_checking import is_union
|
|
||||||
|
|
||||||
UserExceptionT = TypeVar("UserExceptionT", bound=UserException)
|
UserExceptionT = TypeVar("UserExceptionT", bound=UserException)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,7 @@
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from ytdl_sub.script.functions import Functions
|
from ytdl_sub.script.functions import Functions
|
||||||
from ytdl_sub.script.utils.exceptions import InvalidFunctionName
|
from ytdl_sub.script.utils.exceptions import InvalidFunctionName, InvalidVariableName
|
||||||
from ytdl_sub.script.utils.exceptions import InvalidVariableName
|
|
||||||
|
|
||||||
_NAME_REGEX_VALIDATOR = re.compile(r"^[a-z][a-z0-9_]*$")
|
_NAME_REGEX_VALIDATOR = re.compile(r"^[a-z][a-z0-9_]*$")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,24 +3,20 @@ import inspect
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from inspect import FullArgSpec
|
from inspect import FullArgSpec
|
||||||
from types import NoneType
|
from types import NoneType
|
||||||
from typing import Callable
|
from typing import Callable, List, Optional, Type, TypeVar, Union, get_origin
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
from typing import Union
|
|
||||||
from typing import get_origin
|
|
||||||
|
|
||||||
from ytdl_sub.script.types.resolvable import Argument
|
from ytdl_sub.script.types.resolvable import (
|
||||||
from ytdl_sub.script.types.resolvable import BuiltInFunctionType
|
Argument,
|
||||||
from ytdl_sub.script.types.resolvable import FutureResolvable
|
BuiltInFunctionType,
|
||||||
from ytdl_sub.script.types.resolvable import Lambda
|
FutureResolvable,
|
||||||
from ytdl_sub.script.types.resolvable import LambdaReduce
|
Lambda,
|
||||||
from ytdl_sub.script.types.resolvable import LambdaThree
|
LambdaReduce,
|
||||||
from ytdl_sub.script.types.resolvable import LambdaTwo
|
LambdaThree,
|
||||||
from ytdl_sub.script.types.resolvable import NamedCustomFunction
|
LambdaTwo,
|
||||||
from ytdl_sub.script.types.resolvable import NamedType
|
NamedCustomFunction,
|
||||||
from ytdl_sub.script.types.resolvable import Resolvable
|
NamedType,
|
||||||
|
Resolvable,
|
||||||
|
)
|
||||||
from ytdl_sub.script.types.variable import Variable
|
from ytdl_sub.script.types.variable import Variable
|
||||||
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,15 +6,12 @@ from ytdl_sub.config.config_validator import ConfigOptions
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.config.plugin.preset_plugins import PresetPlugins
|
from ytdl_sub.config.plugin.preset_plugins import PresetPlugins
|
||||||
from ytdl_sub.config.preset import Preset
|
from ytdl_sub.config.preset import Preset
|
||||||
from ytdl_sub.config.preset_options import OutputOptions
|
from ytdl_sub.config.preset_options import OutputOptions, YTDLOptions
|
||||||
from ytdl_sub.config.preset_options import YTDLOptions
|
from ytdl_sub.config.validators.variable_validation import ResolutionLevel, VariableValidation
|
||||||
from ytdl_sub.config.validators.variable_validation import ResolutionLevel
|
|
||||||
from ytdl_sub.config.validators.variable_validation import VariableValidation
|
|
||||||
from ytdl_sub.downloaders.url.validators import MultiUrlValidator
|
from ytdl_sub.downloaders.url.validators import MultiUrlValidator
|
||||||
from ytdl_sub.entries.variables.override_variables import SubscriptionVariables
|
from ytdl_sub.entries.variables.override_variables import SubscriptionVariables
|
||||||
from ytdl_sub.utils.exceptions import SubscriptionPermissionError
|
from ytdl_sub.utils.exceptions import SubscriptionPermissionError
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, FileHandlerTransactionLog
|
||||||
from ytdl_sub.utils.file_handler import FileHandlerTransactionLog
|
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
from ytdl_sub.utils.yaml import dump_yaml
|
from ytdl_sub.utils.yaml import dump_yaml
|
||||||
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
import copy
|
import copy
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Optional
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from mergedeep import mergedeep
|
from mergedeep import mergedeep
|
||||||
|
|
||||||
|
|
@ -143,7 +140,6 @@ class Subscription(SubscriptionDownload):
|
||||||
}
|
}
|
||||||
|
|
||||||
for subscription_name, subscription_object in subscriptions_dicts.items():
|
for subscription_name, subscription_object in subscriptions_dicts.items():
|
||||||
|
|
||||||
# Hard-override subscriptions here
|
# Hard-override subscriptions here
|
||||||
mergedeep.merge(
|
mergedeep.merge(
|
||||||
subscription_object,
|
subscription_object,
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,15 @@ import os
|
||||||
import shutil
|
import shutil
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.config.plugin.plugin import Plugin
|
from ytdl_sub.config.plugin.plugin import Plugin, SplitPlugin
|
||||||
from ytdl_sub.config.plugin.plugin import SplitPlugin
|
|
||||||
from ytdl_sub.config.plugin.plugin_mapping import PluginMapping
|
from ytdl_sub.config.plugin.plugin_mapping import PluginMapping
|
||||||
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
from ytdl_sub.config.plugin.plugin_operation import PluginOperation
|
||||||
from ytdl_sub.downloaders.info_json.info_json_downloader import InfoJsonDownloader
|
from ytdl_sub.downloaders.info_json.info_json_downloader import (
|
||||||
from ytdl_sub.downloaders.info_json.info_json_downloader import InfoJsonDownloaderOptions
|
InfoJsonDownloader,
|
||||||
|
InfoJsonDownloaderOptions,
|
||||||
|
)
|
||||||
from ytdl_sub.downloaders.source_plugin import SourcePlugin
|
from ytdl_sub.downloaders.source_plugin import SourcePlugin
|
||||||
from ytdl_sub.downloaders.url.downloader import MultiUrlDownloader
|
from ytdl_sub.downloaders.url.downloader import MultiUrlDownloader
|
||||||
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
from ytdl_sub.downloaders.ytdl_options_builder import YTDLOptionsBuilder
|
||||||
|
|
@ -22,9 +22,7 @@ from ytdl_sub.subscriptions.base_subscription import BaseSubscription
|
||||||
from ytdl_sub.subscriptions.subscription_ytdl_options import SubscriptionYTDLOptions
|
from ytdl_sub.subscriptions.subscription_ytdl_options import SubscriptionYTDLOptions
|
||||||
from ytdl_sub.utils.datetime import to_date_range
|
from ytdl_sub.utils.datetime import to_date_range
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler, FileHandlerTransactionLog, FileMetadata
|
||||||
from ytdl_sub.utils.file_handler import FileHandlerTransactionLog
|
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
|
|
||||||
logger: logging.Logger = Logger.get()
|
logger: logging.Logger = Logger.get()
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,20 @@
|
||||||
import copy
|
import copy
|
||||||
import dataclasses
|
import dataclasses
|
||||||
from abc import ABC
|
from abc import ABC, abstractmethod
|
||||||
from abc import abstractmethod
|
from typing import Dict, List, Optional, final
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import final
|
|
||||||
|
|
||||||
from ytdl_sub.config.config_file import ConfigFile
|
from ytdl_sub.config.config_file import ConfigFile
|
||||||
from ytdl_sub.config.overrides import Overrides
|
from ytdl_sub.config.overrides import Overrides
|
||||||
from ytdl_sub.entries.variables.override_variables import SubscriptionVariables
|
from ytdl_sub.entries.variables.override_variables import SubscriptionVariables
|
||||||
from ytdl_sub.utils.script import ScriptUtils
|
from ytdl_sub.utils.script import ScriptUtils
|
||||||
from ytdl_sub.validators.string_formatter_validators import UnstructuredDictFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import UnstructuredDictFormatterValidator
|
||||||
from ytdl_sub.validators.validators import DictValidator
|
from ytdl_sub.validators.validators import (
|
||||||
from ytdl_sub.validators.validators import LiteralDictValidator
|
DictValidator,
|
||||||
from ytdl_sub.validators.validators import StringListValidator
|
LiteralDictValidator,
|
||||||
from ytdl_sub.validators.validators import StringValidator
|
StringListValidator,
|
||||||
from ytdl_sub.validators.validators import Validator
|
StringValidator,
|
||||||
|
Validator,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SubscriptionOutput(Validator, ABC):
|
class SubscriptionOutput(Validator, ABC):
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,5 @@
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional, Type, TypeVar
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
from yt_dlp import match_filter_func
|
from yt_dlp import match_filter_func
|
||||||
|
|
||||||
|
|
@ -15,9 +11,7 @@ from ytdl_sub.plugins.audio_extract import AudioExtractPlugin
|
||||||
from ytdl_sub.plugins.chapters import ChaptersPlugin
|
from ytdl_sub.plugins.chapters import ChaptersPlugin
|
||||||
from ytdl_sub.plugins.file_convert import FileConvertPlugin
|
from ytdl_sub.plugins.file_convert import FileConvertPlugin
|
||||||
from ytdl_sub.plugins.format import FormatPlugin
|
from ytdl_sub.plugins.format import FormatPlugin
|
||||||
from ytdl_sub.plugins.match_filters import MatchFiltersPlugin
|
from ytdl_sub.plugins.match_filters import MatchFiltersPlugin, combine_filters, default_filters
|
||||||
from ytdl_sub.plugins.match_filters import combine_filters
|
|
||||||
from ytdl_sub.plugins.match_filters import default_filters
|
|
||||||
from ytdl_sub.plugins.subtitles import SubtitlesPlugin
|
from ytdl_sub.plugins.subtitles import SubtitlesPlugin
|
||||||
from ytdl_sub.plugins.throttle_protection import ThrottleProtectionPlugin
|
from ytdl_sub.plugins.throttle_protection import ThrottleProtectionPlugin
|
||||||
from ytdl_sub.utils.ffmpeg import FFMPEG
|
from ytdl_sub.utils.ffmpeg import FFMPEG
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,7 @@ import threading
|
||||||
import time
|
import time
|
||||||
from json import JSONDecodeError
|
from json import JSONDecodeError
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Optional
|
from typing import Optional, Set
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,14 @@
|
||||||
import re
|
import re
|
||||||
from typing import Dict
|
from typing import Dict, List, Tuple
|
||||||
from typing import List
|
|
||||||
from typing import Tuple
|
|
||||||
|
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry, ytdl_sub_chapters_from_comments
|
||||||
from ytdl_sub.entries.entry import ytdl_sub_chapters_from_comments
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
from ytdl_sub.utils.file_handler import FileMetadata
|
||||||
|
|
||||||
v: VariableDefinitions = VARIABLES
|
v: VariableDefinitions = VARIABLES
|
||||||
|
|
||||||
|
|
||||||
class Timestamp:
|
class Timestamp:
|
||||||
|
|
||||||
# Captures the following formats:
|
# Captures the following formats:
|
||||||
# 0:00 title
|
# 0:00 title
|
||||||
# 00:00 title
|
# 00:00 title
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
from typing import Dict
|
from typing import Dict, List, Optional
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.utils.chapters import Chapters
|
from ytdl_sub.utils.chapters import Chapters
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,7 @@ import os
|
||||||
import shutil
|
import shutil
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Optional, Set, Union
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
from ytdl_sub.utils.subtitles import SUBTITLE_EXTENSIONS
|
from ytdl_sub.utils.subtitles import SUBTITLE_EXTENSIONS
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,7 @@ import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub import __local_version__
|
from ytdl_sub import __local_version__
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
|
|
@ -84,7 +83,6 @@ class StreamToLogger(io.StringIO):
|
||||||
|
|
||||||
|
|
||||||
class Logger:
|
class Logger:
|
||||||
|
|
||||||
# The level set via CLI arguments
|
# The level set via CLI arguments
|
||||||
_LOGGER_LEVEL: LoggerLevel = LoggerLevels.DEBUG
|
_LOGGER_LEVEL: LoggerLevel = LoggerLevels.DEBUG
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,5 @@
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from typing import Any
|
from typing import Any, Optional, Tuple, Type
|
||||||
from typing import Optional
|
|
||||||
from typing import Tuple
|
|
||||||
from typing import Type
|
|
||||||
|
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,12 @@
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
from typing import Any
|
from typing import Any, Dict, Optional
|
||||||
from typing import Dict
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.script.parser import parse
|
from ytdl_sub.script.parser import parse
|
||||||
from ytdl_sub.script.types.array import Array
|
from ytdl_sub.script.types.array import Array, UnresolvedArray
|
||||||
from ytdl_sub.script.types.array import UnresolvedArray
|
from ytdl_sub.script.types.function import BuiltInFunction, Function
|
||||||
from ytdl_sub.script.types.function import BuiltInFunction
|
from ytdl_sub.script.types.map import Map, UnresolvedMap
|
||||||
from ytdl_sub.script.types.function import Function
|
from ytdl_sub.script.types.resolvable import Argument, Boolean, Float, Integer, Lambda, String
|
||||||
from ytdl_sub.script.types.map import Map
|
|
||||||
from ytdl_sub.script.types.map import UnresolvedMap
|
|
||||||
from ytdl_sub.script.types.resolvable import Argument
|
|
||||||
from ytdl_sub.script.types.resolvable import Boolean
|
|
||||||
from ytdl_sub.script.types.resolvable import Float
|
|
||||||
from ytdl_sub.script.types.resolvable import Integer
|
|
||||||
from ytdl_sub.script.types.resolvable import Lambda
|
|
||||||
from ytdl_sub.script.types.resolvable import String
|
|
||||||
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
||||||
from ytdl_sub.script.types.variable import Variable
|
from ytdl_sub.script.types.variable import Variable
|
||||||
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
from ytdl_sub.script.utils.exceptions import UNREACHABLE
|
||||||
|
|
@ -177,7 +167,6 @@ class ScriptUtils:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _syntax_tree_to_native_script(cls, tree: SyntaxTree) -> str:
|
def _syntax_tree_to_native_script(cls, tree: SyntaxTree) -> str:
|
||||||
|
|
||||||
if (output := cls._is_top_level_string(tree)) is not None:
|
if (output := cls._is_top_level_string(tree)) is not None:
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,9 @@
|
||||||
import copy
|
import copy
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from typing import Any
|
from typing import Any, Dict, Optional, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.entries.script.function_scripts import CUSTOM_FUNCTION_SCRIPTS
|
from ytdl_sub.entries.script.function_scripts import CUSTOM_FUNCTION_SCRIPTS
|
||||||
from ytdl_sub.entries.script.variable_definitions import UNRESOLVED_VARIABLES
|
from ytdl_sub.entries.script.variable_definitions import UNRESOLVED_VARIABLES, VARIABLE_SCRIPTS
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLE_SCRIPTS
|
|
||||||
from ytdl_sub.entries.script.variable_types import Variable
|
from ytdl_sub.entries.script.variable_types import Variable
|
||||||
from ytdl_sub.entries.variables.override_variables import REQUIRED_OVERRIDE_VARIABLE_DEFINITIONS
|
from ytdl_sub.entries.variables.override_variables import REQUIRED_OVERRIDE_VARIABLE_DEFINITIONS
|
||||||
from ytdl_sub.script.script import Script
|
from ytdl_sub.script.script import Script
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
import xml.etree.ElementTree as et
|
import xml.etree.ElementTree as et
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Union
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Union
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,7 @@ from typing import Dict
|
||||||
import yaml
|
import yaml
|
||||||
from yaml import YAMLError
|
from yaml import YAMLError
|
||||||
|
|
||||||
from ytdl_sub.utils.exceptions import FileNotFoundException
|
from ytdl_sub.utils.exceptions import FileNotFoundException, InvalidYamlException
|
||||||
from ytdl_sub.utils.exceptions import InvalidYamlException
|
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
|
|
||||||
logger = Logger.get(name="yaml")
|
logger = Logger.get(name="yaml")
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from typing import Dict
|
from typing import Dict, Set
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.validators.string_select_validator import StringSelectValidator
|
from ytdl_sub.validators.string_select_validator import StringSelectValidator
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,10 @@ from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from ytdl_sub.utils.file_path import FilePathTruncater
|
from ytdl_sub.utils.file_path import FilePathTruncater
|
||||||
from ytdl_sub.validators.string_formatter_validators import OverridesStringFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import (
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
OverridesStringFormatterValidator,
|
||||||
|
StringFormatterValidator,
|
||||||
|
)
|
||||||
from ytdl_sub.validators.validators import StringValidator
|
from ytdl_sub.validators.validators import StringValidator
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,17 @@
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from typing import Dict
|
from typing import Dict, List
|
||||||
from typing import List
|
|
||||||
|
|
||||||
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
|
||||||
from ytdl_sub.validators.string_formatter_validators import DictFormatterValidator
|
from ytdl_sub.validators.string_formatter_validators import (
|
||||||
from ytdl_sub.validators.string_formatter_validators import ListFormatterValidator
|
DictFormatterValidator,
|
||||||
from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator
|
ListFormatterValidator,
|
||||||
from ytdl_sub.validators.validators import DictValidator
|
StringFormatterValidator,
|
||||||
from ytdl_sub.validators.validators import ListValidator
|
)
|
||||||
|
from ytdl_sub.validators.validators import DictValidator, ListValidator
|
||||||
|
|
||||||
|
|
||||||
class NfoTagsWithAttributesValidator(StrictDictValidator):
|
class NfoTagsWithAttributesValidator(StrictDictValidator):
|
||||||
|
|
||||||
_required_keys = {"attributes", "tag"}
|
_required_keys = {"attributes", "tag"}
|
||||||
|
|
||||||
def __init__(self, name, value):
|
def __init__(self, name, value):
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
import re
|
import re
|
||||||
from typing import List
|
from typing import List, Optional
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from ytdl_sub.validators.validators import ListValidator
|
from ytdl_sub.validators.validators import ListValidator, StringValidator
|
||||||
from ytdl_sub.validators.validators import StringValidator
|
|
||||||
|
|
||||||
|
|
||||||
class RegexValidator(StringValidator):
|
class RegexValidator(StringValidator):
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
from ytdl_sub.script.utils.name_validation import is_valid_name
|
from ytdl_sub.script.utils.name_validation import is_valid_name
|
||||||
from ytdl_sub.utils.exceptions import InvalidVariableNameException
|
from ytdl_sub.utils.exceptions import InvalidVariableNameException
|
||||||
from ytdl_sub.validators.validators import ListValidator
|
from ytdl_sub.validators.validators import ListValidator, StringValidator
|
||||||
from ytdl_sub.validators.validators import StringValidator
|
|
||||||
|
|
||||||
|
|
||||||
class SourceVariableNameValidator(StringValidator):
|
class SourceVariableNameValidator(StringValidator):
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
from typing import List
|
from typing import List, Set
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from ytdl_sub.validators.validators import DictValidator
|
from ytdl_sub.validators.validators import DictValidator
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Any
|
from typing import Any, Dict, Set, Union, final
|
||||||
from typing import Dict
|
|
||||||
from typing import Set
|
|
||||||
from typing import Union
|
|
||||||
from typing import final
|
|
||||||
|
|
||||||
from ytdl_sub.script.parser import parse
|
from ytdl_sub.script.parser import parse
|
||||||
from ytdl_sub.script.script import Script
|
from ytdl_sub.script.script import Script
|
||||||
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
from ytdl_sub.script.types.syntax_tree import SyntaxTree
|
||||||
from ytdl_sub.script.utils.exceptions import RuntimeException
|
from ytdl_sub.script.utils.exceptions import (
|
||||||
from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved
|
RuntimeException,
|
||||||
from ytdl_sub.script.utils.exceptions import UserException
|
ScriptVariableNotResolved,
|
||||||
|
UserException,
|
||||||
|
)
|
||||||
from ytdl_sub.utils.exceptions import StringFormattingVariableNotFoundException
|
from ytdl_sub.utils.exceptions import StringFormattingVariableNotFoundException
|
||||||
from ytdl_sub.utils.script import ScriptUtils
|
from ytdl_sub.utils.script import ScriptUtils
|
||||||
from ytdl_sub.validators.validators import DictValidator
|
from ytdl_sub.validators.validators import (
|
||||||
from ytdl_sub.validators.validators import ListValidator
|
DictValidator,
|
||||||
from ytdl_sub.validators.validators import LiteralDictValidator
|
ListValidator,
|
||||||
from ytdl_sub.validators.validators import StringValidator
|
LiteralDictValidator,
|
||||||
from ytdl_sub.validators.validators import Validator
|
StringValidator,
|
||||||
|
Validator,
|
||||||
|
)
|
||||||
|
|
||||||
# pylint: disable=protected-access
|
# pylint: disable=protected-access
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,6 @@
|
||||||
import copy
|
import copy
|
||||||
from abc import ABC
|
from abc import ABC
|
||||||
from typing import Any
|
from typing import Any, Dict, Generic, List, Optional, Type, TypeVar, final
|
||||||
from typing import Dict
|
|
||||||
from typing import Generic
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Type
|
|
||||||
from typing import TypeVar
|
|
||||||
from typing import final
|
|
||||||
|
|
||||||
from ytdl_sub.utils.exceptions import ValidationException
|
from ytdl_sub.utils.exceptions import ValidationException
|
||||||
|
|
||||||
|
|
@ -173,7 +166,7 @@ class ListValidator(Validator, ABC, Generic[ValidatorT]):
|
||||||
|
|
||||||
super().__init__(name, value)
|
super().__init__(name, value)
|
||||||
self._list: List[ValidatorT] = [
|
self._list: List[ValidatorT] = [
|
||||||
self._inner_list_type(name=f"{name}.{i+1}", value=val)
|
self._inner_list_type(name=f"{name}.{i + 1}", value=val)
|
||||||
for i, val in enumerate(self._value)
|
for i, val in enumerate(self._value)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,22 +5,14 @@ import time
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Dict, List, Optional, Set
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Set
|
|
||||||
|
|
||||||
from yt_dlp import DateRange
|
from yt_dlp import DateRange
|
||||||
from yt_dlp.utils import make_archive_id
|
from yt_dlp.utils import make_archive_id
|
||||||
|
|
||||||
from ytdl_sub.entries.entry import Entry
|
from ytdl_sub.entries.entry import Entry, ytdl_sub_split_by_chapters_parent_uid
|
||||||
from ytdl_sub.entries.entry import ytdl_sub_split_by_chapters_parent_uid
|
from ytdl_sub.entries.script.variable_definitions import VARIABLES, VariableDefinitions
|
||||||
from ytdl_sub.entries.script.variable_definitions import VARIABLES
|
from ytdl_sub.utils.file_handler import FileHandler, FileHandlerTransactionLog, FileMetadata
|
||||||
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
|
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
|
||||||
from ytdl_sub.utils.file_handler import FileHandlerTransactionLog
|
|
||||||
from ytdl_sub.utils.file_handler import FileMetadata
|
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger
|
||||||
|
|
||||||
logger = Logger.get("archive")
|
logger = Logger.get("archive")
|
||||||
|
|
|
||||||
|
|
@ -7,19 +7,12 @@ import shutil
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any, Callable, Dict, List, Optional, Tuple
|
||||||
from typing import Callable
|
|
||||||
from typing import Dict
|
|
||||||
from typing import List
|
|
||||||
from typing import Optional
|
|
||||||
from typing import Tuple
|
|
||||||
from typing import Union
|
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from expected_download import _get_files_in_directory
|
from expected_download import _get_files_in_directory
|
||||||
from resources import copy_file_fixture
|
from resources import copy_file_fixture, file_fixture_path
|
||||||
from resources import file_fixture_path
|
|
||||||
from yt_dlp.utils import sanitize_filename
|
from yt_dlp.utils import sanitize_filename
|
||||||
|
|
||||||
from ytdl_sub.cli.entrypoint import main
|
from ytdl_sub.cli.entrypoint import main
|
||||||
|
|
@ -28,8 +21,7 @@ from ytdl_sub.entries.script.custom_functions import CustomFunctions
|
||||||
from ytdl_sub.subscriptions.subscription import Subscription
|
from ytdl_sub.subscriptions.subscription import Subscription
|
||||||
from ytdl_sub.subscriptions.subscription_download import SubscriptionDownload
|
from ytdl_sub.subscriptions.subscription_download import SubscriptionDownload
|
||||||
from ytdl_sub.utils.file_handler import FileHandler
|
from ytdl_sub.utils.file_handler import FileHandler
|
||||||
from ytdl_sub.utils.logger import Logger
|
from ytdl_sub.utils.logger import Logger, LoggerLevels
|
||||||
from ytdl_sub.utils.logger import LoggerLevels
|
|
||||||
from ytdl_sub.utils.yaml import load_yaml
|
from ytdl_sub.utils.yaml import load_yaml
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -121,9 +113,9 @@ def assert_logs(
|
||||||
occurrences += int(expected_message in full_print)
|
occurrences += int(expected_message in full_print)
|
||||||
|
|
||||||
if expected_occurrences is not None:
|
if expected_occurrences is not None:
|
||||||
assert (
|
assert occurrences == expected_occurrences, (
|
||||||
occurrences == expected_occurrences
|
f"{expected_message} was expected {expected_occurrences} times, got {occurrences}"
|
||||||
), f"{expected_message} was expected {expected_occurrences} times, got {occurrences}"
|
)
|
||||||
else:
|
else:
|
||||||
assert occurrences > 0, f"{expected_message} was not found in a logger.debug call"
|
assert occurrences > 0, f"{expected_message} was not found in a logger.debug call"
|
||||||
|
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue