]> jfr.im git - yt-dlp.git/blame - devscripts/cli_to_api.py
fix motherless
[yt-dlp.git] / devscripts / cli_to_api.py
CommitLineData
6aaf96a3 1#!/usr/bin/env python3
2
46f1370e 3# Allow direct execution
4import os
5import sys
6
7sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
8
9import yt_dlp
10import yt_dlp.options
11
12create_parser = yt_dlp.options.create_parser
13
14
15def parse_patched_options(opts):
16 patched_parser = create_parser()
17 patched_parser.defaults.update({
18 'ignoreerrors': False,
19 'retries': 0,
20 'fragment_retries': 0,
21 'extract_flat': False,
22 'concat_playlist': 'never',
23 })
ad54c913 24 yt_dlp.options.create_parser = lambda: patched_parser
46f1370e 25 try:
26 return yt_dlp.parse_options(opts)
27 finally:
ad54c913 28 yt_dlp.options.create_parser = create_parser
46f1370e 29
30
31default_opts = parse_patched_options([]).ydl_opts
32
33
34def cli_to_api(opts, cli_defaults=False):
35 opts = (yt_dlp.parse_options if cli_defaults else parse_patched_options)(opts).ydl_opts
36
37 diff = {k: v for k, v in opts.items() if default_opts[k] != v}
38 if 'postprocessors' in diff:
39 diff['postprocessors'] = [pp for pp in diff['postprocessors']
40 if pp not in default_opts['postprocessors']]
41 return diff
42
43
44if __name__ == '__main__':
45 from pprint import pprint
46
47 print('\nThe arguments passed translate to:\n')
48 pprint(cli_to_api(sys.argv[1:]))
49 print('\nCombining these with the CLI defaults gives:\n')
50 pprint(cli_to_api(sys.argv[1:], True))