webcomics/dosage

View on GitHub
dosagelib/plugins/keenspot.py

Summary

Maintainability
A
35 mins
Test Coverage
A
95%
# SPDX-License-Identifier: MIT
# Copyright (C) 2004-2008 Tristan Seligmann and Jonathan Jacobs
# Copyright (C) 2012-2014 Bastian Kleineidam
# Copyright (C) 2015-2022 Tobias Gruetzmacher
# Copyright (C) 2019-2020 Daniel Ring
from ..scraper import ParserScraper


class KeenSpot(ParserScraper):
    multipleImagesPerStrip = True
    imageSearch = (
        '//img[contains(@src, "/comics/")]',
        # Gene Catlow Alternate
        '//img[contains(@src, "/altcomics/")]',
        # Shockwave Darkside
        '//img[contains(@src, "/comics2D/")]',
        '//img[contains(@src, "com/shockwave")]',
        # Sore Thumbs
        '//img[contains(@src, "com/st2")]',
        # Wayward Sons
        '//img[contains(@src, "com/2")]',
    )
    prevSearch = (
        '//link[@rel="prev"]',
        '//a[@rel="prev"]',
        # Exposure
        '//a[img[@id="exp29"]]',
        # Hero By Night
        '//area[contains(@coords, ",-7,")]',
        # Katrina
        '//a[img[@id="katc7"]]',
        # No Room For Magic, Everyone Loves Adis, Wisdom Of Moo
        '//a[text()="Previous comic"]',
        # Supernovas
        '//a[img[@id="p_top_nav"]]',
    )
    help = 'Index format: yyyymmdd'

    def __init__(self, name, sub, last=None, adult=False, path='d/%s.html'):
        super(KeenSpot, self).__init__('KeenSpot/' + name)
        self.url = 'http://%s.keenspot.com/' % sub
        self.stripUrl = self.url + path

        if last:
            self.url = self.stripUrl % last
            self.endOfLife = True

        if adult:
            self.adult = adult

    @classmethod
    def getmodules(cls):
        return (
            # Not on frontpage...
            cls('Buzzboy', 'buzzboy'),
            cls('EveryoneLovesAdis', 'adis'),
            cls('GeneCatlowAlternate', 'genecatlow', last='20170302',
                adult=True, path='altd/%s.html'),

            # do not edit anything below since these entries are generated from
            # scripts/update_plugins.sh
            # START AUTOUPDATE
            cls('27TwentySeven', 'twenty-seven'),
            cls('Avengelyne', 'avengelyne'),
            cls('BanzaiGirl', 'banzaigirl'),
            cls('Barker', 'barkercomic'),
            cls('ChoppingBlock', 'choppingblock'),
            cls('ClichFlamb', 'clicheflambe'),
            cls('CountYourSheep', 'countyoursheep'),
            cls('CrowScare', 'crowscare', last='20111031'),
            cls('Dreamless', 'dreamless', last='20100726'),
            cls('EverythingJake', 'everythingjake'),
            cls('Exposure', 'exposure'),
            cls('FallOutToyWorks', 'fallouttoyworks'),
            cls('FriarAndBrimstone', 'friarandbrimstone'),
            cls('GeneCatlow', 'genecatlow', last='20170412'),
            cls('GodMode', 'godmode'),
            cls('GreenWake', 'greenwake'),
            cls('HeadTrip', 'headtrip'),
            cls('HeroByNight', 'herobynight'),
            cls('HoaxHunters', 'hoaxhunters'),
            cls('InHere', 'inhere'),
            cls('JadeWarriors', 'jadewarriors'),
            cls('Katrina', 'katrina'),
            cls('LutherStrode', 'lutherstrode'),
            cls('MakeshiftMiracle', 'makeshiftmiracle'),
            cls('Marksmen', 'marksmen'),
            cls('MarryMe', 'marryme'),
            cls('MedusasDaughter', 'medusasdaughter'),
            cls('MonsterMassacre', 'monstermassacre'),
            cls('MysticRevolution', 'mysticrevolution', path='?cid=%s'),
            cls('NoPinkPonies', 'nopinkponies'),
            cls('NoRoomForMagic', 'noroomformagic'),
            cls('OutThere', 'outthere'),
            cls('Porcelain', 'porcelain'),
            cls('ProjectionEdge', 'newshounds'),
            cls('PunchAnPie', 'punchanpie', path='daily/%s.html'),
            cls('QUILTBAG', 'quiltbag'),
            cls('RedSpike', 'redspike'),
            cls('RumbleFall', 'rumblefall'),
            cls('SamuraisBlood', 'samuraisblood'),
            cls('Sharky', 'sharky'),
            cls('ShockwaveDarkside', 'shockwave', path='2d/%s.html'),
            cls('SomethingHappens', 'somethinghappens'),
            cls('SoreThumbs', 'sorethumbs'),
            cls('Striptease', 'striptease'),
            cls('Supernovas', 'supernovas'),
            cls('Superosity', 'superosity'),
            cls('TheFirstDaughter', 'thefirstdaughter'),
            cls('TheHopeVirus', 'hopevirus'),
            cls('TheHuntersOfSalamanstra', 'salamanstra'),
            cls('TheLounge', 'thelounge'),
            cls('TheVault', 'thevault'),
            cls('WaywardSons', 'waywardsons'),
            cls('WeirdingWillows', 'weirdingwillows'),
            cls('WICKEDPOWERED', 'wickedpowered'),
            cls('WisdomOfMoo', 'wisdomofmoo'),
            # END AUTOUPDATE
        )

    def shouldSkipUrl(self, url, data):
        return url in (
            'http://sorethumbs.keenspot.com/d/20160117.html'
        )