Amaury Forgeot d'Arc added the comment:
> But that will still be within the TextIOWrapper itself, right?
Yes. And I just noticed that the _io module (the C version) will also buffer
encoded bytes, up to f._CHUNK_SIZE.
On the other hand, TextIOWrapper is broken for buffering codecs, encode() is
never called with final=True
>>> import io
>>> buffer = io.BytesIO() # <-- not really buffered, right?
>>> output = io.TextIOWrapper(buffer, encoding='idna')
>>> output.write("www.somesite.com")
16
>>> print(buffer.getvalue())
b'' # <-- ok, _CHUNK_SIZE buffering
>>> output.flush()
>>> print(buffer.getvalue())
b'www.somesite.' # <-- the last word is missing!
>>> output.close()
>>> print(buffer.getvalue())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file.
And it's even worse with python 2.7::
>>> import io as io
>>> buffer = io.BytesIO()
>>> output = io.TextIOWrapper(buffer, encoding='idna')
>>> output.write("www.somesite.com")
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
TypeError: must be unicode, not str
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue17404>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com