From 38960a205d346f6602977ea93303ff503124b7f0 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Tue, 12 Dec 2023 12:21:30 -0800 Subject: [PATCH] no kwargs in regex --- src/ytdl_sub/entries/variables/kwargs.py | 1 - src/ytdl_sub/plugins/regex.py | 39 +++++++++++++----------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/ytdl_sub/entries/variables/kwargs.py b/src/ytdl_sub/entries/variables/kwargs.py index 1602abee..5c66ccfa 100644 --- a/src/ytdl_sub/entries/variables/kwargs.py +++ b/src/ytdl_sub/entries/variables/kwargs.py @@ -18,7 +18,6 @@ def _(key: str, backend: bool = False) -> str: CHAPTERS = _("chapters", backend=True) YTDL_SUB_CUSTOM_CHAPTERS = _("ytdl_sub_custom_chapters", backend=True) -YTDL_SUB_REGEX_SOURCE_VARS = _("ytdl_sub_regex_source_vars", backend=True) SPONSORBLOCK_CHAPTERS = _("sponsorblock_chapters", backend=True) SPLIT_BY_CHAPTERS_PARENT_ENTRY = _("split_by_chapters_parent_entry", backend=True) COMMENTS = _("comments", backend=True) diff --git a/src/ytdl_sub/plugins/regex.py b/src/ytdl_sub/plugins/regex.py index eb25e8e7..9442854a 100644 --- a/src/ytdl_sub/plugins/regex.py +++ b/src/ytdl_sub/plugins/regex.py @@ -1,15 +1,16 @@ +from collections import defaultdict from typing import Any from typing import Dict from typing import List from typing import Optional from typing import Set +from ytdl_sub.config.overrides import Overrides from ytdl_sub.config.plugin import Plugin from ytdl_sub.config.plugin import PluginPriority from ytdl_sub.config.preset_options import OptionsDictValidator from ytdl_sub.config.preset_options import PluginOperation from ytdl_sub.entries.entry import Entry -from ytdl_sub.entries.variables.kwargs import YTDL_SUB_REGEX_SOURCE_VARS from ytdl_sub.script.parser import parse from ytdl_sub.script.utils.exceptions import ScriptVariableNotResolved from ytdl_sub.utils.exceptions import RegexNoMatchException @@ -21,6 +22,7 @@ from ytdl_sub.validators.string_formatter_validators import ListFormatterValidat from ytdl_sub.validators.string_formatter_validators import StringFormatterValidator from ytdl_sub.validators.validators import BoolValidator from ytdl_sub.validators.validators import DictValidator +from ytdl_sub.ytdl_additions.enhanced_download_archive import EnhancedDownloadArchive logger = Logger.get(name="regex") @@ -219,8 +221,9 @@ class RegexOptions(OptionsDictValidator): """ return self._from.variable_capture_dict - def _is_evaluatable_at_metadata_time( - self, unresolved_variables: Set[str], input_variable_name: str, regex_options: VariableRegex + @classmethod + def _can_evaluate_at_metadata_time( + cls, unresolved_variables: Set[str], input_variable_name: str, regex_options: VariableRegex ) -> bool: if input_variable_name in unresolved_variables: return False @@ -244,7 +247,7 @@ class RegexOptions(OptionsDictValidator): } for input_variable_name, regex_options in self.source_variable_capture_dict.items(): key = PluginOperation.MODIFY_ENTRY - if self._is_evaluatable_at_metadata_time( + if self._can_evaluate_at_metadata_time( unresolved_variables=unresolved_variables, input_variable_name=input_variable_name, regex_options=regex_options, @@ -262,16 +265,19 @@ class RegexPlugin(Plugin[RegexOptions]): modify_entry=PluginPriority.MODIFY_ENTRY_AFTER_SPLIT + 0, ) - @classmethod - def _add_processed_regex_variable_name(cls, entry: Entry, source_var: str) -> None: - if not entry.kwargs_contains(YTDL_SUB_REGEX_SOURCE_VARS): - entry.add_kwargs({YTDL_SUB_REGEX_SOURCE_VARS: []}) - - entry.kwargs(YTDL_SUB_REGEX_SOURCE_VARS).append(source_var) - - @classmethod - def _contains_processed_regex_variable(cls, entry: Entry, variable_name: str) -> bool: - return variable_name in entry.kwargs_get(YTDL_SUB_REGEX_SOURCE_VARS, []) + def __init__( + self, + options: RegexOptions, + overrides: Overrides, + enhanced_download_archive: EnhancedDownloadArchive, + ): + super().__init__( + options=options, + overrides=overrides, + enhanced_download_archive=enhanced_download_archive, + ) + # Lookup of entry id to processed regex variables + self._processed_regex_vars: Dict[str, Set[str]] = defaultdict(set) def _try_skip_entry(self, entry: Entry, variable_name: str) -> None: # Skip the entry if toggled @@ -323,7 +329,7 @@ class RegexPlugin(Plugin[RegexOptions]): # Record which regex source variables are processed, to # process as many variables as possible in the metadata stage, then the rest # after the media file has been downloaded. - if self._contains_processed_regex_variable(entry, variable_name): + if variable_name in self._processed_regex_vars[entry.ytdl_uid()]: continue # If it's the metadata stage, and it can't be processed, skip until post-metadata @@ -332,8 +338,7 @@ class RegexPlugin(Plugin[RegexOptions]): ): continue - self._add_processed_regex_variable_name(entry, variable_name) - + self._processed_regex_vars[entry.ytdl_uid()].add(variable_name) regex_input_str = str(entry.script.get(variable_name)) if (