summaryrefslogtreecommitdiff
path: root/msgpack/fallback.py
diff options
context:
space:
mode:
authorINADA Naoki <methane@users.noreply.github.com>2018-11-09 20:55:13 +0900
committerGitHub <noreply@github.com>2018-11-09 20:55:13 +0900
commit9e210bfc1a922031db67bf42e508b1b4550814c6 (patch)
tree1bbef6a155df89e6fef0a9b5efbae4928fa40772 /msgpack/fallback.py
parenta8b3e97fe588a2411a8e869b52be1946ed9f0f86 (diff)
downloadmsgpack-python-9e210bfc1a922031db67bf42e508b1b4550814c6.tar.gz
Add Packer.buffer() (#320)
Diffstat (limited to 'msgpack/fallback.py')
-rw-r--r--msgpack/fallback.py36
1 files changed, 20 insertions, 16 deletions
diff --git a/msgpack/fallback.py b/msgpack/fallback.py
index 895864e..5b4d6ce 100644
--- a/msgpack/fallback.py
+++ b/msgpack/fallback.py
@@ -860,43 +860,35 @@ class Packer(object):
except:
self._buffer = StringIO() # force reset
raise
- ret = self._buffer.getvalue()
if self._autoreset:
+ ret = self._buffer.getvalue()
self._buffer = StringIO()
- elif USING_STRINGBUILDER:
- self._buffer = StringIO(ret)
- return ret
+ return ret
def pack_map_pairs(self, pairs):
self._pack_map_pairs(len(pairs), pairs)
- ret = self._buffer.getvalue()
if self._autoreset:
+ ret = self._buffer.getvalue()
self._buffer = StringIO()
- elif USING_STRINGBUILDER:
- self._buffer = StringIO(ret)
- return ret
+ return ret
def pack_array_header(self, n):
if n >= 2**32:
raise PackValueError
self._pack_array_header(n)
- ret = self._buffer.getvalue()
if self._autoreset:
+ ret = self._buffer.getvalue()
self._buffer = StringIO()
- elif USING_STRINGBUILDER:
- self._buffer = StringIO(ret)
- return ret
+ return ret
def pack_map_header(self, n):
if n >= 2**32:
raise PackValueError
self._pack_map_header(n)
- ret = self._buffer.getvalue()
if self._autoreset:
+ ret = self._buffer.getvalue()
self._buffer = StringIO()
- elif USING_STRINGBUILDER:
- self._buffer = StringIO(ret)
- return ret
+ return ret
def pack_ext_type(self, typecode, data):
if not isinstance(typecode, int):
@@ -976,7 +968,19 @@ class Packer(object):
raise PackValueError('Bin is too large')
def bytes(self):
+ """Return internal buffer contents as bytes object"""
return self._buffer.getvalue()
def reset(self):
+ """Reset internal buffer.
+
+ This method is usaful only when autoreset=False.
+ """
self._buffer = StringIO()
+
+ def getbuffer(self):
+ """Return view of internal buffer."""
+ if USING_STRINGBUILDER or not PY3:
+ return memoryview(self.bytes())
+ else:
+ return self._buffer.getbuffer()