add common config category for boorus and foolslide

pull/40/head
Mike Fährmann 7 years ago
parent c0755a4d5e
commit be30fb2f98
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

@ -8,15 +8,16 @@
"""Base classes for extractors for danbooru and co""" """Base classes for extractors for danbooru and co"""
from .common import Extractor, Message from .common import SharedConfigExtractor, Message
from .. import text from .. import text
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
import urllib.parse import urllib.parse
import datetime import datetime
class BooruExtractor(Extractor): class BooruExtractor(SharedConfigExtractor):
"""Base class for all booru extractors""" """Base class for all booru extractors"""
basecategory = "booru"
filename_fmt = "{category}_{id}_{md5}.{extension}" filename_fmt = "{category}_{id}_{md5}.{extension}"
headers = {} headers = {}
pagestart = 1 pagestart = 1
@ -24,7 +25,7 @@ class BooruExtractor(Extractor):
api_url = "" api_url = ""
def __init__(self): def __init__(self):
Extractor.__init__(self) SharedConfigExtractor.__init__(self)
self.session.headers.update(self.headers) self.session.headers.update(self.headers)
self.params = {"limit": 50} self.params = {"limit": 50}
self.setup() self.setup()

@ -8,7 +8,7 @@
"""Base classes for extractors for different Futaba Channel-like boards""" """Base classes for extractors for different Futaba Channel-like boards"""
from .common import Extractor, Message from .common import Extractor, SharedConfigExtractor, Message
from .. import text from .. import text
import itertools import itertools
import operator import operator
@ -62,9 +62,9 @@ class ChanThreadExtractor(Extractor):
return text.unescape(title)[:50] return text.unescape(title)[:50]
class FoolfuukaThreadExtractor(Extractor): class FoolfuukaThreadExtractor(SharedConfigExtractor):
"""Base extractor for FoolFuuka based boards/archives""" """Base extractor for FoolFuuka based boards/archives"""
category = "foolfuuka" basecategory = "foolfuuka"
subcategory = "thread" subcategory = "thread"
directory_fmt = ["{category}", "{board[shortname]}", directory_fmt = ["{category}", "{board[shortname]}",
"{thread_num} - {title}"] "{thread_num} - {title}"]
@ -72,19 +72,11 @@ class FoolfuukaThreadExtractor(Extractor):
root = "" root = ""
def __init__(self, match): def __init__(self, match):
Extractor.__init__(self) SharedConfigExtractor.__init__(self)
self.board, self.thread = match.groups() self.board, self.thread = match.groups()
self.session.headers["User-Agent"] = "Mozilla 5.0" self.session.headers["User-Agent"] = "Mozilla 5.0"
self.session.headers["Referer"] = self.root self.session.headers["Referer"] = self.root
def config(self, key, default=None, sentinel=object()):
value = Extractor.config(self, key, sentinel)
if value is sentinel:
cat, self.category = self.category, "foolfuuka"
value = Extractor.config(self, key, default)
self.category = cat
return value
def items(self): def items(self):
op = True op = True
yield Message.Version, 1 yield Message.Version, 1

@ -175,6 +175,19 @@ class MangaExtractor(Extractor):
return [] return []
class SharedConfigExtractor(Extractor):
basecategory = ""
def config(self, key, default=None, sentinel=object()):
value = Extractor.config(self, key, sentinel)
if value is sentinel:
cat, self.category = self.category, self.basecategory
value = Extractor.config(self, key, default)
self.category = cat
return value
# Reduce strictness of the expected magic string in cookiejar files. # Reduce strictness of the expected magic string in cookiejar files.
# (This allows the use of Wget-generated cookiejars without modification) # (This allows the use of Wget-generated cookiejars without modification)

@ -8,7 +8,7 @@
"""Base classes for extractors for FoOlSlide based sites""" """Base classes for extractors for FoOlSlide based sites"""
from .common import Extractor, MangaExtractor, Message from .common import SharedConfigExtractor, MangaExtractor, Message
from .. import text, util from .. import text, util
import json import json
@ -34,8 +34,9 @@ def manga_pattern(domain_re):
return [r"(?:https?://)?(" + domain_re + MANGA_RE] return [r"(?:https?://)?(" + domain_re + MANGA_RE]
class FoolslideChapterExtractor(Extractor): class FoolslideChapterExtractor(SharedConfigExtractor):
"""Base class for chapter extractors for FoOlSlide based sites""" """Base class for chapter extractors for FoOlSlide based sites"""
basecategory = "foolslide"
subcategory = "chapter" subcategory = "chapter"
directory_fmt = ["{category}", "{manga}", "{chapter_string}"] directory_fmt = ["{category}", "{manga}", "{chapter_string}"]
filename_fmt = "{manga}_{chapter:>03}_{page:>03}.{extension}" filename_fmt = "{manga}_{chapter:>03}_{page:>03}.{extension}"
@ -43,7 +44,7 @@ class FoolslideChapterExtractor(Extractor):
single = True single = True
def __init__(self, match, url=None): def __init__(self, match, url=None):
Extractor.__init__(self) SharedConfigExtractor.__init__(self)
self.url = url or self.scheme + "://" + match.group(1) self.url = url or self.scheme + "://" + match.group(1)
self.data = match.groupdict(default="") self.data = match.groupdict(default="")
@ -94,7 +95,7 @@ class FoolslideChapterExtractor(Extractor):
return json.loads(text.extract(page, needle, ";", pos)[0]) return json.loads(text.extract(page, needle, ";", pos)[0])
class FoolslideMangaExtractor(MangaExtractor): class FoolslideMangaExtractor(MangaExtractor, SharedConfigExtractor):
"""Base class for manga extractors for FoOlSlide based sites""" """Base class for manga extractors for FoOlSlide based sites"""
scheme = "https" scheme = "https"

Loading…
Cancel
Save