Martin Panter added the comment:

Porting this to Python 2 uncovered a few flaws that I am unsure how to best 
handle. In this patch I have added workarounds, but perhaps we can find better 
fixes.

1. The io.BytesIO.write() C implementation does not accept array.array() 
objects. I suspect it only accepts objects implementing the “new” memoryview() 
buffer protocol, and array() only implements the “old” buffer() protocol.

In Python 2, is array.array() considered a bytes-like object? If so, the 
proposed update to the write() documentation is not consistent. Perhaps it is a 
real bug to fix in the BytesIO implementation. Or is test_array_writes() just 
going too far for Python 2?

I added code to skip the relevant test in test_array_writes(). Maybe it would 
be simplest to document that in general, BufferedIOBase.write() only has to 
accept “new” memoryview()-able objects.

2. The _pyio.BufferedIOBase.readinto() native Python implementation cannot 
assign into arbitrary bytes-like objects. Python 2 does not have 
memoryview.cast("B"), buffer() objects seem to be read-only, and I can’t think 
of any other easy way.

I reverted back to only testing native Python readinto() methods with 
bytearray(). But perhaps it would be best to document that for Python 2, only 
memoryview()-able arrays of bytes are acceptable, which should be practical to  
handle in native Python code.

3. The _pyio.BytesIO.write() and BufferedWriter.write() native Python 
implementations did not handle obscure bytes-like objects well. I added 
buffer() calls to the code. But I am not sure this is a good idea, because it 
will raise warnings with “python -3”. An alternative might be to again only 
require write() to accept memoryview()-able arrays of bytes.

Perhaps the Python 2 definition of “bytes-like object” should be restricted to 
the “new” memoryview() buffer protocol, and to 1-D arrays of bytes. I.e. 
memoryview(byteslike).ndim == 1 and memoryview(byteslike).format == "B".

----------
Added file: http://bugs.python.org/file43033/bytes-like-param.py2.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue20699>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to