mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-11-10 14:31:04 +00:00
Fix tests.
This commit is contained in:
parent
477d3b152f
commit
3478406537
4 changed files with 39 additions and 29 deletions
|
|
@ -1,21 +1,17 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
#cython: embedsignature=True
|
#cython: embedsignature=True
|
||||||
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
from cpython cimport *
|
from cpython cimport *
|
||||||
cdef extern from "Python.h":
|
cdef extern from "Python.h":
|
||||||
ctypedef char* const_char_ptr "const char*"
|
ctypedef char* const_char_ptr "const char*"
|
||||||
ctypedef char* const_void_ptr "const void*"
|
ctypedef char* const_void_ptr "const void*"
|
||||||
ctypedef struct PyObject
|
ctypedef struct PyObject
|
||||||
cdef int PyObject_AsReadBuffer(object o, const_void_ptr* buff, Py_ssize_t* buf_len) except -1
|
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.stdlib cimport *
|
||||||
from libc.string cimport *
|
from libc.string cimport *
|
||||||
from libc.limits cimport *
|
from libc.limits cimport *
|
||||||
|
import warnings
|
||||||
|
|
||||||
cdef extern from "pack.h":
|
cdef extern from "pack.h":
|
||||||
struct msgpack_packer:
|
struct msgpack_packer:
|
||||||
|
|
@ -218,7 +214,9 @@ cdef extern from "unpack.h":
|
||||||
void template_init(template_context* ctx)
|
void template_init(template_context* ctx)
|
||||||
object template_data(template_context* ctx)
|
object template_data(template_context* ctx)
|
||||||
|
|
||||||
cdef inline init_ctx(template_context *ctx, object object_hook, object object_pairs_hook, object list_hook, bint use_list, encoding, unicode_errors):
|
cdef inline init_ctx(template_context *ctx,
|
||||||
|
object object_hook, object object_pairs_hook, object list_hook,
|
||||||
|
bint use_list, char* encoding, char* unicode_errors):
|
||||||
template_init(ctx)
|
template_init(ctx)
|
||||||
ctx.user.use_list = use_list
|
ctx.user.use_list = use_list
|
||||||
ctx.user.object_hook = ctx.user.list_hook = <PyObject*>NULL
|
ctx.user.object_hook = ctx.user.list_hook = <PyObject*>NULL
|
||||||
|
|
@ -244,20 +242,8 @@ cdef inline init_ctx(template_context *ctx, object object_hook, object object_pa
|
||||||
raise TypeError("list_hook must be a callable.")
|
raise TypeError("list_hook must be a callable.")
|
||||||
ctx.user.list_hook = <PyObject*>list_hook
|
ctx.user.list_hook = <PyObject*>list_hook
|
||||||
|
|
||||||
if encoding is None:
|
ctx.user.encoding = encoding
|
||||||
ctx.user.encoding = NULL
|
ctx.user.unicode_errors = unicode_errors
|
||||||
ctx.user.unicode_errors = NULL
|
|
||||||
else:
|
|
||||||
if isinstance(encoding, unicode):
|
|
||||||
_bencoding = encoding.encode('ascii')
|
|
||||||
else:
|
|
||||||
_bencoding = encoding
|
|
||||||
ctx.user.encoding = PyBytes_AsString(_bencoding)
|
|
||||||
if isinstance(unicode_errors, unicode):
|
|
||||||
_berrors = unicode_errors.encode('ascii')
|
|
||||||
else:
|
|
||||||
_berrors = unicode_errors
|
|
||||||
ctx.user.unicode_errors = PyBytes_AsString(_berrors)
|
|
||||||
|
|
||||||
def unpackb(object packed, object object_hook=None, object list_hook=None,
|
def unpackb(object packed, object object_hook=None, object list_hook=None,
|
||||||
use_list=None, encoding=None, unicode_errors="strict",
|
use_list=None, encoding=None, unicode_errors="strict",
|
||||||
|
|
@ -273,13 +259,26 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
|
||||||
|
|
||||||
cdef char* buf
|
cdef char* buf
|
||||||
cdef Py_ssize_t buf_len
|
cdef Py_ssize_t buf_len
|
||||||
|
cdef char* cenc = NULL
|
||||||
|
cdef char* cerr = NULL
|
||||||
|
|
||||||
PyObject_AsReadBuffer(packed, <const_void_ptr*>&buf, &buf_len)
|
PyObject_AsReadBuffer(packed, <const_void_ptr*>&buf, &buf_len)
|
||||||
|
|
||||||
if use_list is None:
|
if use_list is None:
|
||||||
warnings.warn("Set use_list explicitly.", category=DeprecationWarning, stacklevel=1)
|
warnings.warn("Set use_list explicitly.", category=DeprecationWarning, stacklevel=1)
|
||||||
use_list = 0
|
use_list = 0
|
||||||
init_ctx(&ctx, object_hook, object_pairs_hook, list_hook, use_list, encoding, unicode_errors)
|
|
||||||
|
if encoding is not None:
|
||||||
|
if isinstance(encoding, unicode):
|
||||||
|
encoding = encoding.encode('ascii')
|
||||||
|
cenc = PyBytes_AsString(encoding)
|
||||||
|
|
||||||
|
if unicode_errors is not None:
|
||||||
|
if isinstance(unicode_errors, unicode):
|
||||||
|
unicode_errors = unicode_errors.encode('ascii')
|
||||||
|
cerr = PyBytes_AsString(unicode_errors)
|
||||||
|
|
||||||
|
init_ctx(&ctx, object_hook, object_pairs_hook, list_hook, use_list, cenc, cerr)
|
||||||
ret = template_execute(&ctx, buf, buf_len, &off, 1)
|
ret = template_execute(&ctx, buf, buf_len, &off, 1)
|
||||||
if ret == 1:
|
if ret == 1:
|
||||||
obj = template_data(&ctx)
|
obj = template_data(&ctx)
|
||||||
|
|
@ -361,10 +360,7 @@ cdef class Unpacker(object):
|
||||||
cdef object file_like_read
|
cdef object file_like_read
|
||||||
cdef Py_ssize_t read_size
|
cdef Py_ssize_t read_size
|
||||||
cdef object object_hook
|
cdef object object_hook
|
||||||
cdef object _bencoding
|
cdef object encoding, unicode_errors
|
||||||
cdef object _berrors
|
|
||||||
cdef char *encoding
|
|
||||||
cdef char *unicode_errors
|
|
||||||
cdef size_t max_buffer_size
|
cdef size_t max_buffer_size
|
||||||
|
|
||||||
def __cinit__(self):
|
def __cinit__(self):
|
||||||
|
|
@ -378,6 +374,7 @@ cdef class Unpacker(object):
|
||||||
object object_hook=None, object object_pairs_hook=None, object list_hook=None,
|
object object_hook=None, object object_pairs_hook=None, object list_hook=None,
|
||||||
encoding=None, unicode_errors='strict', int max_buffer_size=0,
|
encoding=None, unicode_errors='strict', int max_buffer_size=0,
|
||||||
):
|
):
|
||||||
|
cdef char *cenc=NULL, *cerr=NULL
|
||||||
if use_list is None:
|
if use_list is None:
|
||||||
warnings.warn("Set use_list explicitly.", category=DeprecationWarning, stacklevel=1)
|
warnings.warn("Set use_list explicitly.", category=DeprecationWarning, stacklevel=1)
|
||||||
use_list = 0
|
use_list = 0
|
||||||
|
|
@ -401,7 +398,20 @@ cdef class Unpacker(object):
|
||||||
self.buf_size = read_size
|
self.buf_size = read_size
|
||||||
self.buf_head = 0
|
self.buf_head = 0
|
||||||
self.buf_tail = 0
|
self.buf_tail = 0
|
||||||
init_ctx(&self.ctx, object_hook, object_pairs_hook, list_hook, use_list, encoding, unicode_errors)
|
|
||||||
|
if encoding is not None:
|
||||||
|
if isinstance(encoding, unicode):
|
||||||
|
encoding = encoding.encode('ascii')
|
||||||
|
self.encoding = encoding
|
||||||
|
cenc = PyBytes_AsString(encoding)
|
||||||
|
|
||||||
|
if unicode_errors is not None:
|
||||||
|
if isinstance(unicode_errors, unicode):
|
||||||
|
unicode_errors = unicode_errors.encode('ascii')
|
||||||
|
self.unicode_errors = unicode_errors
|
||||||
|
cerr = PyBytes_AsString(unicode_errors)
|
||||||
|
|
||||||
|
init_ctx(&self.ctx, object_hook, object_pairs_hook, list_hook, use_list, cenc, cerr)
|
||||||
|
|
||||||
def feed(self, object next_bytes):
|
def feed(self, object next_bytes):
|
||||||
cdef char* buf
|
cdef char* buf
|
||||||
|
|
|
||||||
2
setup.py
2
setup.py
|
|
@ -18,7 +18,7 @@ except ImportError:
|
||||||
|
|
||||||
def cythonize(src):
|
def cythonize(src):
|
||||||
sys.stderr.write("cythonize: %r\n" % (src,))
|
sys.stderr.write("cythonize: %r\n" % (src,))
|
||||||
cython_compiler.compile([src], emit_linenums=True)
|
cython_compiler.compile([src])
|
||||||
|
|
||||||
def ensure_source(src):
|
def ensure_source(src):
|
||||||
pyx = os.path.splitext(src)[0] + '.pyx'
|
pyx = os.path.splitext(src)[0] + '.pyx'
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ def test_decode_pairs_hook():
|
||||||
|
|
||||||
@raises(ValueError)
|
@raises(ValueError)
|
||||||
def test_only_one_obj_hook():
|
def test_only_one_obj_hook():
|
||||||
unpackb(b'', object_hook=lambda x: x, object_pairs_hook=lambda x: x)
|
unpackb(b'', object_hook=lambda x: x, object_pairs_hook=lambda x: x, use_list=1)
|
||||||
|
|
||||||
@raises(ValueError)
|
@raises(ValueError)
|
||||||
def test_bad_hook():
|
def test_bad_hook():
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ def test_foobar_skip():
|
||||||
assert 1, "ok"
|
assert 1, "ok"
|
||||||
|
|
||||||
def test_maxbuffersize():
|
def test_maxbuffersize():
|
||||||
nose.tools.assert_raises(ValueError, Unpacker, read_size=5, max_buffer_size=3)
|
nose.tools.assert_raises(ValueError, Unpacker, read_size=5, max_buffer_size=3, use_list=1)
|
||||||
unpacker = Unpacker(read_size=3, max_buffer_size=3, use_list=1)
|
unpacker = Unpacker(read_size=3, max_buffer_size=3, use_list=1)
|
||||||
unpacker.feed(b'fo')
|
unpacker.feed(b'fo')
|
||||||
nose.tools.assert_raises(BufferFull, unpacker.feed, b'ob')
|
nose.tools.assert_raises(BufferFull, unpacker.feed, b'ob')
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue