classification
Title: argparse: disable abbreviation
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.5
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: berker.peksag Nosy List: Michael.Edwards, berker.peksag, bethard, daniel.ugra, eli.bendersky, eric.smith, jens.jaehrig, jpaugh, paul.j3, puppet, python-dev, r.david.murray, remram, tshepang, xobes
Priority: normal Keywords: patch

Created on 2012-05-25 10:59 by jens.jaehrig, last changed 2015-02-13 23:41 by berker.peksag. This issue is now closed.

Files
File name Uploaded Description Edit
disable-abbrev.patch jpaugh, 2012-05-26 20:26 Patch wi/tests,doc review
14910.patch bethard, 2012-07-22 19:57 review
issue14910_2.patch paul.j3, 2014-05-09 04:36 review
issue_14910_3.diff puppet, 2014-08-02 12:27 review
issue14910_4.diff puppet, 2014-08-03 08:01 review
issue14910_5.diff puppet, 2014-08-03 08:06 review
issue14910_6.diff puppet, 2014-08-04 08:23 review
issue14910_7.diff.txt puppet, 2014-08-04 20:54 review
Messages (24)
msg161566 - (view) Author: Jens Jährig (jens.jaehrig) Date: 2012-05-25 11:02
argparse uses per default abbreviation in unambiguous cases.

I don't want abbreviation and i'd like to disable it.
But theres no option to do this.
http://docs.python.org/library/argparse.html#argument-abbreviations
Only to override the Handler like suggested here: http://stackoverflow.com/questions/10750802/python-argparse-disable-abbreviation/10751356#10751356

################
# Example      #
################

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--send', action='store_true')
    parser.parse_args(['--se']) # returns Namespace(send=True)

But i want it only to be true when the full parameter is supplied. To prevent user errors.
msg161672 - (view) Author: Jonathan Paugh (jpaugh) Date: 2012-05-26 17:54
I am dubious as to the use of this: I think resolving partial args is one of the best thing since invented since sliced bread.

However, it's a good project to get my feet wet, so I'll take it on. I should have a patch later today--I'm working on test-cases just now.
msg161680 - (view) Author: Jonathan Paugh (jpaugh) Date: 2012-05-26 20:26
I created a patch that exibhts the requested behavior. I added tests, and updated the documentation. I ran the test-suite against a build of Python 3.3.0a3+, and all tests check out.

This changes the public API of argparse.ArgumentParser and of its parse_args() method.
msg166160 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2012-07-22 19:57
I think it makes a lot of sense to allow people to disable abbreviations, so +1 on the feature request.

The patch looked good. There was one typo - using "accept_abbrev" in the docstring instead of "allow_abbrev" as in the implementation, and I fixed that and uploaded a new patch.

To be complete, the patch also needs to add some documentation, edit Misc/NEWS, etc. See:

http://docs.python.org/devguide/patch.html#preparation
msg166161 - (view) Author: Steven Bethard (bethard) * (Python committer) Date: 2012-07-22 19:58
Sorry, my mistake, the doc changes were already in the patch. I just checked them and they look good too. So everything's ready to commit.

Thanks for your contribution!
msg166162 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2012-07-22 20:06
Jonathan: we are in feature freeze right now preparing 3.3 for release, so you might want to ping the issue once 3.3 is out to remind us to do the checkin.
msg187235 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2013-04-18 10:24
Ping :)
msg204678 - (view) Author: paul j3 (paul.j3) * Date: 2013-11-28 17:15
For a programmer who needs to turn off this abbreviation matching now, a simple solution is to subclass ArgumentParser:

    class MyParser(ArgumentParser):
        def _get_option_tuples(self, option_string):
            return []

This could be the place to implement more specialized matching (e.g. do not match on strings like '--sync').
msg218137 - (view) Author: paul j3 (paul.j3) * Date: 2014-05-09 03:19
Update the patch - 
test_argparse.py - cleanup spaces
argparse.rst - merging conflicts
msg224557 - (view) Author: Daniel Eriksson (puppet) * Date: 2014-08-02 12:27
Update the patch - issue_14910_3.diff
argparse.rst - merging conflicts
msg224567 - (view) Author: Eli Bendersky (eli.bendersky) * (Python committer) Date: 2014-08-02 13:47
Daniel, I left some comments in Rietveld. Also it doesn't seem that you addressed the previously left comments when you fixed up the patch.
msg224616 - (view) Author: Daniel Eriksson (puppet) * Date: 2014-08-03 08:01
Oh, completely missed comments there too!

I hope I got them all in a good way!
msg224617 - (view) Author: Daniel Eriksson (puppet) * Date: 2014-08-03 08:06
Sorry for a new patch this close, but just tripple checked the documentation and noticed a word to much. Made it more clear hopefully
msg224629 - (view) Author: Eli Bendersky (eli.bendersky) * (Python committer) Date: 2014-08-03 12:46
No worries, Daniel. You should have received an email when comments were posted to the review, did you? If you you may want to check your settings in the bug tracker.

I left a couple of additional comments on the documentation file, but other than that this LGTM.
msg224654 - (view) Author: Daniel Eriksson (puppet) * Date: 2014-08-03 20:12
Eli, will look into those tomorrow morning, so a final patch will come during tomorrow. Checked my spam folder - and there they where, fixed the settings now so I get it faster.
msg224699 - (view) Author: Daniel Eriksson (puppet) * Date: 2014-08-04 08:23
Fixed documentation issues
msg224775 - (view) Author: Daniel Eriksson (puppet) * Date: 2014-08-04 20:54
Updated patch
msg225009 - (view) Author: Eli Bendersky (eli.bendersky) * (Python committer) Date: 2014-08-07 13:00
Ezio, could you see if your comments were addressed?

Steven, do you want to take another look, or is this OK to commit?
msg234476 - (view) Author: Andy Zobro (xobes) Date: 2015-01-22 06:05
This breaks custom actions.

e.g.:

class dict_action(argparse.Action):
    def __init__(self, *a, **k):
        argparse.Action.__init__(self, *a, **k)

TypeError: __init__() got an unexpected keyword argument 'allow_abbrev'
msg234477 - (view) Author: Andy Zobro (xobes) Date: 2015-01-22 06:12
Ignore previous comment, I wish I could delete it.

I simply provided the allow_abbrev to the wrong function and spent zero time investigating the error.
msg235362 - (view) Author: Rémi Rampin (remram) * Date: 2015-02-03 21:03
It looks like the previous comments were addressed in the latest patch. Is this still planned for 3.5? Alpha 1 is next week according to PEP478.
msg235421 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2015-02-05 07:27
The patch LGTM.

In Doc/library/argparse.rst:

-                          add_help=True)
+                          allow_abbrev=True, add_help=True)

should be

    add_help=True, allow_abbrev=True)

I'll add a release note and commit it. Thanks!
msg235926 - (view) Author: Roundup Robot (python-dev) Date: 2015-02-13 23:39
New changeset 99302634d756 by Berker Peksag in branch 'default':
Issue #14910: Add allow_abbrev parameter to argparse.ArgumentParser.
https://hg.python.org/cpython/rev/99302634d756
msg235928 - (view) Author: Berker Peksag (berker.peksag) * (Python committer) Date: 2015-02-13 23:41
Committed. Thank you all for patches and reviews :)
History
Date User Action Args
2015-02-13 23:41:44berker.peksagsetstatus: open -> closed
resolution: fixed
messages: + msg235928

stage: patch review -> resolved
2015-02-13 23:39:01python-devsetnosy: + python-dev
messages: + msg235926
2015-02-05 07:27:02berker.peksagsetassignee: berker.peksag

messages: + msg235421
nosy: + berker.peksag
2015-02-03 21:03:03remramsetmessages: + msg235362
2015-01-26 14:08:01remramsetnosy: + remram
2015-01-22 06:12:42xobessetmessages: + msg234477
2015-01-22 06:05:56xobessetnosy: + xobes
messages: + msg234476
2014-08-07 13:00:43eli.benderskysetmessages: + msg225009
2014-08-04 20:54:42puppetsetfiles: + issue14910_7.diff.txt

messages: + msg224775
2014-08-04 08:23:02puppetsetfiles: + issue14910_6.diff

messages: + msg224699
2014-08-04 01:28:23berker.peksagsetcomponents: + Library (Lib), - None
stage: patch review
2014-08-03 20:12:24puppetsetmessages: + msg224654
2014-08-03 12:46:52eli.benderskysetmessages: + msg224629
2014-08-03 08:06:00puppetsetfiles: + issue14910_5.diff

messages: + msg224617
2014-08-03 08:01:36puppetsetfiles: + issue14910_4.diff

messages: + msg224616
2014-08-02 13:47:34eli.benderskysetmessages: + msg224567
2014-08-02 12:27:52puppetsetfiles: + issue_14910_3.diff
nosy: + puppet
messages: + msg224557

2014-05-09 04:36:19paul.j3setfiles: + issue14910_2.patch
2014-05-09 04:35:22paul.j3setfiles: - issue14910_2.patch
2014-05-09 03:19:06paul.j3setfiles: + issue14910_2.patch

messages: + msg218137
2014-04-14 19:37:23akuchlingsetversions: + Python 3.5, - Python 3.4
2014-02-03 15:44:48BreamoreBoysetnosy: - BreamoreBoy
2013-11-28 17:15:48paul.j3setnosy: + paul.j3
messages: + msg204678
2013-11-27 15:12:00eric.smithsetnosy: + eric.smith
2013-11-26 17:55:48eli.benderskysetnosy: + eli.bendersky
2013-04-18 10:24:22BreamoreBoysetnosy: + BreamoreBoy
messages: + msg187235
2013-02-05 15:11:49daniel.ugrasetnosy: + daniel.ugra
2012-12-05 18:45:51r.david.murraylinkissue16614 superseder
2012-12-05 18:45:11r.david.murraysetnosy: + Michael.Edwards
2012-07-22 20:06:32r.david.murraysetnosy: + r.david.murray
messages: + msg166162
2012-07-22 19:58:17bethardsetmessages: + msg166161
2012-07-22 19:57:10bethardsetfiles: + 14910.patch

messages: + msg166160
versions: + Python 3.4, - Python 3.3
2012-05-26 20:26:38jpaughsetfiles: + disable-abbrev.patch
keywords: + patch
messages: + msg161680
2012-05-26 17:54:05jpaughsetnosy: + jpaugh
messages: + msg161672
2012-05-25 18:42:27merwoksetversions: + Python 3.3, - Python 2.6, Python 2.7
2012-05-25 16:26:59tshepangsetnosy: + bethard, tshepang
2012-05-25 11:04:16jens.jaehrigsettitle: argparse disable abbreviation -> argparse: disable abbreviation
2012-05-25 11:02:22jens.jaehrigsetmessages: + msg161566
2012-05-25 10:59:55jens.jaehrigcreate