From 410f783a33ed8eb865418c1c263ef201ab10a7b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Mon, 21 Aug 2023 21:18:40 +0200 Subject: [PATCH] implement 'subconfigs' option (#4440) --- docs/configuration.rst | 10 ++++++++++ gallery_dl/__init__.py | 4 ++-- gallery_dl/config.py | 11 +++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index c29b2230..8c7f3712 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -5124,6 +5124,16 @@ Description as signal handler for. +subconfigs +---------- +Type + ``list`` of |Path|_ +Example + ``["~/cfg-twitter.json", "~/cfg-reddit.json"]`` +Description + Additional configuration files to load. + + warnings -------- Type diff --git a/gallery_dl/__init__.py b/gallery_dl/__init__.py index 1450e8f2..ab72b8e1 100644 --- a/gallery_dl/__init__.py +++ b/gallery_dl/__init__.py @@ -44,13 +44,13 @@ def main(): config.load(args.configs_json, strict=True) if args.configs_yaml: import yaml - config.load(args.configs_yaml, strict=True, load=yaml.safe_load) + config.load(args.configs_yaml, strict=True, loads=yaml.safe_load) if args.configs_toml: try: import tomllib as toml except ImportError: import toml - config.load(args.configs_toml, strict=True, load=toml.loads) + config.load(args.configs_toml, strict=True, loads=toml.loads) if args.filename: filename = args.filename if filename == "/O": diff --git a/gallery_dl/config.py b/gallery_dl/config.py index 0b2aca80..767185fb 100644 --- a/gallery_dl/config.py +++ b/gallery_dl/config.py @@ -90,13 +90,13 @@ def initialize(): return 0 -def load(files=None, strict=False, load=util.json_loads): +def load(files=None, strict=False, loads=util.json_loads): """Load JSON configuration files""" for pathfmt in files or _default_configs: path = util.expand_path(pathfmt) try: with open(path, encoding="utf-8") as file: - conf = load(file.read()) + conf = loads(file.read()) except OSError as exc: if strict: log.error(exc) @@ -113,6 +113,13 @@ def load(files=None, strict=False, load=util.json_loads): util.combine_dict(_config, conf) _files.append(pathfmt) + if "subconfigs" in conf: + subconfigs = conf["subconfigs"] + if subconfigs: + if isinstance(subconfigs, str): + subconfigs = (subconfigs,) + load(subconfigs, strict, loads) + def clear(): """Reset configuration to an empty state"""