[ python-Bugs-1744580 ] cvs.get_dialect() return a class object
SourceForge.net
noreply at sourceforge.net
Fri Jun 29 01:32:24 CEST 2007
Bugs item #1744580, was opened at 2007-06-28 13:36
Message generated for change (Comment added) made by andrewmcnamara
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1744580&group_id=5470
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Python Library
Group: Python 2.5
Status: Open
Resolution: None
Priority: 5
Private: No
Submitted By: Christian Kristukat (ckkart)
Assigned to: Andrew McNamara (andrewmcnamara)
Summary: cvs.get_dialect() return a class object
Initial Comment:
With python2.5 (and 2.6) cvs.get_dialect('excel') returns a Dialect class object in contrast to python 2.4 where an instance of csv.excel is returned, the former having only read only attributes.
% python2.4
Python 2.4.1 (#3, Jul 28 2005, 22:08:40)
[GCC 3.3 20030304 (Apple Computer, Inc. build 1671)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import csv
>>> d = csv.get_dialect("excel")
>>> d
<csv.excel instance at 0x3ae058>
% python
Python 2.6a0 (trunk:54264M, Mar 10 2007, 15:19:48)
[GCC 4.0.1 (Apple Computer, Inc. build 5367)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import csv
>>> d = csv.get_dialect("excel")
>>> d
<_csv.Dialect object at 0x137fac0>
----------------------------------------------------------------------
>Comment By: Andrew McNamara (andrewmcnamara)
Date: 2007-06-29 09:32
Message:
Logged In: YES
user_id=698599
Originator: NO
The user already has a number of entirely satisfactory ways to "modify"
the dialect - the module is implemented as it is to keep the code simple
and obvious (from a maintenance point of view).
As far as I'm concerned the old behaviour was undocumented and accidental.
I don't mind if you want to document the new behaviour, but I'm afraid I
don't have time to do it at the moment.
----------------------------------------------------------------------
Comment By: Skip Montanaro (montanaro)
Date: 2007-06-29 00:38
Message:
Logged In: YES
user_id=44345
Originator: NO
Would it have made sense to save the class when registering then
return a new instance from get_dialect()? I believe the current
scheme instantiates the dialect being registered, then returns that
object anytime get_dialect is called. That would have allowed the
user to modify the returned dialect to their heart's content without
messing up the registered dialect.
At the very least I think this change needs to be documented.
----------------------------------------------------------------------
Comment By: Andrew McNamara (andrewmcnamara)
Date: 2007-06-28 21:41
Message:
Logged In: YES
user_id=698599
Originator: NO
I should also mention that if you simply wanted a reader of a variant of
the "excel" dialect, the simplest way to achieve that is:
r=csv.reader(f, dialect='excel', delimiter='\t')
----------------------------------------------------------------------
Comment By: Andrew McNamara (andrewmcnamara)
Date: 2007-06-28 21:35
Message:
Logged In: YES
user_id=698599
Originator: NO
Dialects were made immutable, because they can potentially represent the
configuration of a running state machine (the reader), and the dialects are
potentially shared.
If you want to change a registered dialect, I suggest you do something
like:
csv.register_dialect('excel', csv.get_dialect('excel'),
delimiter='\t')
This changes the dialect for new users, but doesn't disrupt the state of
already running readers.
----------------------------------------------------------------------
Comment By: Skip Montanaro (montanaro)
Date: 2007-06-28 20:56
Message:
Logged In: YES
user_id=44345
Originator: NO
I took a brief look at the code. get_dialect is imported from the
underlying _csv.c extension module and didn't change between 2.4 and 2.5.
There is a new static function, _call_dialect, though. It is called from
several places, most notably from csv_register_dialect. The code in 2.4
that it replaces seems much different to me than the code in the body of
_call_dialect. I suspect there was some sort of regression there.
Assigning to Andrew since he's the primary author of the code as well as
the author of this particular change.
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1744580&group_id=5470
More information about the Python-bugs-list
mailing list