summaryrefslogtreecommitdiff
path: root/msgpack/_unpacker.pyx
diff options
context:
space:
mode:
authorAntonio Cuni <anto.cuni@gmail.com>2013-10-19 01:49:03 +0200
committerAntonio Cuni <anto.cuni@gmail.com>2013-10-19 01:49:03 +0200
commitff858387d37d37ec4472f6b6ac7010d8f2b0744f (patch)
tree575f528e68130b8bcaac184a6d5cb2af278e2386 /msgpack/_unpacker.pyx
parenta7485eccb2e5fcebbd76612a658f2e18bdebe745 (diff)
downloadmsgpack-python-ff858387d37d37ec4472f6b6ac7010d8f2b0744f.tar.gz
implement unpack_one also for the cython version, and add a test for it
Diffstat (limited to 'msgpack/_unpacker.pyx')
-rw-r--r--msgpack/_unpacker.pyx18
1 files changed, 18 insertions, 0 deletions
diff --git a/msgpack/_unpacker.pyx b/msgpack/_unpacker.pyx
index 1f4dd85..e05b9ed 100644
--- a/msgpack/_unpacker.pyx
+++ b/msgpack/_unpacker.pyx
@@ -359,6 +359,24 @@ cdef class Unpacker(object):
"""
return self._unpack(unpack_construct, write_bytes)
+ def unpack_one(self, object write_bytes=None):
+ """
+ unpack one object
+
+ If write_bytes is not None, it will be called with parts of the raw
+ message as it is unpacked.
+
+ Raises `UnpackValueError` if there are no more bytes to unpack.
+ Raises ``ExtraData`` if there are still bytes left after the unpacking.
+ """
+ try:
+ result = self.unpack()
+ except OutOfData:
+ raise UnpackValueError("Data is not enough")
+ if self.buf_head < self.buf_tail:
+ raise ExtraData(result, self.buf[self.buf_head:])
+ return result
+
def skip(self, object write_bytes=None):
"""
read and ignore one object, returning None