[issue14174] argparse.REMAINDER fails to parse remainder correctly

2014-07-02 Thread paul j3

paul j3 added the comment:

Here's a possible solution to the problem (assuming there really is one):

- redefine REMAINDER so it matches a '((?:A[AO]*)?)' pattern (where O is a 
string that looks like an optional flag, A an argument string).  I've added the 
condition that the first match (if any) must be an A.  It ends up being closer 
to the pattern for PARSER.

I included a patch from issue 15112, which delays the consumption of a 
positional that matches with 0 strings.

In the sample case for this issue, results with this patch are:

args = parser.parse_args(['app', '--config', 'bar'])
# Namespace(app='app', app_args=[], config='bar')

args = parser.parse_args(['--config', 'bar', 'app'])
# Namespace(app='app', app_args=[], config='bar')

args = parser.parse_args(['app', 'args', '--config', 'bar'])
# Namespace(app='app', app_args=['args', '--config', 'bar'], config=None)

In the last case, 'app_args' gets the rest of the strings because the first is 
a plain 'args'.  I believe this is consistent with the intuition expressed in 
this issue.

I've added one test case to test_argparse.TestNargsRemainder.  This is a 
TestCase that is similar to the above example.

argument_signatures = [Sig('x'), Sig('y', nargs='...'), Sig('-z')]
failures = ['', '-z', '-z Z']
successes = [
('X', NS(x='X', y=[], z=None)),
('-z Z X', NS(x='X', y=[], z='Z')),
('X A B -z Z', NS(x='X', y=['A', 'B', '-z', 'Z'], z=None)),
('X Y --foo', NS(x='X', y=['Y', '--foo'], z=None)),
('X -z Z A B', NS(x='X', y=['A', 'B'], z='Z')), # new case
]

This patch runs test_argparse fine.  But there is a slight possibility that 
this patch will cause backward compatibility problems.  Some user might expect 
y=['-z','Z',...].  But that expectation has not been enshrined the 
test_argparse.

It may require a slight change to the documentation as well.

--
keywords: +patch
Added file: http://bugs.python.org/file35824/issue14174_1.patch

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2013-04-17 Thread paul j3

paul j3 added the comment:

An alternative to Jason's example:

parser = argparse.ArgumentParser()
parser.add_argument('app')
parser.add_argument('--config')
parser.add_argument('app_args', nargs=argparse.REMAINDER)
args = parser.parse_args(['--config', 'bar', 'app'])
print vars(args)
# as expected: {'app': 'app', 'app_args': [], 'config': 'bar'}

When you have several positionals, one or more of which may have 0 arguments 
(*,?,...), it is best to put all of the optional arguments first.  

With 'app --config bar', parse_args identifies a 'AOA' pattern (argument, 
optional, argument).  It then checks which positional arguments match.  'app' 
claims 1, 'app_args' claims 2 (REMAINDER means match everything that follows).  
That leaves nothing for '--config'.

What you expected was that 'app' would match with the 1st string, '--config' 
would match the next 2, leaving nothing for 'app_args'.  

In http://bugs.python.org/issue14191 I wrote a patch that would give the 
results you want if 'app_args' uses '*'.  That is makes it possible to 
interleave positional and optional argument strings.  But it does not change 
the behavior of REMAINDER.

parser.add_argument('app_args', nargs='*')

--

Maybe the documentation example for REMAINDER needs to modified to show just 
how 'greedy' REMAINDER is.  Adding a:

parser.add_argument('--arg1',action='store_true')

does not change the outcome.  REMAINDER still grabs '--arg1' even though it is 
a defined argument.


Namespace(arg1=False, args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')

--
nosy: +paul.j3

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2013-04-17 Thread paul j3

paul j3 added the comment:

By the way, parser.parse_args() uses parse_known_arg().  parse_known_args 
returns a Namespace and a list of unknown arguments.  If that list is empty, 
parse_args returns the Namespace.  If the list is not empty, parse_args raises 
an error.

So parse_known_args does not change how arguments are parsed.  It just changes 
how the unknowns are handled.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2013-01-27 Thread Chris Jerdonek

Chris Jerdonek added the comment:

See also issue 17050 for a reduced/simple case where argparse.REMAINDER doesn't 
work (the case of the first argument being argparse.REMAINDER).

--
nosy: +chris.jerdonek

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-11-30 Thread Michael Edwards

Michael Edwards added the comment:

I'm attaching my own bug repro script for Eric. Is this sufficient? I can 
demonstrate the entire resulting Namespace, but the problem is that argparse 
doesn't even produce a Namespace. The cases I show simply fail.

--
nosy: +Michael.Edwards
Added file: http://bugs.python.org/file28165/test.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-10-06 Thread Jason R. Coombs

Jason R. Coombs added the comment:

I also ran into this problem. I put together this script to reproduce the issue:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('app')
parser.add_argument('--config')
parser.add_argument('app_args', nargs=argparse.REMAINDER)
args = parser.parse_args(['app', '--config', 'bar'])
print vars(args)
# actual: {'app': 'app', 'app_args': ['--config', 'bar'], 'config': None}
# expected: {'app': 'app', 'app_args': [], 'config': 'bar'}

I'll try using parse_known_args instead.

--
nosy: +jason.coombs

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-10-06 Thread Idan Kamara

Idan Kamara added the comment:

Unfortunately parse_known_args is buggy too: http://bugs.python.org/issue16142

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-09-21 Thread Idan Kamara

Idan Kamara added the comment:

I just ran into this issue myself and worked around it by using 
parse_known_args*.

* http://docs.python.org/library/argparse.html#partial-parsing

--
nosy: +idank

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-03-04 Thread Éric Araujo

Éric Araujo mer...@netwok.org added the comment:

Thanks for the report.  Could you edit your script to add the expected results, 
for example Namespace(foo=..., command=[...])?

--
nosy: +eric.araujo
stage:  - needs patch
versions: +Python 3.3

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-03-02 Thread Arnout van Meer

New submission from Arnout van Meer rr2...@gmail.com:

Reproduction case is attached and should speak for itself, but the short brief 
is that the argparse.REMAINDER behaviour is very inconsistent based on what 
(potentially) defined argument handlers come before it.

Tested this on Python 2.7 on OS X, but also grabbed the latest argparse.py from 
hg to verify against this.

--
components: Library (Lib)
files: worker.py
messages: 154761
nosy: rr2do2
priority: normal
severity: normal
status: open
title: argparse.REMAINDER fails to parse remainder correctly
type: behavior
versions: Python 2.7, Python 3.2
Added file: http://bugs.python.org/file24704/worker.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-03-02 Thread Arnout van Meer

Changes by Arnout van Meer rr2...@gmail.com:


Removed file: http://bugs.python.org/file24704/worker.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-03-02 Thread Arnout van Meer

Changes by Arnout van Meer rr2...@gmail.com:


Added file: http://bugs.python.org/file24704/worker.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-03-02 Thread Arnout van Meer

Changes by Arnout van Meer rr2...@gmail.com:


Added file: http://bugs.python.org/file24705/bug_argparse.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-03-02 Thread Arnout van Meer

Changes by Arnout van Meer rr2...@gmail.com:


Removed file: http://bugs.python.org/file24704/worker.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-03-02 Thread Arnout van Meer

Changes by Arnout van Meer rr2...@gmail.com:


Removed file: http://bugs.python.org/file24704/worker.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue14174] argparse.REMAINDER fails to parse remainder correctly

2012-03-02 Thread Arnout van Meer

Changes by Arnout van Meer rr2...@gmail.com:


Added file: http://bugs.python.org/file24704/worker.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14174
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com