[DEV] Linter: Use ruff over black and isort (#1445)

Will eventually replace pylint with ruff
This commit is contained in:
Jesse Bannon 2026-03-09 11:39:01 -07:00 committed by GitHub
parent a758a8870d
commit 57fd6901e4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
166 changed files with 639 additions and 1025 deletions

View file

@ -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)

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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(
{ {

View file

@ -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

View file

@ -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

View file

@ -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):

View file

@ -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")

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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",

View file

@ -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

View file

@ -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(

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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(

View 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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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])

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View 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__)

View 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__)

View 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__)

View 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

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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

View file

@ -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

View file

@ -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:

View file

@ -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:

View file

@ -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")

View file

@ -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

View file

@ -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:

View file

@ -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:

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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):

View file

@ -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)

View file

@ -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_]*$")

View file

@ -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

View file

@ -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

View file

@ -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,

View file

@ -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()

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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")

View file

@ -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

View file

@ -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

View file

@ -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):

View file

@ -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):

View file

@ -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):

View file

@ -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

View file

@ -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

View file

@ -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)
] ]

View file

@ -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")

View file

@ -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