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
_______________________________________________
Python-bugs-list mailing list 
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to