Source code for metatrain.cli.formatter

import argparse
from argparse import Action, _MutuallyExclusiveGroup
from typing import Iterable, Optional


[docs] class CustomHelpFormatter(argparse.RawDescriptionHelpFormatter): """Descriptions formatter showing positional arguments before optionals.""" def _format_usage( self, usage: Optional[str], actions: Iterable[Action], groups: Iterable[_MutuallyExclusiveGroup], prefix: Optional[str], ) -> str: if usage is None: # split optionals from positionals optionals = [] positionals = [] for action in actions: if action.option_strings: optionals.append(action) else: positionals.append(action) prog = "%(prog)s" % dict(prog=self._prog) # build full usage string format = self._format_actions_usage action_usage = format(positionals + optionals, groups) usage = " ".join([s for s in [prog, action_usage] if s]) # Call the superclass method to format the usage return super()._format_usage(usage, actions, groups, prefix)