diff --git a/gallery_dl/__init__.py b/gallery_dl/__init__.py index aed11666..b0cebaed 100644 --- a/gallery_dl/__init__.py +++ b/gallery_dl/__init__.py @@ -17,9 +17,7 @@ __email__ = "mike_faehrmann@web.de" import os import sys import argparse -import configparser - -from .download import DownloadManager +from . import config, download def parse_cmdline_options(): parser = argparse.ArgumentParser( @@ -41,18 +39,10 @@ def parse_cmdline_options(): ) return parser.parse_args() -def parse_config_file(path): - config = configparser.ConfigParser( - interpolation=None, - ) - config.optionxform = lambda opt: opt - config.read(os.path.expanduser(path)) - return config - def main(): + config.load() opts = parse_cmdline_options() - conf = parse_config_file(opts.config) - dlmgr = DownloadManager(opts, conf) + dlmgr = download.DownloadManager(opts) try: for url in opts.urls: diff --git a/gallery_dl/download.py b/gallery_dl/download.py index 96ababa5..7fdfacfd 100644 --- a/gallery_dl/download.py +++ b/gallery_dl/download.py @@ -12,14 +12,14 @@ import re import importlib from .extractor.common import Message +from . import config class DownloadManager(): - def __init__(self, opts, config): + def __init__(self, opts): self.opts = opts - self.config = config self.modules = {} - self.extractors = ExtractorFinder(config) + self.extractors = ExtractorFinder() def add(self, url): job = DownloadJob(self, url) @@ -38,7 +38,7 @@ class DownloadManager(): if self.opts.dest: return self.opts.dest else: - return self.config.get("general", "destination", fallback="/tmp/") + return config.get(("base-directory",), default="/tmp/") class DownloadJob(): @@ -50,16 +50,14 @@ class DownloadJob(): return self.directory = mngr.get_base_directory() self.downloaders = {} - self.filename_fmt = mngr.config.get( - self.info["category"], "filename", - fallback=self.info["filename"] + self.filename_fmt = config.get( + ("extractor", self.info["category"], "filename"), + default=self.info["filename"] + ) + segments = config.get( + ("extractor", self.info["category"], "directory"), + default=self.info["directory"] ) - try: - segments = mngr.config.get( - self.info["category"], "directory" - ).split("/") - except Exception: - segments = self.info["directory"] self.directory_fmt = os.path.join(*segments) def run(self): @@ -144,26 +142,23 @@ class DownloadJob(): class ExtractorFinder(): - def __init__(self, config): - self.config = config - def get_for_url(self, url): """Get an extractor-instance suitable for 'url'""" name, match = self.find_pattern_match(url) if match: module = importlib.import_module(".extractor." + name, __package__) klass = getattr(module, module.info["extractor"]) - return klass(match, self.config), module.info + return klass(match, {}), module.info else: print("no suitable extractor found") return None, None def find_pattern_match(self, url): - """Find a pattern, that matches 'url', and return the (category,match) tuple""" - for category in self.config: - for key, value in self.config[category].items(): - if key.startswith("regex"): - match = re.match(value, url) + """Find a pattern that matches 'url' and return the (category,match) tuple""" + for category in config.get(("extractor",)): + patterns = config.get(("extractor", category, "pattern"), default=[]) + for pattern in patterns: + match = re.match(pattern, url) if match: return category, match for category, info in self.extractor_metadata():