Code Duplication    Length = 22-27 lines in 11 locations

comics.py 11 locations

@@ 1853-1879 (lines=27) @@
1850
        }
1851
1852
1853
class PicturesInBoxes(GenericNavigableComic):
1854
    """Class to retrieve Pictures In Boxes comics."""
1855
    # Also on https://picturesinboxescomic.tumblr.com
1856
    name = 'picturesinboxes'
1857
    long_name = 'Pictures in Boxes'
1858
    url = 'http://www.picturesinboxes.com'
1859
    get_navi_link = get_a_navi_navinext
1860
    get_first_comic_link = simulate_first_link
1861
    first_url = 'http://www.picturesinboxes.com/2013/10/26/tetris/'
1862
1863
    @classmethod
1864
    def get_comic_info(cls, soup, link):
1865
        """Get information about a particular comics."""
1866
        title = soup.find('h2', class_='post-title').string
1867
        author = soup.find("span", class_="post-author").find("a").string
1868
        date_str = soup.find('span', class_='post-date').string
1869
        day = string_to_date(date_str, '%B %d, %Y')
1870
        imgs = soup.find('div', class_='comicpane').find_all('img')
1871
        assert imgs
1872
        assert all(i['title'] == i['alt'] == title for i in imgs)
1873
        return {
1874
            'day': day.day,
1875
            'month': day.month,
1876
            'year': day.year,
1877
            'img': [i['src'] for i in imgs],
1878
            'title': title,
1879
            'author': author,
1880
        }
1881
1882
@@ 956-982 (lines=27) @@
953
        }
954
955
956
class ImogenQuest(GenericNavigableComic):
957
    """Class to retrieve Imogen Quest comics."""
958
    # Also on http://imoquest.tumblr.com
959
    name = 'imogen'
960
    long_name = 'Imogen Quest'
961
    url = 'http://imogenquest.net'
962
    get_first_comic_link = get_div_navfirst_a
963
    get_navi_link = get_a_rel_next
964
965
    @classmethod
966
    def get_comic_info(cls, soup, link):
967
        """Get information about a particular comics."""
968
        title = soup.find('h2', class_='post-title').string
969
        author = soup.find("span", class_="post-author").find("a").string
970
        date_str = soup.find('span', class_='post-date').string
971
        day = string_to_date(date_str, '%B %d, %Y')
972
        imgs = soup.find('div', class_='comicpane').find_all('img')
973
        assert all(i['alt'] == i['title'] for i in imgs)
974
        title2 = imgs[0]['title']
975
        return {
976
            'day': day.day,
977
            'month': day.month,
978
            'year': day.year,
979
            'img': [i['src'] for i in imgs],
980
            'title': title,
981
            'title2': title2,
982
            'author': author,
983
        }
984
985
@@ 2553-2578 (lines=26) @@
2550
        }
2551
2552
2553
class TheAwkwardYeti(GenericNavigableComic):
2554
    """Class to retrieve The Awkward Yeti comics."""
2555
    # Also on http://www.gocomics.com/the-awkward-yeti
2556
    # Also on http://larstheyeti.tumblr.com
2557
    # Also on https://tapastic.com/series/TheAwkwardYeti
2558
    name = 'yeti'
2559
    long_name = 'The Awkward Yeti'
2560
    url = 'http://theawkwardyeti.com'
2561
    _categories = ('YETI', )
2562
    get_first_comic_link = get_a_navi_navifirst
2563
    get_navi_link = get_link_rel_next
2564
2565
    @classmethod
2566
    def get_comic_info(cls, soup, link):
2567
        """Get information about a particular comics."""
2568
        title = soup.find('h2', class_='post-title').string
2569
        date_str = soup.find("span", class_="post-date").string
2570
        day = string_to_date(date_str, "%B %d, %Y")
2571
        imgs = soup.find("div", id="comic").find_all("img")
2572
        assert all(idx > 0 or i['alt'] == i['title'] for idx, i in enumerate(imgs))
2573
        return {
2574
            'img': [i['src'] for i in imgs],
2575
            'title': title,
2576
            'day': day.day,
2577
            'month': day.month,
2578
            'year': day.year
2579
        }
2580
2581
@@ 2466-2491 (lines=26) @@
2463
        }
2464
2465
2466
class GerbilWithAJetpack(GenericNavigableComic):
2467
    """Class to retrieve GerbilWithAJetpack comics."""
2468
    name = 'gerbil'
2469
    long_name = 'Gerbil With A Jetpack'
2470
    url = 'http://gerbilwithajetpack.com'
2471
    get_first_comic_link = get_a_navi_navifirst
2472
    get_navi_link = get_a_rel_next
2473
2474
    @classmethod
2475
    def get_comic_info(cls, soup, link):
2476
        """Get information about a particular comics."""
2477
        title = soup.find('h2', class_='post-title').string
2478
        author = soup.find("span", class_="post-author").find("a").string
2479
        date_str = soup.find("span", class_="post-date").string
2480
        day = string_to_date(date_str, "%B %d, %Y")
2481
        imgs = soup.find("div", id="comic").find_all("img")
2482
        alt = imgs[0]['alt']
2483
        assert all(i['alt'] == i['title'] == alt for i in imgs)
2484
        return {
2485
            'img': [i['src'] for i in imgs],
2486
            'title': title,
2487
            'alt': alt,
2488
            'author': author,
2489
            'day': day.day,
2490
            'month': day.month,
2491
            'year': day.year
2492
        }
2493
2494
@@ 2807-2831 (lines=25) @@
2804
    first_url = 'http://www.commitstrip.com/en/2012/02/22/interview/'
2805
2806
2807
class GenericBoumerie(GenericNavigableComic):
2808
    """Generic class to retrieve Boumeries comics in different languages."""
2809
    get_first_comic_link = get_a_navi_navifirst
2810
    get_navi_link = get_link_rel_next
2811
    date_format = NotImplemented
2812
    lang = NotImplemented
2813
2814
    @classmethod
2815
    def get_comic_info(cls, soup, link):
2816
        """Get information about a particular comics."""
2817
        title = soup.find('h2', class_='post-title').string
2818
        short_url = soup.find('link', rel='shortlink')['href']
2819
        author = soup.find("span", class_="post-author").find("a").string
2820
        date_str = soup.find('span', class_='post-date').string
2821
        day = string_to_date(date_str, cls.date_format, cls.lang)
2822
        imgs = soup.find('div', id='comic').find_all('img')
2823
        assert all(i['alt'] == i['title'] for i in imgs)
2824
        return {
2825
            'short_url': short_url,
2826
            'img': [i['src'] for i in imgs],
2827
            'title': title,
2828
            'author': author,
2829
            'month': day.month,
2830
            'year': day.year,
2831
            'day': day.day,
2832
        }
2833
2834
@@ 2495-2519 (lines=25) @@
2492
        }
2493
2494
2495
class EveryDayBlues(GenericDeletedComic, GenericNavigableComic):
2496
    """Class to retrieve EveryDayBlues Comics."""
2497
    name = "blues"
2498
    long_name = "Every Day Blues"
2499
    url = "http://everydayblues.net"
2500
    get_first_comic_link = get_a_navi_navifirst
2501
    get_navi_link = get_link_rel_next
2502
2503
    @classmethod
2504
    def get_comic_info(cls, soup, link):
2505
        """Get information about a particular comics."""
2506
        title = soup.find("h2", class_="post-title").string
2507
        author = soup.find("span", class_="post-author").find("a").string
2508
        date_str = soup.find("span", class_="post-date").string
2509
        day = string_to_date(date_str, "%d. %B %Y", "de_DE.utf8")
2510
        imgs = soup.find("div", id="comic").find_all("img")
2511
        assert all(i['alt'] == i['title'] == title for i in imgs)
2512
        assert len(imgs) <= 1
2513
        return {
2514
            'img': [i['src'] for i in imgs],
2515
            'title': title,
2516
            'author': author,
2517
            'day': day.day,
2518
            'month': day.month,
2519
            'year': day.year
2520
        }
2521
2522
@@ 1741-1765 (lines=25) @@
1738
        }
1739
1740
1741
class MouseBearComedy(GenericComicNotWorking):  # Website has changed
1742
    """Class to retrieve Mouse Bear Comedy comics."""
1743
    # Also on http://mousebearcomedy.tumblr.com
1744
    name = 'mousebear'
1745
    long_name = 'Mouse Bear Comedy'
1746
    url = 'http://www.mousebearcomedy.com'
1747
    get_first_comic_link = get_a_navi_navifirst
1748
    get_navi_link = get_a_navi_comicnavnext_navinext
1749
1750
    @classmethod
1751
    def get_comic_info(cls, soup, link):
1752
        """Get information about a particular comics."""
1753
        title = soup.find('h2', class_='post-title').string
1754
        author = soup.find("span", class_="post-author").find("a").string
1755
        date_str = soup.find("span", class_="post-date").string
1756
        day = string_to_date(date_str, '%B %d, %Y')
1757
        imgs = soup.find("div", id="comic").find_all("img")
1758
        assert all(i['alt'] == i['title'] == title for i in imgs)
1759
        return {
1760
            'day': day.day,
1761
            'month': day.month,
1762
            'year': day.year,
1763
            'img': [i['src'] for i in imgs],
1764
            'title': title,
1765
            'author': author,
1766
        }
1767
1768
@@ 1185-1208 (lines=24) @@
1182
    url = 'http://english.bouletcorp.com'
1183
1184
1185
class AmazingSuperPowers(GenericNavigableComic):
1186
    """Class to retrieve Amazing Super Powers comics."""
1187
    name = 'asp'
1188
    long_name = 'Amazing Super Powers'
1189
    url = 'http://www.amazingsuperpowers.com'
1190
    get_first_comic_link = get_a_navi_navifirst
1191
    get_navi_link = get_a_navi_navinext
1192
1193
    @classmethod
1194
    def get_comic_info(cls, soup, link):
1195
        """Get information about a particular comics."""
1196
        author = soup.find("span", class_="post-author").find("a").string
1197
        date_str = soup.find('span', class_='post-date').string
1198
        day = string_to_date(date_str, "%B %d, %Y")
1199
        imgs = soup.find('div', id='comic').find_all('img')
1200
        title = ' '.join(i['title'] for i in imgs)
1201
        assert all(i['alt'] == i['title'] for i in imgs)
1202
        return {
1203
            'title': title,
1204
            'author': author,
1205
            'img': [img['src'] for img in imgs],
1206
            'day': day.day,
1207
            'month': day.month,
1208
            'year': day.year
1209
        }
1210
1211
@@ 702-725 (lines=24) @@
699
        }
700
701
702
class OneOneOneOneComic(GenericComicNotWorking, GenericNavigableComic):
703
    """Class to retrieve 1111 Comics."""
704
    # Also on http://comics1111.tumblr.com
705
    # Also on https://tapastic.com/series/1111-Comics
706
    name = '1111'
707
    long_name = '1111 Comics'
708
    url = 'http://www.1111comics.me'
709
    _categories = ('ONEONEONEONE', )
710
    get_first_comic_link = get_div_navfirst_a
711
    get_navi_link = get_link_rel_next
712
713
    @classmethod
714
    def get_comic_info(cls, soup, link):
715
        """Get information about a particular comics."""
716
        title = soup.find('h1', class_='comic-title').find('a').string
717
        date_str = soup.find('header', class_='comic-meta entry-meta').find('a').string
718
        day = string_to_date(date_str, "%B %d, %Y")
719
        imgs = soup.find_all('meta', property='og:image')
720
        return {
721
            'title': title,
722
            'month': day.month,
723
            'year': day.year,
724
            'day': day.day,
725
            'img': [i['content'] for i in imgs],
726
        }
727
728
@@ 930-952 (lines=23) @@
927
        }
928
929
930
class TheGentlemanArmchair(GenericNavigableComic):
931
    """Class to retrieve The Gentleman Armchair comics."""
932
    name = 'gentlemanarmchair'
933
    long_name = 'The Gentleman Armchair'
934
    url = 'http://thegentlemansarmchair.com'
935
    get_first_comic_link = get_a_navi_navifirst
936
    get_navi_link = get_link_rel_next
937
938
    @classmethod
939
    def get_comic_info(cls, soup, link):
940
        """Get information about a particular comics."""
941
        title = soup.find('h2', class_='post-title').string
942
        author = soup.find("span", class_="post-author").find("a").string
943
        date_str = soup.find('span', class_='post-date').string
944
        day = string_to_date(date_str, "%B %d, %Y")
945
        imgs = soup.find('div', id='comic').find_all('img')
946
        return {
947
            'img': [i['src'] for i in imgs],
948
            'title': title,
949
            'author': author,
950
            'month': day.month,
951
            'year': day.year,
952
            'day': day.day,
953
        }
954
955
@@ 729-750 (lines=22) @@
726
        }
727
728
729
class AngryAtNothing(GenericDeletedComic, GenericNavigableComic):
730
    """Class to retrieve Angry at Nothing comics."""
731
    # Also on http://tapastic.com/series/Comics-yeah-definitely-comics-
732
    # Also on http://angryatnothing.tumblr.com
733
    name = 'angry'
734
    long_name = 'Angry At Nothing'
735
    url = 'http://www.angryatnothing.net'
736
    get_first_comic_link = get_div_navfirst_a
737
    get_navi_link = get_a_rel_next
738
739
    @classmethod
740
    def get_comic_info(cls, soup, link):
741
        """Get information about a particular comics."""
742
        title = soup.find('h1', class_='comic-title').find('a').string
743
        date_str = soup.find('header', class_='comic-meta entry-meta').find('a').string
744
        day = string_to_date(date_str, "%B %d, %Y")
745
        imgs = soup.find_all('meta', property='og:image')
746
        return {
747
            'title': title,
748
            'month': day.month,
749
            'year': day.year,
750
            'day': day.day,
751
            'img': [i['content'] for i in imgs],
752
        }
753