mirror of
https://github.com/msgpack/msgpack-python.git
synced 2025-12-08 06:09:49 +00:00
Split exceptions.
This commit is contained in:
parent
dd5c76b955
commit
219d47503c
4 changed files with 45 additions and 13 deletions
|
|
@ -38,8 +38,13 @@ cdef extern from "pack.h":
|
|||
cdef int DEFAULT_RECURSE_LIMIT=511
|
||||
|
||||
|
||||
class BufferFull(Exception):
|
||||
pass
|
||||
from msgpack.exceptions import (
|
||||
UnpackException,
|
||||
BufferFull,
|
||||
OutOfData,
|
||||
UnpackValueError,
|
||||
ExtraData,
|
||||
)
|
||||
|
||||
|
||||
cdef class Packer(object):
|
||||
|
|
@ -102,7 +107,7 @@ cdef class Packer(object):
|
|||
cdef dict d
|
||||
|
||||
if nest_limit < 0:
|
||||
raise ValueError("Too deep.")
|
||||
raise UnpackValueError("recursion limit exceeded.")
|
||||
|
||||
if o is None:
|
||||
ret = msgpack_pack_nil(&self.pk)
|
||||
|
|
@ -296,7 +301,7 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
|
|||
if ret == 1:
|
||||
obj = template_data(&ctx)
|
||||
if off < buf_len:
|
||||
raise ValueError("Extra data.")
|
||||
raise ExtraData(obj, PyBytes_FromStringAndSize(buf+off, buf_len-off))
|
||||
return obj
|
||||
else:
|
||||
return None
|
||||
|
|
@ -479,7 +484,7 @@ cdef class Unpacker(object):
|
|||
else:
|
||||
self.file_like = None
|
||||
|
||||
cdef object _unpack(self, execute_fn execute, object write_bytes):
|
||||
cdef object _unpack(self, execute_fn execute, object write_bytes, bint iter=0):
|
||||
cdef int ret
|
||||
cdef object obj
|
||||
cdef size_t prev_head
|
||||
|
|
@ -497,7 +502,10 @@ cdef class Unpacker(object):
|
|||
if self.file_like is not None:
|
||||
self.read_from_file()
|
||||
continue
|
||||
if iter:
|
||||
raise StopIteration("No more data to unpack.")
|
||||
else:
|
||||
raise OutOfData("No more data to unpack.")
|
||||
else:
|
||||
raise ValueError("Unpack failed: error = %d" % (ret,))
|
||||
|
||||
|
|
@ -539,7 +547,7 @@ cdef class Unpacker(object):
|
|||
return self
|
||||
|
||||
def __next__(self):
|
||||
return self._unpack(template_construct, None)
|
||||
return self._unpack(template_construct, None, 1)
|
||||
|
||||
# for debug.
|
||||
#def _buf(self):
|
||||
|
|
|
|||
23
msgpack/exceptions.py
Normal file
23
msgpack/exceptions.py
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
class UnpackException(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class BufferFull(UnpackException):
|
||||
pass
|
||||
|
||||
|
||||
class OutOfData(UnpackException):
|
||||
pass
|
||||
|
||||
|
||||
class UnpackValueError(UnpackException, ValueError):
|
||||
pass
|
||||
|
||||
|
||||
class ExtraData(ValueError):
|
||||
def __init__(self, unpacked, extra):
|
||||
self.unpacked = unpacked
|
||||
self.extra = extra
|
||||
|
||||
def __str__(self):
|
||||
return "unpack(b) recieved extra data."
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
"""Test Unpacker's read_array_header and read_map_header methods"""
|
||||
from msgpack import packb, Unpacker
|
||||
from msgpack import packb, Unpacker, OutOfData
|
||||
UnexpectedTypeException = ValueError
|
||||
|
||||
def test_read_array_header():
|
||||
|
|
@ -12,7 +12,7 @@ def test_read_array_header():
|
|||
try:
|
||||
unpacker.unpack()
|
||||
assert 0, 'should raise exception'
|
||||
except StopIteration:
|
||||
except OutOfData:
|
||||
assert 1, 'okay'
|
||||
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ def test_read_map_header():
|
|||
try:
|
||||
unpacker.unpack()
|
||||
assert 0, 'should raise exception'
|
||||
except StopIteration:
|
||||
except OutOfData:
|
||||
assert 1, 'okay'
|
||||
|
||||
def test_incorrect_type_array():
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
import six
|
||||
from msgpack import Unpacker, BufferFull
|
||||
from msgpack.exceptions import OutOfData
|
||||
import nose
|
||||
|
||||
def test_foobar():
|
||||
|
|
@ -17,7 +18,7 @@ def test_foobar():
|
|||
try:
|
||||
o = unpacker.unpack()
|
||||
assert 0, "should raise exception"
|
||||
except StopIteration:
|
||||
except OutOfData:
|
||||
assert 1, "ok"
|
||||
|
||||
unpacker.feed(b'foo')
|
||||
|
|
@ -41,7 +42,7 @@ def test_foobar_skip():
|
|||
try:
|
||||
o = unpacker.unpack()
|
||||
assert 0, "should raise exception"
|
||||
except StopIteration:
|
||||
except OutOfData:
|
||||
assert 1, "ok"
|
||||
|
||||
def test_maxbuffersize():
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue