mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-10-25 14:44:10 +00:00
Remove deprecated write_bytes option (#322)
This commit is contained in:
parent
07f0beeabb
commit
39f8aa78c7
3 changed files with 16 additions and 68 deletions
|
|
@ -135,10 +135,10 @@ cdef inline int get_data_from_buffer(object obj,
|
||||||
if view.itemsize != 1:
|
if view.itemsize != 1:
|
||||||
PyBuffer_Release(view)
|
PyBuffer_Release(view)
|
||||||
raise BufferError("cannot unpack from multi-byte object")
|
raise BufferError("cannot unpack from multi-byte object")
|
||||||
if PyBuffer_IsContiguous(view, 'A') == 0:
|
if PyBuffer_IsContiguous(view, b'A') == 0:
|
||||||
PyBuffer_Release(view)
|
PyBuffer_Release(view)
|
||||||
# create a contiguous copy and get buffer
|
# create a contiguous copy and get buffer
|
||||||
contiguous = PyMemoryView_GetContiguous(obj, PyBUF_READ, 'C')
|
contiguous = PyMemoryView_GetContiguous(obj, PyBUF_READ, b'C')
|
||||||
PyObject_GetBuffer(contiguous, view, PyBUF_SIMPLE)
|
PyObject_GetBuffer(contiguous, view, PyBUF_SIMPLE)
|
||||||
# view must hold the only reference to contiguous,
|
# view must hold the only reference to contiguous,
|
||||||
# so memory is freed when view is released
|
# so memory is freed when view is released
|
||||||
|
|
@ -440,14 +440,11 @@ cdef class Unpacker(object):
|
||||||
else:
|
else:
|
||||||
self.file_like = None
|
self.file_like = None
|
||||||
|
|
||||||
cdef object _unpack(self, execute_fn execute, object write_bytes, bint iter=0):
|
cdef object _unpack(self, execute_fn execute, bint iter=0):
|
||||||
cdef int ret
|
cdef int ret
|
||||||
cdef object obj
|
cdef object obj
|
||||||
cdef Py_ssize_t prev_head
|
cdef Py_ssize_t prev_head
|
||||||
|
|
||||||
if write_bytes is not None:
|
|
||||||
PyErr_WarnEx(DeprecationWarning, "`write_bytes` option is deprecated. Use `.tell()` instead.", 1)
|
|
||||||
|
|
||||||
if self.buf_head >= self.buf_tail and self.file_like is not None:
|
if self.buf_head >= self.buf_tail and self.file_like is not None:
|
||||||
self.read_from_file()
|
self.read_from_file()
|
||||||
|
|
||||||
|
|
@ -461,8 +458,6 @@ cdef class Unpacker(object):
|
||||||
|
|
||||||
ret = execute(&self.ctx, self.buf, self.buf_tail, &self.buf_head)
|
ret = execute(&self.ctx, self.buf, self.buf_tail, &self.buf_head)
|
||||||
self.stream_offset += self.buf_head - prev_head
|
self.stream_offset += self.buf_head - prev_head
|
||||||
if write_bytes is not None:
|
|
||||||
write_bytes(PyBytes_FromStringAndSize(self.buf + prev_head, self.buf_head - prev_head))
|
|
||||||
|
|
||||||
if ret == 1:
|
if ret == 1:
|
||||||
obj = unpack_data(&self.ctx)
|
obj = unpack_data(&self.ctx)
|
||||||
|
|
@ -489,41 +484,35 @@ cdef class Unpacker(object):
|
||||||
ret += self.file_like.read(nbytes - len(ret))
|
ret += self.file_like.read(nbytes - len(ret))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def unpack(self, object write_bytes=None):
|
def unpack(self):
|
||||||
"""Unpack one object
|
"""Unpack one object
|
||||||
|
|
||||||
If write_bytes is not None, it will be called with parts of the raw
|
|
||||||
message as it is unpacked.
|
|
||||||
|
|
||||||
Raises `OutOfData` when there are no more bytes to unpack.
|
Raises `OutOfData` when there are no more bytes to unpack.
|
||||||
"""
|
"""
|
||||||
return self._unpack(unpack_construct, write_bytes)
|
return self._unpack(unpack_construct)
|
||||||
|
|
||||||
def skip(self, object write_bytes=None):
|
def skip(self):
|
||||||
"""Read and ignore one object, returning None
|
"""Read and ignore one object, returning None
|
||||||
|
|
||||||
If write_bytes is not None, it will be called with parts of the raw
|
|
||||||
message as it is unpacked.
|
|
||||||
|
|
||||||
Raises `OutOfData` when there are no more bytes to unpack.
|
Raises `OutOfData` when there are no more bytes to unpack.
|
||||||
"""
|
"""
|
||||||
return self._unpack(unpack_skip, write_bytes)
|
return self._unpack(unpack_skip)
|
||||||
|
|
||||||
def read_array_header(self, object write_bytes=None):
|
def read_array_header(self):
|
||||||
"""assuming the next object is an array, return its size n, such that
|
"""assuming the next object is an array, return its size n, such that
|
||||||
the next n unpack() calls will iterate over its contents.
|
the next n unpack() calls will iterate over its contents.
|
||||||
|
|
||||||
Raises `OutOfData` when there are no more bytes to unpack.
|
Raises `OutOfData` when there are no more bytes to unpack.
|
||||||
"""
|
"""
|
||||||
return self._unpack(read_array_header, write_bytes)
|
return self._unpack(read_array_header)
|
||||||
|
|
||||||
def read_map_header(self, object write_bytes=None):
|
def read_map_header(self):
|
||||||
"""assuming the next object is a map, return its size n, such that the
|
"""assuming the next object is a map, return its size n, such that the
|
||||||
next n * 2 unpack() calls will iterate over its key-value pairs.
|
next n * 2 unpack() calls will iterate over its key-value pairs.
|
||||||
|
|
||||||
Raises `OutOfData` when there are no more bytes to unpack.
|
Raises `OutOfData` when there are no more bytes to unpack.
|
||||||
"""
|
"""
|
||||||
return self._unpack(read_map_header, write_bytes)
|
return self._unpack(read_map_header)
|
||||||
|
|
||||||
def tell(self):
|
def tell(self):
|
||||||
return self.stream_offset
|
return self.stream_offset
|
||||||
|
|
@ -532,7 +521,7 @@ cdef class Unpacker(object):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
return self._unpack(unpack_construct, None, 1)
|
return self._unpack(unpack_construct, 1)
|
||||||
|
|
||||||
# for debug.
|
# for debug.
|
||||||
#def _buf(self):
|
#def _buf(self):
|
||||||
|
|
|
||||||
|
|
@ -640,34 +640,22 @@ class Unpacker(object):
|
||||||
|
|
||||||
next = __next__
|
next = __next__
|
||||||
|
|
||||||
def skip(self, write_bytes=None):
|
def skip(self):
|
||||||
self._unpack(EX_SKIP)
|
self._unpack(EX_SKIP)
|
||||||
if write_bytes is not None:
|
|
||||||
warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning)
|
|
||||||
write_bytes(self._buffer[self._buf_checkpoint:self._buff_i])
|
|
||||||
self._consume()
|
self._consume()
|
||||||
|
|
||||||
def unpack(self, write_bytes=None):
|
def unpack(self):
|
||||||
ret = self._unpack(EX_CONSTRUCT)
|
ret = self._unpack(EX_CONSTRUCT)
|
||||||
if write_bytes is not None:
|
|
||||||
warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning)
|
|
||||||
write_bytes(self._buffer[self._buf_checkpoint:self._buff_i])
|
|
||||||
self._consume()
|
self._consume()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def read_array_header(self, write_bytes=None):
|
def read_array_header(self):
|
||||||
ret = self._unpack(EX_READ_ARRAY_HEADER)
|
ret = self._unpack(EX_READ_ARRAY_HEADER)
|
||||||
if write_bytes is not None:
|
|
||||||
warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning)
|
|
||||||
write_bytes(self._buffer[self._buf_checkpoint:self._buff_i])
|
|
||||||
self._consume()
|
self._consume()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def read_map_header(self, write_bytes=None):
|
def read_map_header(self):
|
||||||
ret = self._unpack(EX_READ_MAP_HEADER)
|
ret = self._unpack(EX_READ_MAP_HEADER)
|
||||||
if write_bytes is not None:
|
|
||||||
warnings.warn("`write_bytes` option is deprecated. Use `.tell()` instead.", DeprecationWarning)
|
|
||||||
write_bytes(self._buffer[self._buf_checkpoint:self._buff_i])
|
|
||||||
self._consume()
|
self._consume()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
"""Tests for cases where the user seeks to obtain packed msgpack objects"""
|
|
||||||
|
|
||||||
import io
|
|
||||||
from msgpack import Unpacker, packb
|
|
||||||
|
|
||||||
|
|
||||||
def test_write_bytes():
|
|
||||||
unpacker = Unpacker()
|
|
||||||
unpacker.feed(b'abc')
|
|
||||||
f = io.BytesIO()
|
|
||||||
assert unpacker.unpack(f.write) == ord('a')
|
|
||||||
assert f.getvalue() == b'a'
|
|
||||||
f = io.BytesIO()
|
|
||||||
assert unpacker.skip(f.write) is None
|
|
||||||
assert f.getvalue() == b'b'
|
|
||||||
f = io.BytesIO()
|
|
||||||
assert unpacker.skip() is None
|
|
||||||
assert f.getvalue() == b''
|
|
||||||
|
|
||||||
|
|
||||||
def test_write_bytes_multi_buffer():
|
|
||||||
long_val = (5) * 100
|
|
||||||
expected = packb(long_val)
|
|
||||||
unpacker = Unpacker(io.BytesIO(expected), read_size=3, max_buffer_size=3)
|
|
||||||
|
|
||||||
f = io.BytesIO()
|
|
||||||
unpacked = unpacker.unpack(f.write)
|
|
||||||
assert unpacked == long_val
|
|
||||||
assert f.getvalue() == expected
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue