[scripts/generate_result] add '-o/--option' command-line option

This commit is contained in:
Mike Fährmann
2025-08-06 21:44:18 +02:00
parent b7a87fe2bb
commit e93da35d7f
2 changed files with 27 additions and 6 deletions

View File

@@ -11,9 +11,10 @@
import logging import logging
import argparse import argparse
import json
import util import util
from pyprint import pyprint from pyprint import pyprint
from gallery_dl import extractor, job from gallery_dl import extractor, job, config
LOG = logging.getLogger("gen-test") LOG = logging.getLogger("gen-test")
@@ -31,19 +32,32 @@ def generate_test_result(args):
if args.only_matching: if args.only_matching:
opts = meta = None opts = meta = None
else: else:
if args.options:
args.options_parsed = options = {}
for opt in args.options:
key, _, value = opt.partition("=")
try:
value = json.loads(value)
except ValueError:
pass
options[key] = value
config.set((), key, value)
djob = job.DataJob(args.extr, file=None) djob = job.DataJob(args.extr, file=None)
djob.filter = dict.copy djob.filter = dict.copy
djob.run() djob.run()
opts = generate_opts(args, djob.data_urls) opts = generate_opts(args, djob.data_urls)
ool = (len(opts) > 1 or "#options" in opts)
if args.metadata: if args.metadata:
meta = generate_meta(args, djob.data_meta) meta = generate_meta(args, djob.data_meta)
else: else:
meta = None meta = None
result = pyprint(head) result = pyprint(head, oneline=False, lmin=9)
if opts: if opts:
result = result[:-2] + pyprint(opts)[1:] result = result[:-2] + pyprint(opts, oneline=ool, lmin=9)[1:]
if meta: if meta:
result = result[:-1] + pyprint(meta)[1:] result = result[:-1] + pyprint(meta)[1:]
return result + ",\n\n" return result + ",\n\n"
@@ -66,6 +80,9 @@ def generate_head(args):
def generate_opts(args, urls): def generate_opts(args, urls):
opts = {} opts = {}
if args.options:
opts["#options"] = args.options_parsed
if not urls: if not urls:
opts["#count"] = 0 opts["#count"] = 0
elif len(urls) == 1: elif len(urls) == 1:
@@ -112,7 +129,8 @@ def parse_args(args=None):
parser.add_argument("-C", dest="comment", action="store_const", const="") parser.add_argument("-C", dest="comment", action="store_const", const="")
parser.add_argument("-l", "--limit_urls", type=int, default=10) parser.add_argument("-l", "--limit_urls", type=int, default=10)
parser.add_argument("-m", "--metadata", action="store_true") parser.add_argument("-m", "--metadata", action="store_true")
parser.add_argument("-o", "--only-matching", action="store_true") parser.add_argument("-o", "--option", dest="options", action="append")
parser.add_argument("-O", "--only-matching", action="store_true")
parser.add_argument("URL") parser.add_argument("URL")
return parser.parse_args() return parser.parse_args()

View File

@@ -10,7 +10,7 @@
import re import re
def pyprint(obj, indent=0, sort=None, lmin=9, lmax=16): def pyprint(obj, indent=0, sort=None, oneline=True, lmin=0, lmax=16):
if isinstance(obj, str): if isinstance(obj, str):
if obj.startswith("lit:"): if obj.startswith("lit:"):
@@ -46,6 +46,9 @@ def pyprint(obj, indent=0, sort=None, lmin=9, lmax=16):
if isinstance(obj, dict): if isinstance(obj, dict):
if not obj: if not obj:
return "{}" return "{}"
if len(obj) == 1 and oneline:
key, value = next(iter(obj.items()))
return f'''{{"{key}": {pyprint(value, indent, sort)}}}'''
if sort: if sort:
if callable(sort): if callable(sort):
@@ -79,7 +82,7 @@ def pyprint(obj, indent=0, sort=None, lmin=9, lmax=16):
if isinstance(obj, list): if isinstance(obj, list):
if not obj: if not obj:
return "[]" return "[]"
if len(obj) == 1: if len(obj) == 1 and oneline:
return f'''[{pyprint(obj[0], indent, sort)}]''' return f'''[{pyprint(obj[0], indent, sort)}]'''
ws = " " * indent ws = " " * indent