[util] set flags in range predicates
use flags to stop extractors immediately when hitting the upper range limit instead of raising an exception one predicate check later
This commit is contained in:
@@ -300,7 +300,8 @@ class Job():
|
|||||||
alt is not None and (prange := extr.config(alt + "-range")):
|
alt is not None and (prange := extr.config(alt + "-range")):
|
||||||
try:
|
try:
|
||||||
skip = extr.skip if skip and not pfilter else None
|
skip = extr.skip if skip and not pfilter else None
|
||||||
predicates.append(util.predicate_range(prange, skip))
|
flag = target if alt is not None else None
|
||||||
|
predicates.append(util.predicate_range(prange, skip, flag))
|
||||||
except ValueError as exc:
|
except ValueError as exc:
|
||||||
extr.log.warning("invalid %s range: %s", target, exc)
|
extr.log.warning("invalid %s range: %s", target, exc)
|
||||||
|
|
||||||
|
|||||||
@@ -997,7 +997,7 @@ def predicate_filter(expr, target="image"):
|
|||||||
return _pred
|
return _pred
|
||||||
|
|
||||||
|
|
||||||
def predicate_range(ranges, skip=None):
|
def predicate_range(ranges, skip=None, flag=None):
|
||||||
"""Predicate; True if the current index is in the given range(s)"""
|
"""Predicate; True if the current index is in the given range(s)"""
|
||||||
if ranges := predicate_range_parse(ranges):
|
if ranges := predicate_range_parse(ranges):
|
||||||
# technically wrong for 'step > 2', but good enough for now
|
# technically wrong for 'step > 2', but good enough for now
|
||||||
@@ -1009,17 +1009,32 @@ def predicate_range(ranges, skip=None):
|
|||||||
else:
|
else:
|
||||||
index = upper = 0
|
index = upper = 0
|
||||||
|
|
||||||
def _pred(_url, _kwdict):
|
if flag is None:
|
||||||
nonlocal index
|
def _pred(_url, _kwdict):
|
||||||
|
nonlocal index
|
||||||
|
|
||||||
if index >= upper:
|
if index >= upper:
|
||||||
raise exception.StopExtraction()
|
raise exception.StopExtraction()
|
||||||
index += 1
|
index += 1
|
||||||
|
|
||||||
for range in ranges:
|
for range in ranges:
|
||||||
if index in range:
|
if index in range:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
else:
|
||||||
|
def _pred(_url, _kwdict):
|
||||||
|
nonlocal index
|
||||||
|
|
||||||
|
index += 1
|
||||||
|
if index >= upper:
|
||||||
|
if index > upper:
|
||||||
|
raise exception.StopExtraction()
|
||||||
|
FLAGS.__dict__[flag.upper()] = "stop"
|
||||||
|
|
||||||
|
for range in ranges:
|
||||||
|
if index in range:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
return _pred
|
return _pred
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user