Hello,
during my work on PEP-3118 fixes I noticed that memoryview does not handle
the "B" format specifier according to the struct module documentation:
Here's what struct does:
>>> b = bytearray([1,2,3])
>>> struct.pack_into('B', b, 0, b'X')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: required argument is not an integer
>>> struct.pack_into('c', b, 0, b'X')
>>> b
bytearray(b'X\x02\x03')
Here's what memoryview does:
>>> b = bytearray([1,2,3])
>>> m = memoryview(b)
>>> m.format
'B'
>>> m[0] = b'X'
>>> m[0] = 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' does not support the buffer interface
So, memoryview does exactly the opposite of what is specified. It should
reject the bytes object but accept the integer.
I would like to fix this in the features/pep-3118 repository as follows:
- memoryview should respect the format specifiers.
- bytearray and friends should set the format specifier to "c"
in their getbuffer() methods.
- Introduce a new function PyMemoryView_FromBytes() that can be used
instead of PyMemoryView_FromBuffer(). PyMemoryView_FromBuffer()
is usually used in conjunction with PyBuffer_FillInfo(), which
sets the format specifier to "B".
Are there any general objections to this?
Stefan Krah
_______________________________________________
Python-Dev mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com