From bc0951d97487d4351998cd41c8bed979cf7849b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Wed, 6 Feb 2019 17:24:44 +0100 Subject: [PATCH] allow for simplified test data structures Instead of a strict list of (URL, RESULTS)-tuples, extractor result tests can now be a single (URL, RESULTS)-tuple, if it's just one test, and "only matching" tests can now be a simple string. --- CHANGELOG.md | 2 ++ gallery_dl/__init__.py | 5 +++-- gallery_dl/extractor/common.py | 15 +++++++++++++++ gallery_dl/extractor/test.py | 4 ++-- gallery_dl/version.py | 2 +- test/test_extractor.py | 6 ++---- test/test_results.py | 4 +--- 7 files changed, 26 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f562b086..0d5e818e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## Unreleased + ## 1.7.0 - 2019-02-05 - Added support for: - `photobucket` - http://photobucket.com/ ([#117](https://github.com/mikf/gallery-dl/issues/117)) diff --git a/gallery_dl/__init__.py b/gallery_dl/__init__.py index de5a4837..a57ca2b5 100644 --- a/gallery_dl/__init__.py +++ b/gallery_dl/__init__.py @@ -255,8 +255,9 @@ def main(): print(extr.__doc__) print("Category:", extr.category, "- Subcategory:", extr.subcategory) - if hasattr(extr, "test") and extr.test: - print("Example :", extr.test[0][0]) + test = next(extr._get_tests(), None) + if test: + print("Example :", test[0]) print() else: if not args.urls and not args.inputfile: diff --git a/gallery_dl/extractor/common.py b/gallery_dl/extractor/common.py index abbc4c7d..fa670d9f 100644 --- a/gallery_dl/extractor/common.py +++ b/gallery_dl/extractor/common.py @@ -174,6 +174,21 @@ class Extractor(): for cookie in cookies: setcookie(cookie) + @classmethod + def _get_tests(cls): + """Yield an extractor's test cases as (URL, RESULTS) tuples""" + if not hasattr(cls, "test") or not cls.test: + return + + tests = cls.test + if len(tests) == 2 and (not tests[1] or isinstance(tests[1], dict)): + tests = (tests,) + + for test in tests: + if isinstance(test, str): + test = (test, None) + yield test + class ChapterExtractor(Extractor): diff --git a/gallery_dl/extractor/test.py b/gallery_dl/extractor/test.py index 80710ab0..843b2e7d 100644 --- a/gallery_dl/extractor/test.py +++ b/gallery_dl/extractor/test.py @@ -33,6 +33,7 @@ class TestExtractor(Extractor): """ category = "test" pattern = [r"t(?:est)?:([^:]*)(?::([^:]*)(?::(\*|[\d,]*))?)?$"] + test = ("test:pixiv", "test:pixiv:user,favorite:0", "test:") def __init__(self, match): Extractor.__init__(self) @@ -59,8 +60,7 @@ class TestExtractor(Extractor): tests = [ test for extr in extractors - if hasattr(extr, "test") - for index, test in enumerate(extr.test) + for index, test in enumerate(extr._get_tests()) if str(index) in self.indices ] diff --git a/gallery_dl/version.py b/gallery_dl/version.py index aed1ce00..482f4e46 100644 --- a/gallery_dl/version.py +++ b/gallery_dl/version.py @@ -6,4 +6,4 @@ # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. -__version__ = "1.7.0" +__version__ = "1.7.1-dev" diff --git a/test/test_extractor.py b/test/test_extractor.py index 7849666d..b4a425c9 100644 --- a/test/test_extractor.py +++ b/test/test_extractor.py @@ -11,7 +11,7 @@ import sys import unittest import string -import gallery_dl.extractor as extractor +from gallery_dl import extractor from gallery_dl.extractor.common import Extractor, Message from gallery_dl.extractor.directlink import DirectlinkExtractor as DLExtractor @@ -101,9 +101,7 @@ class TestExtractor(unittest.TestCase): # collect testcase URLs for extr in extractor.extractors(): - if not hasattr(extr, "test"): - continue - for testcase in extr.test: + for testcase in extr._get_tests(): test_urls.append((testcase[0], extr)) # iterate over all testcase URLs diff --git a/test/test_results.py b/test/test_results.py index fb2c3008..5982ea32 100644 --- a/test/test_results.py +++ b/test/test_results.py @@ -182,10 +182,8 @@ def generate_tests(): # add 'test_...' methods for extr in extractors: - if not hasattr(extr, "test") or not extr.test: - continue name = "test_" + extr.__name__ + "_" - for num, tcase in enumerate(extr.test, 1): + for num, tcase in enumerate(extr._get_tests(), 1): test = _generate_test(extr, tcase) test.__name__ = name + str(num) setattr(TestExtractorResults, test.__name__, test)