[DEV] Bump pylint from 2.13.5 to 3.1.0 (#972)

* Bump pylint from 2.13.5 to 3.1.0

Bumps [pylint](https://github.com/pylint-dev/pylint) from 2.13.5 to 3.1.0.
- [Release notes](https://github.com/pylint-dev/pylint/releases)
- [Commits](https://github.com/pylint-dev/pylint/compare/v2.13.5...v3.1.0)

---
updated-dependencies:
- dependency-name: pylint
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* bend knee to pylint

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jesse Bannon <jbann1994@gmail.com>
This commit is contained in:
dependabot[bot] 2024-04-28 10:40:15 -07:00 committed by GitHub
parent 1d176050a7
commit 64d3082a8a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 49 additions and 55 deletions

View file

@ -49,7 +49,7 @@ test = [
lint = [ lint = [
"black==24.4.2", "black==24.4.2",
"isort==5.13.2", "isort==5.13.2",
"pylint==2.13.5", "pylint==3.1.0",
] ]
docs = [ docs = [
"sphinx~=7.0", "sphinx~=7.0",

View file

@ -9,27 +9,27 @@ from typing import Tuple
from typing import Type 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 ToggleableOptionsDictValidator from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
from ytdl_sub.config.validators.options import TOptionsValidator
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.utils.script import ScriptUtils from ytdl_sub.utils.script import ScriptUtils
from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadArchiver from ytdl_sub.ytdl_additions.enhanced_download_archive import DownloadArchiver
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
# pylint: disable=no-self-use,unused-argument # pylint: disable=unused-argument
class BasePlugin(DownloadArchiver, Generic[TOptionsValidator], ABC): class BasePlugin(DownloadArchiver, Generic[OptionsValidatorT], ABC):
""" """
Shared code amongst all SourcePlugins (downloaders) and Plugins (post-download modification) Shared code amongst all SourcePlugins (downloaders) and Plugins (post-download modification)
""" """
plugin_options_type: Type[TOptionsValidator] plugin_options_type: Type[OptionsValidatorT]
def __init__( def __init__(
self, self,
options: TOptionsValidator, options: OptionsValidatorT,
overrides: Overrides, overrides: Overrides,
enhanced_download_archive: EnhancedDownloadArchive, enhanced_download_archive: EnhancedDownloadArchive,
): ):
@ -38,7 +38,7 @@ class BasePlugin(DownloadArchiver, Generic[TOptionsValidator], ABC):
self.overrides = overrides self.overrides = overrides
class Plugin(BasePlugin[TOptionsValidator], Generic[TOptionsValidator], ABC): class Plugin(BasePlugin[OptionsValidatorT], Generic[OptionsValidatorT], ABC):
""" """
Class to define the new plugin functionality Class to define the new plugin functionality
""" """
@ -121,7 +121,7 @@ class Plugin(BasePlugin[TOptionsValidator], Generic[TOptionsValidator], ABC):
""" """
class SplitPlugin(Plugin[TOptionsValidator], Generic[TOptionsValidator], ABC): class SplitPlugin(Plugin[OptionsValidatorT], Generic[OptionsValidatorT], ABC):
""" """
Plugin that splits entries into zero or more entries Plugin that splits entries into zero or more entries
""" """

View file

@ -5,7 +5,7 @@ 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
from ytdl_sub.config.validators.options import TOptionsValidator from ytdl_sub.config.validators.options import OptionsValidatorT
class PresetPlugins: class PresetPlugins:
@ -29,7 +29,7 @@ class PresetPlugins:
""" """
return list(zip(self.plugin_types, self.plugin_options)) return list(zip(self.plugin_types, self.plugin_options))
def get(self, plugin_type: Type[TOptionsValidator]) -> Optional[TOptionsValidator]: def get(self, plugin_type: Type[OptionsValidatorT]) -> Optional[OptionsValidatorT]:
""" """
Parameters Parameters
---------- ----------

View file

@ -9,7 +9,6 @@ from ytdl_sub.validators.strict_dict_validator import StrictDictValidator
from ytdl_sub.validators.string_formatter_validators import OverridesBooleanFormatterValidator from ytdl_sub.validators.string_formatter_validators import OverridesBooleanFormatterValidator
from ytdl_sub.validators.validators import Validator from ytdl_sub.validators.validators import Validator
# pylint: disable=no-self-use
# pylint: disable=unused-argument # pylint: disable=unused-argument
@ -53,7 +52,7 @@ class OptionsValidator(Validator, ABC):
return {} return {}
TOptionsValidator = TypeVar("TOptionsValidator", bound=OptionsValidator) OptionsValidatorT = TypeVar("OptionsValidatorT", bound=OptionsValidator)
class OptionsDictValidator(StrictDictValidator, OptionsValidator, ABC): class OptionsDictValidator(StrictDictValidator, OptionsValidator, ABC):

View file

@ -11,13 +11,13 @@ 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
from ytdl_sub.config.plugin.plugin import Plugin from ytdl_sub.config.plugin.plugin import Plugin
from ytdl_sub.config.validators.options import TOptionsValidator 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
from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive
class SourcePluginExtension(Plugin[TOptionsValidator], Generic[TOptionsValidator], ABC): class SourcePluginExtension(Plugin[OptionsValidatorT], Generic[OptionsValidatorT], ABC):
""" """
Plugins that get added automatically by using a downloader. Downloader options Plugins that get added automatically by using a downloader. Downloader options
are the plugin options. are the plugin options.
@ -32,12 +32,12 @@ class SourcePluginExtension(Plugin[TOptionsValidator], Generic[TOptionsValidator
return None return None
class SourcePlugin(BasePlugin[TOptionsValidator], Generic[TOptionsValidator], ABC): class SourcePlugin(BasePlugin[OptionsValidatorT], Generic[OptionsValidatorT], ABC):
plugin_extensions: List[Type[SourcePluginExtension]] = [] plugin_extensions: List[Type[SourcePluginExtension]] = []
def __init__( def __init__(
self, self,
options: TOptionsValidator, options: OptionsValidatorT,
enhanced_download_archive: EnhancedDownloadArchive, enhanced_download_archive: EnhancedDownloadArchive,
download_ytdl_options: YTDLOptionsBuilder, download_ytdl_options: YTDLOptionsBuilder,
metadata_ytdl_options: YTDLOptionsBuilder, metadata_ytdl_options: YTDLOptionsBuilder,

View file

@ -397,17 +397,15 @@ class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]):
def _iterate_parent_entry( def _iterate_parent_entry(
self, parent: EntryParent, download_reversed: bool self, parent: EntryParent, download_reversed: bool
) -> Iterator[Entry]: ) -> Iterator[Entry]:
for entry_child in self._iterate_child_entries( yield from self._iterate_child_entries(
entries=parent.entry_children(), download_reversed=download_reversed entries=parent.entry_children(), download_reversed=download_reversed
): )
yield entry_child
# Recursion the parent's parent entries # Recursion the parent's parent entries
for parent_child in reversed(parent.parent_children()): for parent_child in reversed(parent.parent_children()):
for entry_child in self._iterate_parent_entry( yield from self._iterate_parent_entry(
parent=parent_child, download_reversed=download_reversed parent=parent_child, download_reversed=download_reversed
): )
yield entry_child
def _download_url_metadata( def _download_url_metadata(
self, url: str, include_sibling_metadata: bool, ytdl_options_overrides: Dict self, url: str, include_sibling_metadata: bool, ytdl_options_overrides: Dict
@ -449,15 +447,13 @@ class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]):
# Delete info json files afterwards so other collection URLs do not use them # Delete info json files afterwards so other collection URLs do not use them
with self._separate_download_archives(clear_info_json_files=True): with self._separate_download_archives(clear_info_json_files=True):
for parent in parents: for parent in parents:
for entry_child in self._iterate_parent_entry( yield from self._iterate_parent_entry(
parent=parent, download_reversed=download_reversed parent=parent, download_reversed=download_reversed
): )
yield entry_child
for orphan in self._iterate_child_entries( yield from self._iterate_child_entries(
entries=orphans, download_reversed=download_reversed entries=orphans, download_reversed=download_reversed
): )
yield orphan
def _download_metadata(self, url: str, validator: UrlValidator) -> Iterable[Entry]: def _download_metadata(self, url: str, validator: UrlValidator) -> Iterable[Entry]:
metadata_ytdl_options = self.metadata_ytdl_options( metadata_ytdl_options = self.metadata_ytdl_options(
@ -479,12 +475,11 @@ class MultiUrlDownloader(SourcePlugin[MultiUrlValidator]):
) )
download_logger.info("Beginning downloads for %s", url) download_logger.info("Beginning downloads for %s", url)
for entry in self._iterate_entries( yield from self._iterate_entries(
parents=parents, parents=parents,
orphans=orphan_entries, orphans=orphan_entries,
download_reversed=download_reversed, download_reversed=download_reversed,
): )
yield entry
def download_metadata(self) -> Iterable[Entry]: def download_metadata(self) -> Iterable[Entry]:
"""The function to perform the download of all media entries""" """The function to perform the download of all media entries"""

View file

@ -16,7 +16,7 @@ from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
v: VariableDefinitions = VARIABLES v: VariableDefinitions = VARIABLES
TBaseEntry = TypeVar("TBaseEntry", bound="BaseEntry") BaseEntryT = TypeVar("BaseEntryT", bound="BaseEntry")
class BaseEntry(ABC): class BaseEntry(ABC):
@ -140,7 +140,7 @@ class BaseEntry(ABC):
return str(Path(self.working_directory()) / self.get_download_info_json_name()) return str(Path(self.working_directory()) / self.get_download_info_json_name())
@final @final
def to_type(self, entry_type: Type[TBaseEntry]) -> TBaseEntry: def to_type(self, entry_type: Type[BaseEntryT]) -> BaseEntryT:
""" """
Returns Returns
------- -------
@ -149,7 +149,7 @@ class BaseEntry(ABC):
return entry_type(entry_dict=self._kwargs, working_directory=self._working_directory) return entry_type(entry_dict=self._kwargs, working_directory=self._working_directory)
@classmethod @classmethod
def is_entry_parent(cls, entry_dict: Dict | TBaseEntry): def is_entry_parent(cls, entry_dict: Dict | BaseEntryT):
""" """
Returns Returns
------- -------
@ -164,7 +164,7 @@ class BaseEntry(ABC):
return entry_type == "playlist" return entry_type == "playlist"
@classmethod @classmethod
def is_entry(cls, entry_dict: Dict | TBaseEntry): def is_entry(cls, entry_dict: Dict | BaseEntryT):
""" """
Returns Returns
------- -------

View file

@ -7,7 +7,7 @@ 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
from ytdl_sub.entries.base_entry import TBaseEntry 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
from ytdl_sub.entries.script.variable_definitions import VariableDefinitions from ytdl_sub.entries.script.variable_definitions import VariableDefinitions
@ -21,7 +21,7 @@ v: VariableDefinitions = VARIABLES
class EntryParent(BaseEntry): class EntryParent(BaseEntry):
@classmethod @classmethod
def _sort_entries(cls, entries: List[TBaseEntry]) -> List[TBaseEntry]: def _sort_entries(cls, entries: List[BaseEntryT]) -> List[BaseEntryT]:
"""Try sorting by playlist_id first, then fall back to uid""" """Try sorting by playlist_id first, then fall back to uid"""
return sorted( return sorted(
entries, entries,

View file

@ -21,6 +21,7 @@ from ytdl_sub.entries.script.variable_types import Variable
# pylint: disable=no-member # pylint: disable=no-member
# pylint: disable=too-many-public-methods # pylint: disable=too-many-public-methods
# pylint: disable=too-many-lines # pylint: disable=too-many-lines
# pylint: disable=method-cache-max-size-none
class MetadataVariableDefinitions(ABC): class MetadataVariableDefinitions(ABC):

View file

@ -17,8 +17,8 @@ ENTRY_METADATA_VARIABLE_NAME = "entry_metadata"
PLAYLIST_METADATA_VARIABLE_NAME = "playlist_metadata" PLAYLIST_METADATA_VARIABLE_NAME = "playlist_metadata"
SOURCE_METADATA_VARIABLE_NAME = "source_metadata" SOURCE_METADATA_VARIABLE_NAME = "source_metadata"
TMetadataVariable = TypeVar("TMetadataVariable", bound="MetadataVariable") MetadataVariableT = TypeVar("MetadataVariableT", bound="MetadataVariable")
TVariable = TypeVar("TVariable", bound="Variable") VariableT = TypeVar("VariableT", bound="Variable")
def _get( def _get(
@ -26,9 +26,9 @@ def _get(
metadata_variable_name: str, metadata_variable_name: str,
metadata_key: str, metadata_key: str,
variable_name: Optional[str], variable_name: Optional[str],
default: Optional[TVariable | str | int | Dict | List], default: Optional[VariableT | str | int | Dict | List],
as_type: Type[TMetadataVariable], as_type: Type[MetadataVariableT],
) -> TMetadataVariable: ) -> MetadataVariableT:
if default is None: if default is None:
# TODO: assert with good error message if key DNE # TODO: assert with good error message if key DNE
out = f"%map_get({metadata_variable_name}, '{metadata_key}')" out = f"%map_get({metadata_variable_name}, '{metadata_key}')"

View file

@ -247,7 +247,7 @@ class _Parser:
if self._read(increment_pos=False) == "-": if self._read(increment_pos=False) == "-":
numeric_string += "-" numeric_string += "-"
self._pos += 1 self._pos += 1
if has_decimal := (self._read(increment_pos=False) == "."): if has_decimal := self._read(increment_pos=False) == ".":
numeric_string += "." numeric_string += "."
self._pos += 1 self._pos += 1
@ -504,7 +504,9 @@ class _Parser:
output[key] = value_args[0] output[key] = value_args[0]
key = None key = None
else: else:
raise UNREACHABLE break
raise UNREACHABLE
def _parse_main_loop(self, ch: str) -> bool: def _parse_main_loop(self, ch: str) -> bool:
if ch == "\\" and self._read(increment_pos=False) in {"{", "}"}: if ch == "\\" and self._read(increment_pos=False) in {"{", "}"}:

View file

@ -8,11 +8,11 @@ from ytdl_sub.script.utils.exceptions import UserException
from ytdl_sub.script.utils.type_checking import FunctionSpec from ytdl_sub.script.utils.type_checking import FunctionSpec
from ytdl_sub.script.utils.type_checking import is_union from ytdl_sub.script.utils.type_checking import is_union
TUserException = TypeVar("TUserException", bound=UserException) UserExceptionT = TypeVar("UserExceptionT", bound=UserException)
class ParserExceptionFormatter: class ParserExceptionFormatter:
def __init__(self, text: str, start: int, end: int, exception: TUserException): def __init__(self, text: str, start: int, end: int, exception: UserExceptionT):
self._text = text self._text = text
self._start = start self._start = start
self._end = end self._end = end
@ -78,7 +78,7 @@ class ParserExceptionFormatter:
return "\n" + "\n".join(to_return) return "\n" + "\n".join(to_return)
def highlight(self) -> TUserException: def highlight(self) -> UserExceptionT:
""" """
Returns Returns
------- -------

View file

@ -23,7 +23,7 @@ from ytdl_sub.script.types.resolvable import 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
TLambda = TypeVar("TLambda", bound=Lambda) LambdaT = TypeVar("LambdaT", bound=Lambda)
def is_union(arg_type: Type) -> bool: def is_union(arg_type: Type) -> bool:
@ -212,7 +212,7 @@ class FunctionSpec:
return None return None
@property @property
def is_lambda_like(self) -> Optional[Type[TLambda]]: def is_lambda_like(self) -> Optional[Type[LambdaT]]:
""" """
Returns Returns
------- -------

View file

@ -126,8 +126,8 @@ class SubscriptionDownload(BaseSubscription, ABC):
except Exception as exc: except Exception as exc:
self._delete_working_directory(is_error=True) self._delete_working_directory(is_error=True)
raise exc raise exc
else:
self._delete_working_directory() self._delete_working_directory()
@contextlib.contextmanager @contextlib.contextmanager
def _maintain_archive_file(self): def _maintain_archive_file(self):

View file

@ -63,8 +63,6 @@ class StringFormatterValidator(StringValidator):
""" """
return self._value return self._value
# pylint: disable=no-self-use
def post_process(self, resolved: str) -> str: def post_process(self, resolved: str) -> str:
""" """
Returns Returns
@ -73,8 +71,6 @@ class StringFormatterValidator(StringValidator):
""" """
return resolved return resolved
# pylint: enable=no-self-use
# pylint: disable=line-too-long # pylint: disable=line-too-long
class OverridesStringFormatterValidator(StringFormatterValidator): class OverridesStringFormatterValidator(StringFormatterValidator):

View file

@ -169,6 +169,7 @@ class ListValidator(Validator, ABC, Generic[ValidatorT]):
Validates a list of objects to validate Validates a list of objects to validate
""" """
# pylint: disable=used-before-assignment
_expected_value_type = list _expected_value_type = list
_expected_value_type_name = "list" _expected_value_type_name = "list"