Bugs item #1730114, was opened at 2007-06-03 01:01
Message generated for change (Comment added) made by gbrandl
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1730114&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: Extension Modules
Group: Python 2.5
>Status: Closed
>Resolution: Fixed
Priority: 5
Private: No
Submitted By: reedobrien (reedobrien)
Assigned to: Georg Brandl (gbrandl)
Summary: cStringIO no longer accepts array.array objects

Initial Comment:
It worked fine in 2.5 and 2.4.4

Python 2.5.1 (r251:54863, Jun  2 2007, 19:09:15) 
Type "copyright", "credits" or "license" for more information.

In [1]: from cStringIO import StringIO

In [2]: from array import array

In [3]: a = array('B', [0,1,2])

In [4]: StringIO(a)
---------------------------------------------------------------------------
<type 'exceptions.TypeError'>             Traceback (most recent call last)

/Users/reedobrien/<ipython console> in <module>()

<type 'exceptions.TypeError'>: expected a character buffer object


Recompiling with the 2.5 cStringIO.c it works.

Python 2.5.1 (r251:54863, Jun  2 2007, 20:06:12) 
Type "copyright", "credits" or "license" for more information.

In [1]: from array import array

In [2]: from cStringIO import StringIO

In [3]: a = array('B', [0,1,2])

In [4]: StringIO(a)
Out[4]: <cStringIO.StringI object at 0xe8c0>



I blame Visual Studio. 
I don't know enough c to fix it.

----------------------------------------------------------------------

>Comment By: Georg Brandl (gbrandl)
Date: 2007-08-08 13:04

Message:
Logged In: YES 
user_id=849994
Originator: NO

Fixed by reverting the offending change. Added a note in the docs.
Committed revisions 56830, 56831 (2.5).

----------------------------------------------------------------------

Comment By: Georg Brandl (gbrandl)
Date: 2007-06-06 18:12

Message:
Logged In: YES 
user_id=849994
Originator: NO

I'll look at it.

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2007-06-03 06:40

Message:
Logged In: YES 
user_id=80475
Originator: NO

Georgbot, I believe this was your checkin.

----------------------------------------------------------------------

Comment By: reedobrien (reedobrien)
Date: 2007-06-03 05:49

Message:
Logged In: YES 
user_id=995094
Originator: YES

It appears this is the change that broke it.
http://svn.python.org/view/python/branches/release25-maint/Modules/cStringIO.c?rev=52302&r1=51333&r2=52302

This is the log entry from that changeset:
Bug #1548891: The cStringIO.StringIO() constructor now encodes unicode
arguments with the system default encoding just like the write()
method does, instead of converting it to a raw buffer.
 (backport from rev. 52301)


Perhaps the cPickle module should be used instead...

BUT at first glance the following seems to make both work:
  if (PyUnicode_Check(s)) 
        {
                if (PyObject_AsCharBuffer(s, (const char **)&buf, &size) != 0)
                {
                        PyErr_Format(PyExc_TypeError, "expected character 
buffer, %.200s
found",
                                s->ob_type->tp_name); 
                        return NULL;
                }
        }
  else
        {
                if (PyObject_AsReadBuffer(s, (const void **)&buf, &size) != 0)
                return NULL;
        }

But the more I think about it the more I think cPickle is more appropriate
for this purpose.  In that case I should make a blurb for the docs about
not storing arbitrary data in cStringIO. 

Either way I am attaching the cStringIO.c file that worked for me...
File Added: cStringIO.c

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1730114&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