| 8 | import sys |
| 9 | |
| 10 | class _Argument: |
| 11 | def __init__( |
| 12 | self, |
| 13 | long_or_short_1, |
| 14 | long_or_short_2=None, |
| 15 | default=None, |
| 16 | dest=None, |
| 17 | help=None, |
| 18 | nargs=None, |
| 19 | **kwargs |
| 20 | ): |
| 21 | self.args = [] |
| 22 | # argparse is crappy and cannot tell us if arguments were given or not. |
| 23 | # We need that information to decide if the config file should override argparse or not. |
| 24 | # So we just use None as a sentinel. |
| 25 | self.kwargs = {'default': None} |
| 26 | shortname, longname, key, is_option = self.get_key( |
| 27 | long_or_short_1, |
| 28 | long_or_short_2, |
| 29 | dest |
| 30 | ) |
| 31 | if shortname is not None: |
| 32 | self.args.append(shortname) |
| 33 | if is_option: |
| 34 | self.args.append(longname) |
| 35 | else: |
| 36 | self.args.append(key) |
| 37 | self.kwargs['metavar'] = longname |
| 38 | if default is not None and nargs is None: |
| 39 | self.kwargs['nargs'] = '?' |
| 40 | if dest is not None: |
| 41 | self.kwargs['dest'] = dest |
| 42 | if nargs is not None: |
| 43 | self.kwargs['nargs'] = nargs |
| 44 | if default is True or default is False: |
| 45 | bool_action = 'store_true' |
| 46 | self.is_bool = True |
| 47 | else: |
| 48 | self.is_bool = False |
| 49 | if default is None and ( |
| 50 | nargs in ('*', '+') |
| 51 | or ('action' in kwargs and kwargs['action'] == 'append') |
| 52 | ): |
| 53 | default = [] |
| 54 | if self.is_bool and not 'action' in kwargs: |
| 55 | self.kwargs['action'] = bool_action |
| 56 | if help is not None: |
| 57 | if default is not None: |
| 58 | if help[-1] == '\n': |
| 59 | if '\n\n' in help[:-1]: |
| 60 | help += '\n' |
| 61 | elif help[-1] == ' ': |
| 62 | pass |
| 63 | else: |
| 64 | help += ' ' |
| 65 | help += 'Default: {}'.format(default) |
| 66 | self.kwargs['help'] = help |
| 67 | self.optional = ( |