From: pukkandan Date: Thu, 10 Feb 2022 15:37:08 +0000 (+0530) Subject: [options] Better ambiguous option resolution X-Git-Tag: 2022.03.08.1~134 X-Git-Url: https://jfr.im/git/yt-dlp.git/commitdiff_plain/db2e129ca0c11de84d57b2298dffd5d87e852518 [options] Better ambiguous option resolution Eg: `--write-auto` no longer results in > ambiguous option: --write-auto (--write-auto-subs, --write-automatic-subs?) --- diff --git a/yt_dlp/options.py b/yt_dlp/options.py index a6d7c17eb..d89f74ac5 100644 --- a/yt_dlp/options.py +++ b/yt_dlp/options.py @@ -117,6 +117,19 @@ def load_configs(): return parser, opts, args +class _YoutubeDLOptionParser(optparse.OptionParser): + # optparse is deprecated since python 3.2. So assume a stable interface even for private methods + + def _match_long_opt(self, opt): + """Improve ambigious argument resolution by comparing option objects instead of argument strings""" + try: + return super()._match_long_opt(opt) + except optparse.AmbiguousOptionError as e: + if len(set(self._long_opt[p] for p in e.possibilities)) == 1: + return e.possibilities[0] + raise + + def create_parser(): def _format_option_string(option): ''' ('-o', '--option') -> -o, --format METAVAR''' @@ -215,7 +228,7 @@ def _dict_from_options_callback( 'conflict_handler': 'resolve', } - parser = optparse.OptionParser(**compat_kwargs(kw)) + parser = _YoutubeDLOptionParser(**compat_kwargs(kw)) general = optparse.OptionGroup(parser, 'General Options') general.add_option(