# -*- encoding: utf-8 -*- # WARNING: This code has been copied verbatim from # https://github.com/python/cpython/blob/3.9/Lib/argparse.py # To be removed when the minimum python supported version # will be >= 3.9 import argparse class BooleanOptionalAction(argparse.Action): def __init__( self, option_strings, dest, default=None, type=None, choices=None, required=False, help=None, metavar=None, ): _option_strings = [] for option_string in option_strings: _option_strings.append(option_string) if option_string.startswith("--"): option_string = "--no-" + option_string[2:] _option_strings.append(option_string) if help is not None and default is not None: help += f" (default: {default})" super().__init__( option_strings=_option_strings, dest=dest, nargs=0, default=default, type=type, choices=choices, required=required, help=help, metavar=metavar, ) def __call__(self, parser, namespace, values, option_string=None): if option_string in self.option_strings: setattr(namespace, self.dest, not option_string.startswith("--no-")) def format_usage(self): return " | ".join(self.option_strings)