summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.rst1
-rw-r--r--msgpack/_msgpack.pyx33
-rw-r--r--msgpack/_version.py2
-rw-r--r--setup.py2
-rw-r--r--test/test_buffer.py4
-rw-r--r--test/test_case.py6
-rw-r--r--test/test_format.py4
-rw-r--r--test/test_obj.py10
-rw-r--r--test/test_pack.py25
-rw-r--r--test/test_seq.py2
-rw-r--r--test/test_sequnpack.py6
11 files changed, 55 insertions, 40 deletions
diff --git a/ChangeLog.rst b/ChangeLog.rst
index fe5b820..6a4d27b 100644
--- a/ChangeLog.rst
+++ b/ChangeLog.rst
@@ -13,6 +13,7 @@ Changes
Changes
-------
+* Warn when use_list is not specified. It's default value will be changed in 0.3.
Bugs fixed
-----------
diff --git a/msgpack/_msgpack.pyx b/msgpack/_msgpack.pyx
index b6d8e8b..dca6237 100644
--- a/msgpack/_msgpack.pyx
+++ b/msgpack/_msgpack.pyx
@@ -1,12 +1,16 @@
# coding: utf-8
#cython: embedsignature=True
+import warnings
+
from cpython cimport *
cdef extern from "Python.h":
ctypedef char* const_char_ptr "const char*"
ctypedef char* const_void_ptr "const void*"
ctypedef struct PyObject
cdef int PyObject_AsReadBuffer(object o, const_void_ptr* buff, Py_ssize_t* buf_len) except -1
+ char* __FILE__
+ int __LINE__
from libc.stdlib cimport *
from libc.string cimport *
@@ -195,7 +199,7 @@ def packb(object o, default=None, encoding='utf-8', unicode_errors='strict', use
cdef extern from "unpack.h":
ctypedef struct msgpack_user:
- int use_list
+ bint use_list
PyObject* object_hook
bint has_pairs_hook # call object_hook with k-v pairs
PyObject* list_hook
@@ -255,8 +259,9 @@ cdef inline init_ctx(template_context *ctx, object object_hook, object object_pa
_berrors = unicode_errors
ctx.user.unicode_errors = PyBytes_AsString(_berrors)
-def unpackb(object packed, object object_hook=None, object object_pairs_hook=None, object list_hook=None,
- bint use_list=0, encoding=None, unicode_errors="strict",
+def unpackb(object packed, object object_hook=None, object list_hook=None,
+ use_list=None, encoding=None, unicode_errors="strict",
+ object_pairs_hook=None,
):
"""Unpack packed_bytes to object. Returns an unpacked object.
@@ -268,8 +273,12 @@ def unpackb(object packed, object object_hook=None, object object_pairs_hook=Non
cdef char* buf
cdef Py_ssize_t buf_len
+
PyObject_AsReadBuffer(packed, <const_void_ptr*>&buf, &buf_len)
+ if use_list is None:
+ warnings.warn("Set use_list explicitly.", category=DeprecationWarning, stacklevel=1)
+ use_list = 0
init_ctx(&ctx, object_hook, object_pairs_hook, list_hook, use_list, encoding, unicode_errors)
ret = template_execute(&ctx, buf, buf_len, &off, 1)
if ret == 1:
@@ -281,13 +290,17 @@ def unpackb(object packed, object object_hook=None, object object_pairs_hook=Non
return None
-def unpack(object stream, object object_hook=None, object object_pairs_hook=None, object list_hook=None,
- bint use_list=0, encoding=None, unicode_errors="strict",
+def unpack(object stream, object object_hook=None, object list_hook=None,
+ use_list=None, encoding=None, unicode_errors="strict",
+ object_pairs_hook=None,
):
"""Unpack an object from `stream`.
Raises `ValueError` when `stream` has extra bytes.
"""
+ if use_list is None:
+ warnings.warn("Set use_list explicitly.", category=DeprecationWarning, stacklevel=1)
+ use_list = 0
return unpackb(stream.read(), use_list=use_list,
object_hook=object_hook, object_pairs_hook=object_pairs_hook, list_hook=list_hook,
encoding=encoding, unicode_errors=unicode_errors,
@@ -306,7 +319,7 @@ cdef class Unpacker(object):
(default: min(1024**2, max_buffer_size))
If `use_list` is true, msgpack list is deserialized to Python list.
- Otherwise, it is deserialized to Python tuple. (default: False)
+ Otherwise, it is deserialized to Python tuple.
`object_hook` is same to simplejson. If it is not None, it should be callable
and Unpacker calls it with a dict argument after deserializing a map.
@@ -347,7 +360,6 @@ cdef class Unpacker(object):
cdef object file_like
cdef object file_like_read
cdef Py_ssize_t read_size
- cdef bint use_list
cdef object object_hook
cdef object _bencoding
cdef object _berrors
@@ -362,11 +374,14 @@ cdef class Unpacker(object):
free(self.buf)
self.buf = NULL
- def __init__(self, file_like=None, Py_ssize_t read_size=0, bint use_list=0,
+ def __init__(self, file_like=None, Py_ssize_t read_size=0, use_list=None,
object object_hook=None, object object_pairs_hook=None, object list_hook=None,
encoding=None, unicode_errors='strict', int max_buffer_size=0,
):
- self.use_list = use_list
+ if use_list is None:
+ warnings.warn("Set use_list explicitly.", category=DeprecationWarning, stacklevel=1)
+ use_list = 0
+
self.file_like = file_like
if file_like:
self.file_like_read = file_like.read
diff --git a/msgpack/_version.py b/msgpack/_version.py
index f343b7a..9bffd02 100644
--- a/msgpack/_version.py
+++ b/msgpack/_version.py
@@ -1 +1 @@
-version = (0, 2, 2)
+version = (0, 2, 3, 'dev1')
diff --git a/setup.py b/setup.py
index 86b0b34..9f0ce5d 100644
--- a/setup.py
+++ b/setup.py
@@ -18,7 +18,7 @@ except ImportError:
def cythonize(src):
sys.stderr.write("cythonize: %r\n" % (src,))
- cython_compiler.compile([src])
+ cython_compiler.compile([src], emit_linenums=True)
def ensure_source(src):
pyx = os.path.splitext(src)[0] + '.pyx'
diff --git a/test/test_buffer.py b/test/test_buffer.py
index 01310a0..785fb60 100644
--- a/test/test_buffer.py
+++ b/test/test_buffer.py
@@ -9,8 +9,8 @@ def test_unpack_buffer():
from array import array
buf = array('b')
buf.fromstring(packb(('foo', 'bar')))
- obj = unpackb(buf)
- assert_equal((b'foo', b'bar'), obj)
+ obj = unpackb(buf, use_list=1)
+ assert_equal([b'foo', b'bar'], obj)
if __name__ == '__main__':
main()
diff --git a/test/test_case.py b/test/test_case.py
index b88714d..9cbf9bd 100644
--- a/test/test_case.py
+++ b/test/test_case.py
@@ -9,7 +9,7 @@ from msgpack import packb, unpackb
def check(length, obj):
v = packb(obj)
assert_equal(len(v), length, "%r length should be %r but get %r" % (obj, length, len(v)))
- assert_equal(unpackb(v), obj)
+ assert_equal(unpackb(v, use_list=0), obj)
def test_1():
for o in [None, True, False, 0, 1, (1 << 6), (1 << 7) - 1, -1,
@@ -71,7 +71,7 @@ def test_array32():
def match(obj, buf):
assert_equal(packb(obj), buf)
- assert_equal(unpackb(buf), obj)
+ assert_equal(unpackb(buf, use_list=0), obj)
def test_match():
cases = [
@@ -99,7 +99,7 @@ def test_match():
match(v, p)
def test_unicode():
- assert_equal(b'foobar', unpackb(packb('foobar')))
+ assert_equal(b'foobar', unpackb(packb('foobar'), use_list=1))
if __name__ == '__main__':
main()
diff --git a/test/test_format.py b/test/test_format.py
index c03b3e2..ac08709 100644
--- a/test/test_format.py
+++ b/test/test_format.py
@@ -5,8 +5,8 @@ from nose import main
from nose.tools import *
from msgpack import unpackb
-def check(src, should):
- assert_equal(unpackb(src), should)
+def check(src, should, use_list=0):
+ assert_equal(unpackb(src, use_list=use_list), should)
def testSimpleValue():
check(b"\x93\xc0\xc2\xc3",
diff --git a/test/test_obj.py b/test/test_obj.py
index e0d89fc..12a149f 100644
--- a/test/test_obj.py
+++ b/test/test_obj.py
@@ -18,12 +18,12 @@ def _encode_complex(obj):
def test_encode_hook():
packed = packb([3, 1+2j], default=_encode_complex)
- unpacked = unpackb(packed)
+ unpacked = unpackb(packed, use_list=1)
eq_(unpacked[1], {b'__complex__': True, b'real': 1, b'imag': 2})
def test_decode_hook():
packed = packb([3, {b'__complex__': True, b'real': 1, b'imag': 2}])
- unpacked = unpackb(packed, object_hook=_decode_complex)
+ unpacked = unpackb(packed, object_hook=_decode_complex, use_list=1)
eq_(unpacked[1], 1+2j)
def test_decode_pairs_hook():
@@ -34,19 +34,19 @@ def test_decode_pairs_hook():
@raises(ValueError)
def test_only_one_obj_hook():
- unpackb('', object_hook=lambda x: x, object_pairs_hook=lambda x: x)
+ unpackb(b'', object_hook=lambda x: x, object_pairs_hook=lambda x: x)
@raises(ValueError)
def test_bad_hook():
packed = packb([3, 1+2j], default=lambda o: o)
- unpacked = unpackb(packed)
+ unpacked = unpackb(packed, use_list=1)
def _arr_to_str(arr):
return ''.join(str(c) for c in arr)
def test_array_hook():
packed = packb([1,2,3])
- unpacked = unpackb(packed, list_hook=_arr_to_str)
+ unpacked = unpackb(packed, list_hook=_arr_to_str, use_list=1)
eq_(unpacked, '123')
if __name__ == '__main__':
diff --git a/test/test_pack.py b/test/test_pack.py
index 2c99873..9009d35 100644
--- a/test/test_pack.py
+++ b/test/test_pack.py
@@ -11,8 +11,8 @@ from msgpack import packb, unpackb, Unpacker, Packer
from io import BytesIO
-def check(data):
- re = unpackb(packb(data))
+def check(data, use_list=False):
+ re = unpackb(packb(data), use_list=use_list)
assert_equal(re, data)
def testPack():
@@ -31,14 +31,14 @@ def testPack():
def testPackUnicode():
test_data = [
- six.u(""), six.u("abcd"), (six.u("defgh"),), six.u("Русский текст"),
+ six.u(""), six.u("abcd"), [six.u("defgh")], six.u("Русский текст"),
]
for td in test_data:
- re = unpackb(packb(td, encoding='utf-8'), encoding='utf-8')
+ re = unpackb(packb(td, encoding='utf-8'), use_list=1, encoding='utf-8')
assert_equal(re, td)
packer = Packer(encoding='utf-8')
data = packer.pack(td)
- re = Unpacker(BytesIO(data), encoding='utf-8').unpack()
+ re = Unpacker(BytesIO(data), encoding='utf-8', use_list=1).unpack()
assert_equal(re, td)
def testPackUTF32():
@@ -46,11 +46,11 @@ def testPackUTF32():
test_data = [
six.u(""),
six.u("abcd"),
- (six.u("defgh"),),
+ [six.u("defgh")],
six.u("Русский текст"),
]
for td in test_data:
- re = unpackb(packb(td, encoding='utf-32'), encoding='utf-32')
+ re = unpackb(packb(td, encoding='utf-32'), use_list=1, encoding='utf-32')
assert_equal(re, td)
except LookupError:
raise SkipTest
@@ -63,20 +63,19 @@ def testPackBytes():
check(td)
def testIgnoreUnicodeErrors():
- re = unpackb(packb(b'abc\xeddef'),
- encoding='utf-8', unicode_errors='ignore')
+ re = unpackb(packb(b'abc\xeddef'), encoding='utf-8', unicode_errors='ignore', use_list=1)
assert_equal(re, "abcdef")
@raises(UnicodeDecodeError)
def testStrictUnicodeUnpack():
- unpackb(packb(b'abc\xeddef'), encoding='utf-8')
+ unpackb(packb(b'abc\xeddef'), encoding='utf-8', use_list=1)
@raises(UnicodeEncodeError)
def testStrictUnicodePack():
packb(six.u("abc\xeddef"), encoding='ascii', unicode_errors='strict')
def testIgnoreErrorsPack():
- re = unpackb(packb(six.u("abcФФФdef"), encoding='ascii', unicode_errors='ignore'), encoding='utf-8')
+ re = unpackb(packb(six.u("abcФФФdef"), encoding='ascii', unicode_errors='ignore'), encoding='utf-8', use_list=1)
assert_equal(re, six.u("abcdef"))
@raises(TypeError)
@@ -84,7 +83,7 @@ def testNoEncoding():
packb(six.u("abc"), encoding=None)
def testDecodeBinary():
- re = unpackb(packb("abc"), encoding=None)
+ re = unpackb(packb("abc"), encoding=None, use_list=1)
assert_equal(re, b"abc")
def testPackFloat():
@@ -110,7 +109,7 @@ class odict(dict):
def test_odict():
seq = [(b'one', 1), (b'two', 2), (b'three', 3), (b'four', 4)]
od = odict(seq)
- assert_equal(unpackb(packb(od)), dict(seq))
+ assert_equal(unpackb(packb(od), use_list=1), dict(seq))
def pair_hook(seq):
return seq
assert_equal(unpackb(packb(od), object_pairs_hook=pair_hook), seq)
diff --git a/test/test_seq.py b/test/test_seq.py
index d0f9ccc..72e935a 100644
--- a/test/test_seq.py
+++ b/test/test_seq.py
@@ -34,7 +34,7 @@ def test_exceeding_unpacker_read_size():
f = io.BytesIO(dumpf.getvalue())
dumpf.close()
- unpacker = msgpack.Unpacker(f, read_size=read_size)
+ unpacker = msgpack.Unpacker(f, read_size=read_size, use_list=1)
read_count = 0
for idx, o in enumerate(unpacker):
diff --git a/test/test_sequnpack.py b/test/test_sequnpack.py
index aa47d3c..dac36a8 100644
--- a/test/test_sequnpack.py
+++ b/test/test_sequnpack.py
@@ -5,7 +5,7 @@ from msgpack import Unpacker, BufferFull
import nose
def test_foobar():
- unpacker = Unpacker(read_size=3)
+ unpacker = Unpacker(read_size=3, use_list=1)
unpacker.feed(b'foobar')
assert unpacker.unpack() == ord(b'f')
assert unpacker.unpack() == ord(b'o')
@@ -29,7 +29,7 @@ def test_foobar():
assert k == len(b'foobar')
def test_foobar_skip():
- unpacker = Unpacker(read_size=3)
+ unpacker = Unpacker(read_size=3, use_list=1)
unpacker.feed(b'foobar')
assert unpacker.unpack() == ord(b'f')
unpacker.skip()
@@ -45,7 +45,7 @@ def test_foobar_skip():
def test_maxbuffersize():
nose.tools.assert_raises(ValueError, Unpacker, read_size=5, max_buffer_size=3)
- unpacker = Unpacker(read_size=3, max_buffer_size=3)
+ unpacker = Unpacker(read_size=3, max_buffer_size=3, use_list=1)
unpacker.feed(b'fo')
nose.tools.assert_raises(BufferFull, unpacker.feed, b'ob')
unpacker.feed(b'o')