[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-07-29 Thread R. David Murray

R. David Murray added the comment:

If one is going to have a repr at all, I think it should be as accurate as 
practical.  I think this is worthwhile, and favor the existing patch.

--
nosy: +r.david.murray

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-07-29 Thread Roundup Robot

Roundup Robot added the comment:

New changeset dcc00d9ba8db by Berker Peksag in branch 'default':
Issue #24360: Improve __repr__ of argparse.Namespace() for invalid identifiers.
https://hg.python.org/cpython/rev/dcc00d9ba8db

--
nosy: +python-dev

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-07-29 Thread Berker Peksag

Berker Peksag added the comment:

Thanks for the patch, Matthias.

--
resolution:  - fixed
stage: commit review - resolved
status: open - closed

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-07-29 Thread Matthias Bussonnier

Matthias Bussonnier added the comment:

Thanks for accepting the patch. Looking forward to 3.6 ! :-)

--

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-07-29 Thread Berker Peksag

Changes by Berker Peksag berker.pek...@gmail.com:


--
assignee:  - berker.peksag

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-06-03 Thread paul j3

paul j3 added the comment:

An alternative would be to wrap a non-identifier name in 'repr()':

def repr1(self):
def fmt_name(name):
if name.isidentifier():
return name
else:
return repr(name)
type_name = type(self).__name__
arg_strings = []
for arg in self._get_args():
arg_strings.append(repr(arg))
for name, value in self._get_kwargs():
arg_strings.append('%s=%r' % (fmt_name(name), value))
return '%s(%s)' % (type_name, ', '.join(arg_strings))

This would produce lines like:

Namespace(baz='one', 'foo bar'='test', 'x __y'='other')

Namespace(a=1, b=2, 'double  quote'='', single ' quote =')

Namespace(')'=3, a=1)

Namespace(a=1, 'b=2), Namespace(c'=3)

With names that are deliberately messy, it is hard to say which is clearer.

--

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-06-03 Thread Matthias Bussonnier

Matthias Bussonnier added the comment:

 Namespace(a=1, 'b=2), Namespace(c'=3)

:-) I read that a `prime-b`=2 and `c-prime`=3.

I just feel like having a repr which is closer to the constructor signature is 
better, but I guess it's a question of taste. Anyway, both would be fine.

--

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-06-03 Thread paul j3

paul j3 added the comment:

I mentioned in the related bug/issue that no one has to use odd characters and 
spaces in the Namespace.  While they are allowed by 'getattr' etc, the 
programmer has the option of supplying rational names in the 'dest' parameter.  

There's also the question of what kinds of strings can you supply via  
'sys.argv'.  For example, I have to use quotes to enter

$ python echoargv.py '--b=2), Namespace(c' test

Without them 'bash' gives me an error.

Strings like this may be nice for exercising a patch, they may not be realistic 
in full argparse context.

--

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-06-03 Thread Matthias Bussonnier

Matthias Bussonnier added the comment:

Sure and anyway if you have a huge namespace, things will become unreadable. 
But during development/teaching, having object that have a sane 
representation is useful, otherwise your brain (well at least mine), choke on 
the output and break the flow of my thoughts.

One could also just use __repr(self)__ = repr(self.__dict__), that woudl be 
even simpler and readable :-)

--

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-06-03 Thread paul j3

paul j3 added the comment:

Off hand I don't see a problem with this patch (but I haven't tested it yet).

But I have a couple of cautions:

The docs say, regarding the Namespace class:

 This class is deliberately simple, just an object subclass with a readable 
 string representation.

This patch improves the 'readable' part, but adds some complexity.

The docs also note that the user can provide their own namespace object, and by 
implication, a custom Namespace class with this improved '__repr__'.

The Namespace '__repr__' is mainly of value during code development, especially 
when trying ideas in an interactive shell.  It's unlikely that you would want 
to show the whole namespace to your end user.  So even if your final API 
requires funny characters, you don't need to use them during development.

--
nosy: +paul.j3

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-06-02 Thread Berker Peksag

Changes by Berker Peksag berker.pek...@gmail.com:


--
nosy: +berker.peksag
stage:  - patch review

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



[issue24360] improve argparse.Namespace __repr__ for invalid identifiers.

2015-06-02 Thread Matthias Bussonnier

New submission from Matthias Bussonnier:

The argparse Namespace can be missleading in case where the args names are not 
valid identifiers, eg thinks like a closing bracket:

In [5]: Namespace(a=1, **{')':3})
Out[5]: Namespace()=3, a=1)

more funny:

In [3]: Namespace(a=1, **{s:3})
Out[3]: Namespace(a=1, b=2), Namespace(c=3)

for `s = 'b=2), Namespace(c'`


With this patch the args that are not valid identifiers are shown in ** 
unpacked-dict, which has the side effect of almost always having 
repr(eval(repr(obj)))== repr(obj). I'm sure we can find counter example with 
quotes and triple-quoted string... but anyway.


with this patch (indentation mine for easy comparison):

 from argparse import Namespace
 Namespace(a=1, **{')': 3})
Namespace(a=1, **{')': 3})

Which is I think what most user would expect.

Test passes locally (except SSL cert, network thingies, curses and 
threaded_lru_cache) which look unrelated and is most likely due to my machine.

--
components: Library (Lib)
files: improve-namespace-repr.patch
keywords: patch
messages: 244655
nosy: mbussonn
priority: normal
severity: normal
status: open
title: improve argparse.Namespace __repr__ for invalid identifiers.
type: enhancement
versions: Python 3.6
Added file: http://bugs.python.org/file39593/improve-namespace-repr.patch

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