@@ -860,43 +860,35 @@ def pack(self, obj):
860860 except :
861861 self ._buffer = StringIO () # force reset
862862 raise
863- ret = self ._buffer .getvalue ()
864863 if self ._autoreset :
864+ ret = self ._buffer .getvalue ()
865865 self ._buffer = StringIO ()
866- elif USING_STRINGBUILDER :
867- self ._buffer = StringIO (ret )
868- return ret
866+ return ret
869867
870868 def pack_map_pairs (self , pairs ):
871869 self ._pack_map_pairs (len (pairs ), pairs )
872- ret = self ._buffer .getvalue ()
873870 if self ._autoreset :
871+ ret = self ._buffer .getvalue ()
874872 self ._buffer = StringIO ()
875- elif USING_STRINGBUILDER :
876- self ._buffer = StringIO (ret )
877- return ret
873+ return ret
878874
879875 def pack_array_header (self , n ):
880876 if n >= 2 ** 32 :
881877 raise PackValueError
882878 self ._pack_array_header (n )
883- ret = self ._buffer .getvalue ()
884879 if self ._autoreset :
880+ ret = self ._buffer .getvalue ()
885881 self ._buffer = StringIO ()
886- elif USING_STRINGBUILDER :
887- self ._buffer = StringIO (ret )
888- return ret
882+ return ret
889883
890884 def pack_map_header (self , n ):
891885 if n >= 2 ** 32 :
892886 raise PackValueError
893887 self ._pack_map_header (n )
894- ret = self ._buffer .getvalue ()
895888 if self ._autoreset :
889+ ret = self ._buffer .getvalue ()
896890 self ._buffer = StringIO ()
897- elif USING_STRINGBUILDER :
898- self ._buffer = StringIO (ret )
899- return ret
891+ return ret
900892
901893 def pack_ext_type (self , typecode , data ):
902894 if not isinstance (typecode , int ):
@@ -976,7 +968,19 @@ def _pack_bin_header(self, n):
976968 raise PackValueError ('Bin is too large' )
977969
978970 def bytes (self ):
971+ """Return internal buffer contents as bytes object"""
979972 return self ._buffer .getvalue ()
980973
981974 def reset (self ):
975+ """Reset internal buffer.
976+
977+ This method is usaful only when autoreset=False.
978+ """
982979 self ._buffer = StringIO ()
980+
981+ def getbuffer (self ):
982+ """Return view of internal buffer."""
983+ if USING_STRINGBUILDER or not PY3 :
984+ return memoryview (self .bytes ())
985+ else :
986+ return self ._buffer .getbuffer ()
0 commit comments