Code Duplication    Length = 29-32 lines in 3 locations

comics.py 3 locations

@@ 3745-3776 (lines=32) @@
3742
            'title': title,
3743
        }
3744
3745
3746
class GenericSquareSpace(GenericNavigableComic):
3747
    """Generic class to retrieve comics using SquareSpace."""
3748
    _categories = ('SQUARESPACE', )
3749
    get_url_from_link = join_cls_url_to_href
3750
    get_first_comic_link = simulate_first_link
3751
3752
    @classmethod
3753
    def get_navi_link(cls, last_soup, next_):
3754
        """Get link to next or previous comic."""
3755
        return last_soup.find('a', id='prevLink' if next_ else 'nextLink')
3756
3757
    @classmethod
3758
    def get_images(cls, soup):
3759
        """Get image URLs for a comic."""
3760
        raise NotImplementedError
3761
3762
    @classmethod
3763
    def get_comic_info(cls, soup, link):
3764
        """Get information about a particular comics."""
3765
        title = soup.find('meta', property='og:title')['content']
3766
        desc = soup.find('meta', property='og:description')['content']
3767
        date_str = soup.find('time', itemprop='datePublished')["datetime"]
3768
        day = string_to_date(date_str, "%Y-%m-%d")
3769
        author = soup.find('a', rel='author').string
3770
        return {
3771
            'title': title,
3772
            'img': cls.get_images(soup),
3773
            'month': day.month,
3774
            'year': day.year,
3775
            'day': day.day,
3776
            'author': author,
3777
            'description': desc,
3778
        }
3779
@@ 3593-3622 (lines=30) @@
3590
            'title': title,
3591
        }
3592
3593
3594
class ConsoliaComics(GenericNavigableComic):
3595
    """Class to retrieve Consolia comics."""
3596
    name = 'consolia'
3597
    long_name = 'consolia'
3598
    url = 'https://consolia-comic.com'
3599
    get_url_from_link = join_cls_url_to_href
3600
3601
    @classmethod
3602
    def get_first_comic_link(cls):
3603
        """Get link to first comics."""
3604
        return get_soup_at_url(cls.url).find('a', class_='first')
3605
3606
    @classmethod
3607
    def get_navi_link(cls, last_soup, next_):
3608
        """Get link to next or previous comic."""
3609
        return last_soup.find('a', class_='next' if next_ else 'prev')
3610
3611
    @classmethod
3612
    def get_comic_info(cls, soup, link):
3613
        """Get information about a particular comics."""
3614
        title = soup.find('meta', property='og:title')['content']
3615
        date_str = soup.find('time')["datetime"]
3616
        day = string_to_date(date_str, "%Y-%m-%d")
3617
        imgs = soup.find_all('meta', property='og:image')
3618
        return {
3619
            'title': title,
3620
            'img': [i['content'] for i in imgs],
3621
            'day': day.day,
3622
            'month': day.month,
3623
            'year': day.year,
3624
        }
3625
@@ 3412-3440 (lines=29) @@
3409
            'alt': alt,
3410
        }
3411
3412
3413
class PomComics(GenericNavigableComic):
3414
    """Class to retrieve PomComics."""
3415
    name = 'pom'
3416
    long_name = 'Pom Comics / Piece of Me'
3417
    url = 'http://www.pomcomic.com'
3418
    get_url_from_link = join_cls_url_to_href
3419
3420
    @classmethod
3421
    def get_first_comic_link(cls):
3422
        """Get link to first comics."""
3423
        return get_soup_at_url(cls.url).find('a', class_='btn-first')
3424
3425
    @classmethod
3426
    def get_navi_link(cls, last_soup, next_):
3427
        """Get link to next or previous comic."""
3428
        return last_soup.find('a', class_='btn-next' if next_ else 'btn-prev')
3429
3430
    @classmethod
3431
    def get_comic_info(cls, soup, link):
3432
        """Get information about a particular comics."""
3433
        title = soup.find('h1').string
3434
        desc = soup.find('meta', property='og:description')['content']
3435
        tags = soup.find('meta', attrs={'name': 'keywords'})['content']
3436
        imgs = soup.find('div', class_='comic').find_all('img')
3437
        return {
3438
            'title': title,
3439
            'desc': desc,
3440
            'tags': tags,
3441
            'img': [urljoin_wrapper(cls.url, i['src']) for i in imgs],
3442
        }
3443