[FEATURE] release_date support for date_range; WIP: Need to unit test match filters
This commit is contained in:
parent
66fd7cf41c
commit
85111b9367
2 changed files with 34 additions and 3 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue