class MultiParser(argparse.ArgumentParser): '''Handy parser for supporting both `Gooey` and legacy CLI''' WHITELIST = {'filter_argument', 'parser'} ARGUMENT_WHITELIST = {'widget'} def __init__(self) -> None: if gooey_installed: self.parser = GooeyParser(description=__desc__) else: self.parser = argparse.ArgumentParser( description=__desc__, formatter_class=argparse.RawTextHelpFormatter) def filter_argument(self, **kwargs): """ add_argument(dest, ..., name=value, ...) add_argument(option_string, option_string, ..., name=value, ...) """ gooey_whitelist = MultiParser.ARGUMENT_WHITELIST return dict( filter(lambda v: gooey_installed or not v[0] in gooey_whitelist, kwargs.items())) def __setattr__(self, name: str, value) -> None: if name in MultiParser.WHITELIST: return super().__setattr__(name, value) self.parser.__setattr__(name, value) def __getattribute__(self, name: str): if name in MultiParser.WHITELIST: return super().__getattribute__(name) return self.parser.__getattribute__(name)