This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: add remove_argument_group to argparse
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.5, Python 2.7
process
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: Nosy List: Sanjeev, bethard, iritkatriel, paul.j3, rhettinger, shihai1991, xtreak
Priority: normal Keywords: patch

Created on 2010-07-23 13:51 by bethard, last changed 2022-04-11 14:57 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
remove_argument_group.patch Sanjeev, 2013-03-19 21:39 review
Messages (8)
msg111321 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2010-07-23 13:51
[From http://code.google.com/p/argparse/issues/detail?id=71]

There is a method ArgumentParser.add_argument_group() to create and add an argument group to the parser.  I would like the ability to remove an argument group via a method like remove_argument_group(group).

The use case for me is I create an argument group and then conditionally add a bunch of arguments to it.  If zero arguments are added I would like to then remove the group so that an empty group does not show up in the help output.
msg221730 - (view) Author: paul j3 (paul.j3) * (Python triager) Date: 2014-06-27 20:59
I wonder if this patch is needed.

- there hasn't been discussion in 4 years

- In Steven's use case, a group without any arguments, the group does not show up.  A common example of an empty argument group, is a parser without any user defined arguments.  

    p=argparse.ArgumentParser(prog='PROG')
    p.print_help()

    usage: PROG [-h]
    optional arguments:
      -h, --help  show this help message and exit

The empty 'positional arguments' group is not displayed.

Removing a group that has arguments is more complicated (and error prone) since it requires removing those arguments as well.  There is a '_remove_action' method.  But as best I can tell it is only used by '_handle_conflict_resolve', a rarely used alternative conflict handler.
msg227779 - (view) Author: paul j3 (paul.j3) * (Python triager) Date: 2014-09-28 21:54
If the empty argument group has a 'description' it is displayed.  For example with positionals group that I mentioned earlier:

     parser = argparse.ArgumentParser()
     parser._action_groups[0].description = 'test'
     parser.print_help()

produces

    usage: ipython [-h]

    positional arguments:
      test

    optional arguments:
       -h, --help  show this help message and exit

So the user can fix this empty group display issue by setting this 'description' value to None.
msg349920 - (view) Author: Hai Shi (shihai1991) * (Python triager) Date: 2019-08-18 16:39
IMHO, if we supply the ability to add an argument group, we need add the ability to remove the argument group too.
msg349921 - (view) Author: paul j3 (paul.j3) * (Python triager) Date: 2019-08-18 17:33
hai shi

Do you have a specific need for this, or do you want it just for the same of completeness?
msg349929 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2019-08-19 00:47
> The use case for me is I create an argument group and 
> then conditionally add a bunch of arguments to it.  
> If zero arguments are added I would like to then remove
> the group so that an empty group does not show up 
> in the help output.

ISTM this use is likely rare enough that it doesn't warrant an API expansion.  The argparse API is already somewhat large, so we should only expand it when there is a compelling benefit or the absence of a reasonable workaround (i.e. lazily adding a group only when the first argument is added).
msg349932 - (view) Author: Hai Shi (shihai1991) * (Python triager) Date: 2019-08-19 04:39
paul, raymond. Thanks for give me a quick answer:).
Looks raymond's reason is good enough, i just only consider this question from   
api completeness(as paul said) not from user case.
msg408542 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021-12-14 16:08
This is over a decade old and the discussion is mostly that it's not worth doing, so I suggest we close.
History
Date User Action Args
2022-04-11 14:57:04adminsetgithub: 53596
2021-12-29 22:38:52iritkatrielsetstatus: pending -> closed
stage: needs patch -> resolved
2021-12-14 16:08:42iritkatrielsetstatus: open -> pending

nosy: + iritkatriel
messages: + msg408542

resolution: rejected
2019-08-19 04:39:55shihai1991setmessages: + msg349932
2019-08-19 00:47:11rhettingersetnosy: + rhettinger
messages: + msg349929
2019-08-18 17:33:40paul.j3setmessages: + msg349921
2019-08-18 16:39:49shihai1991setnosy: + shihai1991
messages: + msg349920
2018-09-23 06:19:56xtreaksetnosy: + xtreak
2014-09-28 21:54:36paul.j3setmessages: + msg227779
2014-06-27 20:59:40paul.j3setmessages: + msg221730
2014-06-16 22:31:56BreamoreBoysetnosy: + paul.j3

versions: + Python 2.7, Python 3.5, - Python 3.4
2013-03-19 21:40:03Sanjeevsetversions: + Python 3.4
2013-03-19 21:39:03Sanjeevsetfiles: + remove_argument_group.patch
keywords: + patch
2013-03-19 21:38:32Sanjeevsetnosy: + Sanjeev
2010-07-23 13:51:26bethardcreate