New submission from Michael Cohen:

Argparse has an option to set the custom help formatter class as a kwarg. For 
example one can define:


class MyHelpFormatter(argparse.RawDescriptionHelpFormatter):
    def add_argument(self, action):
        if action.dest != "SUPPRESS":
            super(RekallHelpFormatter, self).add_argument(action)


parser = ArguementParser(
   formatter_class=MyHelpFormatter)


But when one creates a subparser there is no way to define the formatter class 
for it - i.e. parser.add_subparsers() does not accept a formatter_class 
parameter. Instead we see this code:

    def add_subparsers(self, **kwargs):
        ...
        # add the parser class to the arguments if it's not present
        kwargs.setdefault('parser_class', type(self))

The only way to make this work is to extend ArguementParser to force it to use 
the formatter_class through inheritance:

class MyArgParser(argparse.ArgumentParser):

    def __init__(self, **kwargs):
        kwargs["formatter_class"] = MyHelpFormatter
        super(MyArgParser, self).__init__(**kwargs)

this is counter intuitive since formatter_class can be passed to the 
constructor but then it is not propagated to subparsers.

IMHO the expect action here is to have the formatter_class automatically 
propagates to subparsers as well. Short of that we need to be able to specific 
it in add_subparser() call.

----------
components: Extension Modules
messages: 219534
nosy: Michael.Cohen
priority: normal
severity: normal
status: open
title: Argparse does not propagate HelpFormatter class to subparsers
type: behavior
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue21633>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to