diff --git a/gallery_dl/util.py b/gallery_dl/util.py index c86d5832..b6dfb0dd 100644 --- a/gallery_dl/util.py +++ b/gallery_dl/util.py @@ -403,8 +403,14 @@ def build_predicate(predicates): return lambda url, kwdict: True elif len(predicates) == 1: return predicates[0] - else: - return ChainPredicate(predicates) + return functools.partial(chain_predicates, predicates) + + +def chain_predicates(predicates, url, kwdict): + for pred in predicates: + if not pred(url, kwdict): + return False + return True class RangePredicate(): @@ -508,18 +514,6 @@ class FilterPredicate(): raise exception.FilterError(exc) -class ChainPredicate(): - """Predicate; True if all of its predicates return True""" - def __init__(self, predicates): - self.predicates = predicates - - def __call__(self, url, kwdict): - for pred in self.predicates: - if not pred(url, kwdict): - return False - return True - - class ExtendedUrl(): """URL with attached config key-value pairs""" def __init__(self, url, gconf, lconf): diff --git a/test/test_util.py b/test/test_util.py index 0b61d813..2d574da8 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -124,7 +124,7 @@ class TestPredicate(unittest.TestCase): pred = util.build_predicate([util.UniquePredicate(), util.UniquePredicate()]) - self.assertIsInstance(pred, util.ChainPredicate) + self.assertIs(pred.func, util.chain_predicates) class TestISO639_1(unittest.TestCase):