[FEATURE] release_date support for date_range; WIP: Need to unit test match filters

This commit is contained in:
Jesse Bannon 2025-05-31 16:52:58 -07:00
parent 66fd7cf41c
commit 85111b9367
2 changed files with 34 additions and 3 deletions

View file

@ -1,4 +1,4 @@
from typing import List
from typing import List, Set
from typing import Optional
from typing import Tuple
@ -7,6 +7,11 @@ from ytdl_sub.config.validators.options import ToggleableOptionsDictValidator
from ytdl_sub.utils.datetime import to_date_str
from ytdl_sub.validators.string_datetime import StringDatetimeValidator
from ytdl_sub.validators.string_formatter_validators import OverridesBooleanFormatterValidator
from ytdl_sub.validators.string_select_validator import OverridesStringSelectValidator
class DateRangeType(OverridesStringSelectValidator):
_select_values: Set[str] = {"upload_date", "release_date"}
class DateRangeOptions(ToggleableOptionsDictValidator):
@ -41,6 +46,7 @@ class DateRangeOptions(ToggleableOptionsDictValidator):
self._breaks = self._validate_key_if_present(
"breaks", OverridesBooleanFormatterValidator, default="True"
)
self._type = self._validate_key("type", DateRangeType, default="upload_date")
@property
def before(self) -> Optional[StringDatetimeValidator]:
@ -70,6 +76,15 @@ class DateRangeOptions(ToggleableOptionsDictValidator):
"""
return self._breaks
@property
def type(self) -> DateRangeType:
"""
:expected type: Optional[OverridesFormatter]
:description:
Which type of date to use. Must be either ``upload_date`` or ``release_date``
"""
return self._type
class DateRangePlugin(Plugin[DateRangeOptions]):
plugin_options_type = DateRangeOptions
@ -83,17 +98,18 @@ class DateRangePlugin(Plugin[DateRangeOptions]):
match_filters: List[str] = []
breaking_match_filters: List[str] = []
date_type: str = self.overrides.apply_formatter(formatter=self.plugin_options.type)
if self.plugin_options.before:
before_str = to_date_str(
date_validator=self.plugin_options.before, overrides=self.overrides
)
match_filters.append(f"upload_date < {before_str}")
match_filters.append(f"{date_type} < {before_str}")
if self.plugin_options.after:
after_str = to_date_str(
date_validator=self.plugin_options.after, overrides=self.overrides
)
after_filter = f"upload_date >= {after_str}"
after_filter = f"{date_type} >= {after_str}"
if self.overrides.evaluate_boolean(self.plugin_options.breaks):
breaking_match_filters.append(after_filter)
else:

View file

@ -1,5 +1,6 @@
from typing import Set
from ytdl_sub.validators.string_formatter_validators import OverridesStringFormatterValidator
from ytdl_sub.validators.validators import StringValidator
@ -17,3 +18,17 @@ class StringSelectValidator(StringValidator):
raise self._validation_exception(
f"Must be one of the following values: {', '.join(self._select_values)}"
)
class OverridesStringSelectValidator(OverridesStringFormatterValidator):
_expected_value_type_name = "overrides select"
_select_values: Set[str] = set()
def post_process(self, resolved: str) -> str:
if resolved not in self._select_values:
raise self._validation_exception(
f"Must be one of the following values: {', '.join(self._select_values)}"
)
return resolved