1
0
mirror of https://github.com/mikf/gallery-dl.git synced 2025-01-31 19:51:34 +01:00

[docs] update gallery-dl.conf

add simple script that compares configuration.rst and gallery-dl.conf
This commit is contained in:
Mike Fährmann 2024-11-29 20:10:00 +01:00
parent 00fe1c81b2
commit 75c463bb18
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88
2 changed files with 882 additions and 214 deletions

File diff suppressed because it is too large Load Diff

146
scripts/docs_compare.py Executable file
View File

@ -0,0 +1,146 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Find missing settings in docs/gallery.conf"""
import json
import util
import sys
import re
from gallery_dl import text, extractor
def read(fname):
path = util.path("docs", fname)
try:
with open(path) as fp:
return fp.read()
except Exception as exc:
sys.exit("Unable to read {} ({}: {})".format(
path, exc.__class__.__name__, exc))
DOCS = read("configuration.rst")
CONF = json.loads(read("gallery-dl.conf"))
EXTRS = list(extractor._list_classes())
def opts_general(type):
# general opts
opts = re.findall(
r"(?m)^{}\.\*\.([\w-]+)".format(type),
DOCS)
extr = CONF[type]
return {
type + ".*." + opt
for opt in opts
if opt not in extr
}
def opts_category(type):
# site opts
opts = re.findall(
r"(?m)^{}\.(?!\*)([\w-]+)\.([\w-]+)(?:\.([\w-]+))?".format(type),
DOCS)
extr = CONF[type]
result = set()
for category, sub, opt in opts:
if category[0] == "[":
category = category[1:-1]
category_opts = extr.get(category)
if not category_opts:
result.add(category + ".*")
continue
if not opt:
opt = sub
sub = None
elif sub:
category_opts = category_opts.get(sub) or ()
if opt not in category_opts:
if sub:
opt = sub + "." + opt
result.add(category + "." + opt)
return result
def userpass():
block = text.extr(DOCS, "extractor.*.username", "extractor.*.")
extr = CONF["extractor"]
result = set()
for category in text.extract_iter(block, "* ``", "``"):
opts = extr[category]
if "username" not in opts or "password" not in opts:
result.add(category)
return result
def sleeprequest():
block = text.extr(DOCS, "extractor.*.sleep-request", "extractor.*.")
sleep = {}
for line in block.splitlines():
line = line.strip()
if not line:
continue
if line[0] == "*":
value = line.strip('* `"')
if value == "0":
break
elif line[0] == "`":
cat, _, sub = line.strip("`,").partition(":")
sleep[cat.strip("[]")] = value
result = {}
for extr in EXTRS:
value = sleep.get(extr.category)
if value:
category = extr.category
else:
value = sleep.get(extr.basecategory)
if value:
category = extr.basecategory
else:
continue
min, _, max = value.partition("-")
tup = (float(min), float(max))
if tup != extr.request_interval:
result[category] = extr.request_interval
return result
write = sys.stdout.write
opts = set()
opts.update(opts_general("extractor"))
opts.update(opts_general("downloader"))
opts.update(opts_category("extractor"))
opts.update(opts_category("downloader"))
if opts:
write("Missing Options:\n")
for opt in sorted(opts):
write(" {}\n".format(opt))
write("\n")
categories = userpass()
if categories:
write("Missing username & password:\n")
for cat in sorted(categories):
write(" {}\n".format(cat))
write("\n")
categories = sleeprequest()
if categories:
write("Wrong sleep_request:\n")
for cat, value in sorted(categories.items()):
write(" {}: {}\n".format(cat, value))
write("\n")