summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Rabert <6550543+nvllsvm@users.noreply.github.com>2018-02-02 20:34:42 -0500
committerINADA Naoki <methane@users.noreply.github.com>2018-02-03 10:34:42 +0900
commita0ba076c3527bb474cd8ec820ae0fd6c8293d4af (patch)
treee2761d0cc2a67eb21f283eb1b2bb2956ce59df8c
parent52fb85a2c5776590599df3a5839117b88bc49980 (diff)
downloadmsgpack-python-a0ba076c3527bb474cd8ec820ae0fd6c8293d4af.tar.gz
Fix encoding and unicode_errors (#277)
Previously, unicode_errors was either set to NULL or to the result of PyBytes_AsString. This restores that behavior while also keeping the existing NULL default behavior. Original defaults were restored to keep API compatibility until these deprecated options are finally removed.
-rw-r--r--msgpack/_packer.pyx33
1 files changed, 16 insertions, 17 deletions
diff --git a/msgpack/_packer.pyx b/msgpack/_packer.pyx
index 35e5a9d..c49e719 100644
--- a/msgpack/_packer.pyx
+++ b/msgpack/_packer.pyx
@@ -127,27 +127,26 @@ cdef class Packer(object):
if not PyCallable_Check(default):
raise TypeError("default must be a callable.")
self._default = default
- if encoding is None:
- if unicode_errors is None:
- self.encoding = NULL
- self.unicode_errors = NULL
- else:
- self.encoding = "utf_8"
- self.unicode_errors = unicode_errors
+ if encoding is None and unicode_errors is None:
+ self.encoding = NULL
+ self.unicode_errors = NULL
else:
- if isinstance(encoding, unicode):
- self._bencoding = encoding.encode('ascii')
+ if encoding is None:
+ self.encoding = 'utf-8'
else:
- self._bencoding = encoding
- self.encoding = PyBytes_AsString(self._bencoding)
- if isinstance(unicode_errors, unicode):
- self._berrors = unicode_errors.encode('ascii')
+ if isinstance(encoding, unicode):
+ self._bencoding = encoding.encode('ascii')
+ else:
+ self._bencoding = encoding
+ self.encoding = PyBytes_AsString(self._bencoding)
+ if unicode_errors is None:
+ self.unicode_errors = 'strict'
else:
- self._berrors = unicode_errors
- if self._berrors is not None:
+ if isinstance(unicode_errors, unicode):
+ self._berrors = unicode_errors.encode('ascii')
+ else:
+ self._berrors = unicode_errors
self.unicode_errors = PyBytes_AsString(self._berrors)
- else:
- self.unicode_errors = NULL
def __dealloc__(self):
PyMem_Free(self.pk.buf)