示例#1
0
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)