diff --git a/gallery_dl/util.py b/gallery_dl/util.py index dfea1d87..fb51edff 100644 --- a/gallery_dl/util.py +++ b/gallery_dl/util.py @@ -52,10 +52,10 @@ def advance(iterable, num): return iterator -def raises(obj): - """Returns a function that raises 'obj' as exception""" - def wrap(): - raise obj +def raises(cls): + """Returns a function that raises 'cls' as exception""" + def wrap(*args): + raise cls(*args) return wrap @@ -287,21 +287,21 @@ class UniquePredicate(): class FilterPredicate(): """Predicate; True if evaluating the given expression returns True""" - globalsdict = { - "parse_int": text.parse_int, - "urlsplit": urllib.parse.urlsplit, - "datetime": datetime.datetime, - "abort": raises(exception.StopExtraction()), - "re": re, - } def __init__(self, filterexpr, target="image"): name = "<{} filter>".format(target) self.codeobj = compile(filterexpr, name, "eval") + self.globals = { + "parse_int": text.parse_int, + "urlsplit" : urllib.parse.urlsplit, + "datetime" : datetime.datetime, + "abort" : raises(exception.StopExtraction), + "re" : re, + } def __call__(self, url, kwds): try: - return eval(self.codeobj, self.globalsdict, kwds) + return eval(self.codeobj, self.globals, kwds) except exception.GalleryDLException: raise except Exception as exc: diff --git a/test/test_util.py b/test/test_util.py index 815b2d8d..9b252a37 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -313,17 +313,17 @@ class TestOther(unittest.TestCase): util.advance(util.advance(items, 1), 2), range(3, 5)) def test_raises(self): - func = util.raises(Exception()) + func = util.raises(Exception) with self.assertRaises(Exception): func() - func = util.raises(ValueError(1)) + func = util.raises(ValueError) with self.assertRaises(ValueError): - func() + func(1) with self.assertRaises(ValueError): - func() + func(2) with self.assertRaises(ValueError): - func() + func(3) def test_combine_dict(self): self.assertEqual(