From: SourceForge.net <no...@so...> - 2004-09-01 15:59:52
|
Bugs item #1020517, was opened at 2004-09-01 08:59 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=1020517&group_id=12867 Category: Library Group: None Status: Open Resolution: None Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: cStringIO mode attribute not set. Initial Comment: I'm trying to get the Universal Feed Parser to run under Jython, and I'm running into a problem where creating a cStringIO object from a string doesn't change the mode to "rb", and so the code doesn't know that it can read from the string. Specifically, the code I'm trying to execute is: data = gzip.GzipFile(fileobj=_StringIO(data)).read() and GzipFile contains the code: if mode is None: if hasattr(fileobj, 'mode'): mode = fileobj.mode else: mode = 'rb' which will set the mode of the GzipFile to "w", because of the line: transient public String mode = "w"; in the file: jython/jython/org/python/modules/cStringIO.java An off-the-top-of-my-head fix would be to change the constructor taking a string from: StringIO(String buf) { this.buf = new char[buf.length() + 16]; write(buf); seek(0); } to: StringIO(String buf) { this.buf = new char[buf.length() + 16]; this.mode ="r"; write(buf); seek(0); } Please feel free to email me at bw...@la... if you need any more details, or explanation. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=1020517&group_id=12867 |
From: SourceForge.net <no...@so...> - 2005-08-23 20:20:26
|
Bugs item #1020517, was opened at 2004-09-01 17:59 Message generated for change (Comment added) made by sgala You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=1020517&group_id=12867 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: Library Group: None Status: Open Resolution: None Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: cStringIO mode attribute not set. Initial Comment: I'm trying to get the Universal Feed Parser to run under Jython, and I'm running into a problem where creating a cStringIO object from a string doesn't change the mode to "rb", and so the code doesn't know that it can read from the string. Specifically, the code I'm trying to execute is: data = gzip.GzipFile(fileobj=_StringIO(data)).read() and GzipFile contains the code: if mode is None: if hasattr(fileobj, 'mode'): mode = fileobj.mode else: mode = 'rb' which will set the mode of the GzipFile to "w", because of the line: transient public String mode = "w"; in the file: jython/jython/org/python/modules/cStringIO.java An off-the-top-of-my-head fix would be to change the constructor taking a string from: StringIO(String buf) { this.buf = new char[buf.length() + 16]; write(buf); seek(0); } to: StringIO(String buf) { this.buf = new char[buf.length() + 16]; this.mode ="r"; write(buf); seek(0); } Please feel free to email me at bw...@la... if you need any more details, or explanation. ---------------------------------------------------------------------- Comment By: Santiago Gala (sgala) Date: 2005-08-23 22:20 Message: Logged In: YES user_id=178886 I'm about to send a patch that fixes this and another error in the same class. With this patch cStringIO works with feedparser.py basically, I commented the mode line, as StringIO does not have a mode attribute, and also I needed to insert an else (obvious bug) at the end of seek, as it was always resetting pos to 0. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=1020517&group_id=12867 |
From: SourceForge.net <no...@so...> - 2005-08-26 09:49:18
|
Bugs item #1020517, was opened at 2004-09-01 17:59 Message generated for change (Comment added) made by sgala You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=1020517&group_id=12867 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: Library Group: None Status: Open Resolution: None Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: cStringIO mode attribute not set. Initial Comment: I'm trying to get the Universal Feed Parser to run under Jython, and I'm running into a problem where creating a cStringIO object from a string doesn't change the mode to "rb", and so the code doesn't know that it can read from the string. Specifically, the code I'm trying to execute is: data = gzip.GzipFile(fileobj=_StringIO(data)).read() and GzipFile contains the code: if mode is None: if hasattr(fileobj, 'mode'): mode = fileobj.mode else: mode = 'rb' which will set the mode of the GzipFile to "w", because of the line: transient public String mode = "w"; in the file: jython/jython/org/python/modules/cStringIO.java An off-the-top-of-my-head fix would be to change the constructor taking a string from: StringIO(String buf) { this.buf = new char[buf.length() + 16]; write(buf); seek(0); } to: StringIO(String buf) { this.buf = new char[buf.length() + 16]; this.mode ="r"; write(buf); seek(0); } Please feel free to email me at bw...@la... if you need any more details, or explanation. ---------------------------------------------------------------------- Comment By: Santiago Gala (sgala) Date: 2005-08-26 11:49 Message: Logged In: YES user_id=178886 I found and solved this bug. Patch is request number 1267425. I hope this will make into next release There are two separate problems: - jython's cStringIO sets (through reflection) name and mode attributes for the created stream. Mode is wrong, always 'w', and name is used by gzip as a hint that the stream is coming from a file. Furthermore, cStringIO in cPython does not set these attributes. - There is a bug in seek, where the second parameter is completely ignored (an else missing) Output from jython: Jython 2.2a1 on java1.4.2 (JIT: jitc) Type "copyright", "credits" or "license" for more information. >>> import cStringIO >>> a=cStringIO.StringIO("Hello, world!") >>> dir(a) ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__repr__', '__setattr__', '__str__', 'atty', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'mode', 'name', 'read', 'readline', 'readlineNoNl', 'readlines', 'reset', 'seek', 'softspace', 'tell', 'truncate', 'value', 'write', 'writeChar', 'writelines'] >>> a.name '<cStringIO>' >>> a.mode 'w' >>> Output from python 2.2 >>> import cStringIO >>> a=cStringIO.StringIO("Hello, world!") >>> dir(a) ['close', 'flush', 'getvalue', 'isatty', 'read', 'readline', 'readlines', 'reset', 'seek', 'tell', 'truncate'] >>> a.name Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: name >>> a.mode Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: mode Output from python 2.3 >>> import cStringIO >>> a=cStringIO.StringIO("Hello, world!") >>> dir(a) ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'next', 'read', 'readline', 'readlines', 'reset', 'seek', 'tell', 'truncate'] >>> a.name Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'cStringIO.StringI' object has no attribute 'name' >>> a.mode Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'cStringIO.StringI' object has no attribute 'mode' Output from python 2.4 >>> import cStringIO >>> a=cStringIO.StringIO("Hello, world!") >>> dir(a) ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'next', 'read', 'readline', 'readlines', 'reset', 'seek', 'tell', 'truncate'] >>> a.name Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'cStringIO.StringI' object has no attribute 'name' >>> a.mode Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'cStringIO.StringI' object has no attribute 'mode' ---------------------------------------------------------------------- Comment By: Santiago Gala (sgala) Date: 2005-08-23 22:20 Message: Logged In: YES user_id=178886 I'm about to send a patch that fixes this and another error in the same class. With this patch cStringIO works with feedparser.py basically, I commented the mode line, as StringIO does not have a mode attribute, and also I needed to insert an else (obvious bug) at the end of seek, as it was always resetting pos to 0. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=1020517&group_id=12867 |
From: SourceForge.net <no...@so...> - 2006-05-15 02:51:14
|
Bugs item #1020517, was opened at 2004-09-01 15:59 Message generated for change (Comment added) made by fwierzbicki You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=1020517&group_id=12867 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: Library Group: None >Status: Closed >Resolution: Fixed Priority: 5 Submitted By: Nobody/Anonymous (nobody) Assigned to: Nobody/Anonymous (nobody) Summary: cStringIO mode attribute not set. Initial Comment: I'm trying to get the Universal Feed Parser to run under Jython, and I'm running into a problem where creating a cStringIO object from a string doesn't change the mode to "rb", and so the code doesn't know that it can read from the string. Specifically, the code I'm trying to execute is: data = gzip.GzipFile(fileobj=_StringIO(data)).read() and GzipFile contains the code: if mode is None: if hasattr(fileobj, 'mode'): mode = fileobj.mode else: mode = 'rb' which will set the mode of the GzipFile to "w", because of the line: transient public String mode = "w"; in the file: jython/jython/org/python/modules/cStringIO.java An off-the-top-of-my-head fix would be to change the constructor taking a string from: StringIO(String buf) { this.buf = new char[buf.length() + 16]; write(buf); seek(0); } to: StringIO(String buf) { this.buf = new char[buf.length() + 16]; this.mode ="r"; write(buf); seek(0); } Please feel free to email me at bw...@la... if you need any more details, or explanation. ---------------------------------------------------------------------- >Comment By: Frank Wierzbicki (fwierzbicki) Date: 2006-05-15 02:51 Message: Logged In: YES user_id=193969 I'm going to accept the patch mentioned here. See the patch comments for more. ---------------------------------------------------------------------- Comment By: Santiago Gala (sgala) Date: 2005-08-26 09:49 Message: Logged In: YES user_id=178886 I found and solved this bug. Patch is request number 1267425. I hope this will make into next release There are two separate problems: - jython's cStringIO sets (through reflection) name and mode attributes for the created stream. Mode is wrong, always 'w', and name is used by gzip as a hint that the stream is coming from a file. Furthermore, cStringIO in cPython does not set these attributes. - There is a bug in seek, where the second parameter is completely ignored (an else missing) Output from jython: Jython 2.2a1 on java1.4.2 (JIT: jitc) Type "copyright", "credits" or "license" for more information. >>> import cStringIO >>> a=cStringIO.StringIO("Hello, world!") >>> dir(a) ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__repr__', '__setattr__', '__str__', 'atty', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'mode', 'name', 'read', 'readline', 'readlineNoNl', 'readlines', 'reset', 'seek', 'softspace', 'tell', 'truncate', 'value', 'write', 'writeChar', 'writelines'] >>> a.name '<cStringIO>' >>> a.mode 'w' >>> Output from python 2.2 >>> import cStringIO >>> a=cStringIO.StringIO("Hello, world!") >>> dir(a) ['close', 'flush', 'getvalue', 'isatty', 'read', 'readline', 'readlines', 'reset', 'seek', 'tell', 'truncate'] >>> a.name Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: name >>> a.mode Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: mode Output from python 2.3 >>> import cStringIO >>> a=cStringIO.StringIO("Hello, world!") >>> dir(a) ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'next', 'read', 'readline', 'readlines', 'reset', 'seek', 'tell', 'truncate'] >>> a.name Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'cStringIO.StringI' object has no attribute 'name' >>> a.mode Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'cStringIO.StringI' object has no attribute 'mode' Output from python 2.4 >>> import cStringIO >>> a=cStringIO.StringIO("Hello, world!") >>> dir(a) ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'close', 'closed', 'flush', 'getvalue', 'isatty', 'next', 'read', 'readline', 'readlines', 'reset', 'seek', 'tell', 'truncate'] >>> a.name Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'cStringIO.StringI' object has no attribute 'name' >>> a.mode Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: 'cStringIO.StringI' object has no attribute 'mode' ---------------------------------------------------------------------- Comment By: Santiago Gala (sgala) Date: 2005-08-23 20:20 Message: Logged In: YES user_id=178886 I'm about to send a patch that fixes this and another error in the same class. With this patch cStringIO works with feedparser.py basically, I commented the mode line, as StringIO does not have a mode attribute, and also I needed to insert an else (obvious bug) at the end of seek, as it was always resetting pos to 0. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=112867&aid=1020517&group_id=12867 |