summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorInada Naoki <songofacandy@gmail.com>2019-12-03 21:13:05 +0900
committerGitHub <noreply@github.com>2019-12-03 21:13:05 +0900
commite419cd8e2db6b8226bd681b52b6acfe70d8e6a86 (patch)
tree218200abdf432642b1c47482cdf38a117fac5a93
parent83ebb63c447a99c81d043eb6808bbfb50697a751 (diff)
downloadmsgpack-python-e419cd8e2db6b8226bd681b52b6acfe70d8e6a86.tar.gz
Remove encoding option from Unpacker. (#380)
-rw-r--r--ChangeLog.rst2
-rw-r--r--msgpack/_unpacker.pyx36
-rw-r--r--msgpack/fallback.py23
-rw-r--r--msgpack/unpack.h5
4 files changed, 15 insertions, 51 deletions
diff --git a/ChangeLog.rst b/ChangeLog.rst
index 1d784af..d44b36a 100644
--- a/ChangeLog.rst
+++ b/ChangeLog.rst
@@ -5,7 +5,7 @@ Release Date: TBD
* Remove Python 2 support from the ``msgpack/_cmsgpack``.
``msgpack/fallback`` still supports Python 2.
-* Remove ``encoding`` option from the Packer.
+* Remove ``encoding`` option from the Packer and Unpacker.
0.6.2
diff --git a/msgpack/_unpacker.pyx b/msgpack/_unpacker.pyx
index 3727f50..b258686 100644
--- a/msgpack/_unpacker.pyx
+++ b/msgpack/_unpacker.pyx
@@ -31,7 +31,6 @@ cdef extern from "unpack.h":
PyObject* object_hook
PyObject* list_hook
PyObject* ext_hook
- char *encoding
char *unicode_errors
Py_ssize_t max_str_len
Py_ssize_t max_bin_len
@@ -58,7 +57,7 @@ cdef inline init_ctx(unpack_context *ctx,
object object_hook, object object_pairs_hook,
object list_hook, object ext_hook,
bint use_list, bint raw, bint strict_map_key,
- const char* encoding, const char* unicode_errors,
+ const char* unicode_errors,
Py_ssize_t max_str_len, Py_ssize_t max_bin_len,
Py_ssize_t max_array_len, Py_ssize_t max_map_len,
Py_ssize_t max_ext_len):
@@ -99,7 +98,6 @@ cdef inline init_ctx(unpack_context *ctx,
raise TypeError("ext_hook must be a callable.")
ctx.user.ext_hook = <PyObject*>ext_hook
- ctx.user.encoding = encoding
ctx.user.unicode_errors = unicode_errors
def default_read_extended_type(typecode, data):
@@ -141,9 +139,9 @@ cdef inline int get_data_from_buffer(object obj,
1)
return 1
-def unpackb(object packed, object object_hook=None, object list_hook=None,
+def unpackb(object packed, *, object object_hook=None, object list_hook=None,
bint use_list=True, bint raw=True, bint strict_map_key=False,
- encoding=None, unicode_errors=None,
+ unicode_errors=None,
object_pairs_hook=None, ext_hook=ExtType,
Py_ssize_t max_str_len=-1,
Py_ssize_t max_bin_len=-1,
@@ -170,14 +168,9 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
cdef Py_buffer view
cdef char* buf = NULL
cdef Py_ssize_t buf_len
- cdef const char* cenc = NULL
cdef const char* cerr = NULL
cdef int new_protocol = 0
- if encoding is not None:
- PyErr_WarnEx(DeprecationWarning, "encoding is deprecated, Use raw=False instead.", 1)
- cenc = encoding
-
if unicode_errors is not None:
cerr = unicode_errors
@@ -196,7 +189,7 @@ def unpackb(object packed, object object_hook=None, object list_hook=None,
try:
init_ctx(&ctx, object_hook, object_pairs_hook, list_hook, ext_hook,
- use_list, raw, strict_map_key, cenc, cerr,
+ use_list, raw, strict_map_key, cerr,
max_str_len, max_bin_len, max_array_len, max_map_len, max_ext_len)
ret = unpack_construct(&ctx, buf, buf_len, &off)
finally:
@@ -250,8 +243,6 @@ cdef class Unpacker(object):
near future. So you must specify it explicitly for keeping backward
compatibility.
- *encoding* option which is deprecated overrides this option.
-
:param bool strict_map_key:
If true, only str or bytes are accepted for map (dict) keys.
It's False by default for backward-compatibility.
@@ -290,11 +281,6 @@ cdef class Unpacker(object):
Deprecated, use *max_buffer_size* instead.
Limits max size of ext type. (default: max_buffer_size or 1024*1024)
- :param str encoding:
- Deprecated, use ``raw=False`` instead.
- Encoding used for decoding msgpack raw.
- If it is None (default), msgpack raw is deserialized to Python bytes.
-
:param str unicode_errors:
Error handler used for decoding str type. (default: `'strict'`)
@@ -330,7 +316,7 @@ cdef class Unpacker(object):
cdef Py_ssize_t read_size
# To maintain refcnt.
cdef object object_hook, object_pairs_hook, list_hook, ext_hook
- cdef object encoding, unicode_errors
+ cdef object unicode_errors
cdef Py_ssize_t max_buffer_size
cdef uint64_t stream_offset
@@ -341,17 +327,16 @@ cdef class Unpacker(object):
PyMem_Free(self.buf)
self.buf = NULL
- def __init__(self, file_like=None, Py_ssize_t read_size=0,
+ def __init__(self, file_like=None, *, Py_ssize_t read_size=0,
bint use_list=True, bint raw=True, bint strict_map_key=False,
object object_hook=None, object object_pairs_hook=None, object list_hook=None,
- encoding=None, unicode_errors=None, Py_ssize_t max_buffer_size=0,
+ unicode_errors=None, Py_ssize_t max_buffer_size=0,
object ext_hook=ExtType,
Py_ssize_t max_str_len=-1,
Py_ssize_t max_bin_len=-1,
Py_ssize_t max_array_len=-1,
Py_ssize_t max_map_len=-1,
Py_ssize_t max_ext_len=-1):
- cdef const char *cenc=NULL,
cdef const char *cerr=NULL
self.object_hook = object_hook
@@ -392,17 +377,12 @@ cdef class Unpacker(object):
self.buf_tail = 0
self.stream_offset = 0
- if encoding is not None:
- PyErr_WarnEx(DeprecationWarning, "encoding is deprecated, Use raw=False instead.", 1)
- self.encoding = encoding
- cenc = encoding
-
if unicode_errors is not None:
self.unicode_errors = unicode_errors
cerr = unicode_errors
init_ctx(&self.ctx, object_hook, object_pairs_hook, list_hook,
- ext_hook, use_list, raw, strict_map_key, cenc, cerr,
+ ext_hook, use_list, raw, strict_map_key, cerr,
max_str_len, max_bin_len, max_array_len,
max_map_len, max_ext_len)
diff --git a/msgpack/fallback.py b/msgpack/fallback.py
index 0c0c101..9e31213 100644
--- a/msgpack/fallback.py
+++ b/msgpack/fallback.py
@@ -176,8 +176,6 @@ class Unpacker(object):
near future. So you must specify it explicitly for keeping backward
compatibility.
- *encoding* option which is deprecated overrides this option.
-
:param bool strict_map_key:
If true, only str or bytes are accepted for map (dict) keys.
It's False by default for backward-compatibility.
@@ -193,13 +191,10 @@ class Unpacker(object):
Unpacker calls it with a list of key-value pairs after unpacking msgpack map.
(See also simplejson)
- :param str encoding:
- Encoding used for decoding msgpack raw.
- If it is None (default), msgpack raw is deserialized to Python bytes.
-
:param str unicode_errors:
- (deprecated) Used for decoding msgpack raw with *encoding*.
- (default: `'strict'`)
+ The error handler for decoding unicode. (default: 'strict')
+ This option should be used only when you have msgpack data which
+ contains invalid UTF-8 string.
:param int max_buffer_size:
Limits size of data waiting unpacked. 0 means system's INT_MAX (default).
@@ -252,18 +247,13 @@ class Unpacker(object):
def __init__(self, file_like=None, read_size=0, use_list=True, raw=True, strict_map_key=False,
object_hook=None, object_pairs_hook=None, list_hook=None,
- encoding=None, unicode_errors=None, max_buffer_size=0,
+ unicode_errors=None, max_buffer_size=0,
ext_hook=ExtType,
max_str_len=-1,
max_bin_len=-1,
max_array_len=-1,
max_map_len=-1,
max_ext_len=-1):
- if encoding is not None:
- warnings.warn(
- "encoding is deprecated, Use raw=False instead.",
- DeprecationWarning, stacklevel=2)
-
if unicode_errors is None:
unicode_errors = 'strict'
@@ -306,7 +296,6 @@ class Unpacker(object):
self._read_size = read_size or min(self._max_buffer_size, 16*1024)
self._raw = bool(raw)
self._strict_map_key = bool(strict_map_key)
- self._encoding = encoding
self._unicode_errors = unicode_errors
self._use_list = use_list
self._list_hook = list_hook
@@ -662,9 +651,7 @@ class Unpacker(object):
if execute == EX_SKIP:
return
if typ == TYPE_RAW:
- if self._encoding is not None:
- obj = obj.decode(self._encoding, self._unicode_errors)
- elif self._raw:
+ if self._raw:
obj = bytes(obj)
else:
obj = obj.decode('utf_8', self._unicode_errors)
diff --git a/msgpack/unpack.h b/msgpack/unpack.h
index bbce91c..539a991 100644
--- a/msgpack/unpack.h
+++ b/msgpack/unpack.h
@@ -27,7 +27,6 @@ typedef struct unpack_user {
PyObject *object_hook;
PyObject *list_hook;
PyObject *ext_hook;
- const char *encoding;
const char *unicode_errors;
Py_ssize_t max_str_len, max_bin_len, max_array_len, max_map_len, max_ext_len;
} unpack_user;
@@ -232,9 +231,7 @@ static inline int unpack_callback_raw(unpack_user* u, const char* b, const char*
PyObject *py;
- if (u->encoding) {
- py = PyUnicode_Decode(p, l, u->encoding, u->unicode_errors);
- } else if (u->raw) {
+ if (u->raw) {
py = PyBytes_FromStringAndSize(p, l);
} else {
py = PyUnicode_DecodeUTF8(p, l, u->unicode_errors);