Issue 26503: argparse with required field , not having new line separator in -help dispaly (original) (raw)
We are using Python argsparse library here to display below --help message . In --help option , new line option not handled correctly , Especially in "mandatory parameters" (required=True) better to place a new line before for better readability , Since it not having any separators like list brackets in "Non Mandatory parameters".
For example In below help , there must be a new line before "--protocol" and " --action" for better readability
Neutron firewall-rule-create [-h] [-f {html,json,json,shell,table,value,yaml,yaml}] [-c COLUMN] [--max-width ] [--noindent] [--prefix PREFIX] [--request-format {json,xml}] [--tenant-id TENANT_ID] [--name NAME] [--description DESCRIPTION] [--shared] [--source-ip-address SOURCE_IP_ADDRESS] [--destination-ip-address DESTINATION_IP_ADDRESS] [--source-port SOURCE_PORT] [--destination-port DESTINATION_PORT] [--enabled {True,False}] --protocol {tcp,udp,icmp,any} --action {allow,deny,reject}
The usage line formatter needs a major rewrite.
Currently it formats usage for all the arguments as one line (two actually, optionals and positionals are handled separately), and then breaks it into 'wrappable parts'. It then compiles the lines from these parts
# break usage into wrappable parts
part_regexp = r'\(.*?\)+|\[.*?\]+|\S+'
So it's keeping things enclosed in brackets together, but allowing the 'required' arguments to be split.
Certain characters like [] in the metavars also break this usage.
http://bugs.python.org/issue11874
has a patch with a usage rewrite hopefully will take care of this problem. It collects the formatted arguments in a list rather than a concatenated string, so there's no need for this buggy splitter.