43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
# script from youtube-dlp gitlab repo : https://github.com/yt-dlp/yt-dlp/blob/master/devscripts/cli_to_api.py
|
|
|
|
import yt_dlp
|
|
import yt_dlp.options
|
|
import re
|
|
|
|
create_parser = yt_dlp.options.create_parser
|
|
|
|
def parse_patched_options(opts):
|
|
patched_parser = create_parser()
|
|
patched_parser.defaults.update({
|
|
'ignoreerrors': False,
|
|
'retries': 0,
|
|
'fragment_retries': 0,
|
|
'extract_flat': False,
|
|
'concat_playlist': 'never',
|
|
})
|
|
yt_dlp.options.create_parser = lambda: patched_parser
|
|
try:
|
|
return yt_dlp.parse_options(opts)
|
|
finally:
|
|
yt_dlp.options.create_parser = create_parser
|
|
|
|
default_opts = parse_patched_options([]).ydl_opts
|
|
|
|
def cli_to_api(opts_string, cli_defaults=False):
|
|
opts = re.split(r'\s+', opts_string)
|
|
opts = (yt_dlp.parse_options if cli_defaults else parse_patched_options)(opts).ydl_opts
|
|
|
|
diff = {k: v for k, v in opts.items() if default_opts[k] != v}
|
|
if 'postprocessors' in diff:
|
|
diff['postprocessors'] = [pp for pp in diff['postprocessors']
|
|
if pp not in default_opts['postprocessors']]
|
|
return diff
|
|
|
|
def merge_redis_registries(dest, source):
|
|
for key in source:
|
|
if key in dest:
|
|
dest[key] = dest.get(key) + source.get(key)
|
|
else:
|
|
dest[key] = source[key]
|
|
|
|
return dest |