diff --git a/dosagelib/events.py b/dosagelib/events.py index 5374b88e0..b5fd0405b 100644 --- a/dosagelib/events.py +++ b/dosagelib/events.py @@ -290,7 +290,7 @@ class JSONEventHandler(EventHandler): # If there's already an image for this page start keeping track of their order if len(pageInfo['images'].keys()) == 1: - pageInfo['imagesOrder'] = [pageInfo['images'].keys()[0]] + pageInfo['imagesOrder'] = list(pageInfo['images'].keys()) if 'imagesOrder' in pageInfo.keys(): pageInfo['imagesOrder'].append(comic.url) diff --git a/dosagelib/plugins/z.py b/dosagelib/plugins/z.py index 43f040d51..8cb8256be 100644 --- a/dosagelib/plugins/z.py +++ b/dosagelib/plugins/z.py @@ -33,9 +33,12 @@ class Zapiro(_ParserScraper): class ZenPencils(_WPNavi): - url = 'http://zenpencils.com/' + url = 'https://zenpencils.com/' multipleImagesPerStrip = True firstStripUrl = url + 'comic/1-ralph-waldo-emerson-make-them-cry/' + starter = bounceStarter + prevSearch = '//a[%s]' % xpath_class('navi-prev') + nextSearch = '//a[%s]' % xpath_class('navi-next') class ZombieHunters(_BasicScraper): diff --git a/tests/httpmocks.py b/tests/httpmocks.py index e91c82a03..5ca7c18ec 100644 --- a/tests/httpmocks.py +++ b/tests/httpmocks.py @@ -47,6 +47,11 @@ def bloomingfaeries(): add(GET, re.compile(r'http://www\.bloomingfaeries\.com/.*\.jpg'), _img(), content_type='image/jpeg') +def zenpencils(): + add(GET, 'https://zenpencils.com/', _content('zp-home')) + add(GET, 'https://zenpencils.com/comic/missing/', _content('zp-223')) + add(GET, 'https://zenpencils.com/comic/lifejacket/', _content('zp-222')) + add(GET, re.compile(r'https://cdn-zenpencils\.netdna-ssl\.com/wp-content/uploads/.*\.jpg'), _img(), content_type='image/jpeg') def vote(): add(POST, 'http://gaecounter.appspot.com/count/', 'no') diff --git a/tests/responses/zp-222.html.gz b/tests/responses/zp-222.html.gz new file mode 100644 index 000000000..82a9bb35c Binary files /dev/null and b/tests/responses/zp-222.html.gz differ diff --git a/tests/responses/zp-223.html.gz b/tests/responses/zp-223.html.gz new file mode 100644 index 000000000..a1229707f Binary files /dev/null and b/tests/responses/zp-223.html.gz differ diff --git a/tests/responses/zp-home.html.gz b/tests/responses/zp-home.html.gz new file mode 100644 index 000000000..ba6256f19 Binary files /dev/null and b/tests/responses/zp-home.html.gz differ diff --git a/tests/test_dosage.py b/tests/test_dosage.py index 50aff45ee..5fa8fbe4b 100644 --- a/tests/test_dosage.py +++ b/tests/test_dosage.py @@ -10,7 +10,7 @@ import responses import dosagelib.cmd import httpmocks - +import json def cmd(*options): """'Fake' run dosage with given options.""" @@ -70,3 +70,26 @@ class TestDosage(object): def test_fetch_indexed(self, tmpdir): httpmocks.xkcd() cmd_ok("-n", "2", "-v", "-b", str(tmpdir), "xkcd:303") + + @responses.activate + def test_json_page_key_bounce_and_multi_image(self, tmpdir): + httpmocks.zenpencils() + print(tmpdir) + cmd_ok("-v", "-b", str(tmpdir), "-o", "json", "ZenPencils") + + directory = tmpdir.join('ZenPencils') + f = directory.join('dosage.json').open(encoding='utf-8') + data = json.load(f) + f.close() + + pages = data['pages'] + assert len(pages) == 1 + + page = list(pages.keys())[0] + assert page == 'https://zenpencils.com/comic/missing/' + + images = data['pages'][page]['images'] + assert len(images) == 2 + + for imgurl, imgfile in images.items(): + assert directory.join(imgfile).check(file=1)