Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-simplejson for 
openSUSE:Factory checked in at 2022-12-07 17:33:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-simplejson (Old)
 and      /work/SRC/openSUSE:Factory/.python-simplejson.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-simplejson"

Wed Dec  7 17:33:47 2022 rev:47 rq:1040270 version:3.18.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-simplejson/python-simplejson.changes      
2021-12-09 19:45:03.517117351 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-simplejson.new.1835/python-simplejson.changes
    2022-12-07 17:34:18.384322759 +0100
@@ -1,0 +2,11 @@
+Sun Dec  4 03:28:31 UTC 2022 - Yogalakshmi Arunachalam <yarunacha...@suse.com>
+
+- Update to v3.18.0 
+  * Allow serialization of classes that implement for_json or _asdict by
+  ignoring TypeError when those methods are called
+  https://github.com/simplejson/simplejson/pull/302
+  * Raise JSONDecodeError instead of ValueError in invalid unicode escape
+  sequence edge case
+  https://github.com/simplejson/simplejson/pull/298
+
+-------------------------------------------------------------------

Old:
----
  simplejson-3.17.6.tar.gz

New:
----
  simplejson-3.18.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-simplejson.spec ++++++
--- /var/tmp/diff_new_pack.EHMb20/_old  2022-12-07 17:34:19.004326154 +0100
+++ /var/tmp/diff_new_pack.EHMb20/_new  2022-12-07 17:34:19.008326176 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-simplejson
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-simplejson
-Version:        3.17.6
+Version:        3.18.0
 Release:        0
 Summary:        Extensible JSON encoder/decoder for Python
 License:        AFL-2.1 OR MIT

++++++ simplejson-3.17.6.tar.gz -> simplejson-3.18.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/CHANGES.txt 
new/simplejson-3.18.0/CHANGES.txt
--- old/simplejson-3.17.6/CHANGES.txt   2021-11-16 16:59:24.000000000 +0100
+++ new/simplejson-3.18.0/CHANGES.txt   2022-11-15 00:28:19.000000000 +0100
@@ -1,3 +1,12 @@
+Version 3.18.0 released 2022-11-14
+
+* Allow serialization of classes that implement for_json or _asdict by
+  ignoring TypeError when those methods are called
+  https://github.com/simplejson/simplejson/pull/302
+* Raise JSONDecodeError instead of ValueError in invalid unicode escape
+  sequence edge case
+  https://github.com/simplejson/simplejson/pull/298
+
 Version 3.17.6 released 2021-11-15
 
 * Declare support for Python 3.10 and add wheels
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/PKG-INFO 
new/simplejson-3.18.0/PKG-INFO
--- old/simplejson-3.17.6/PKG-INFO      2021-11-16 16:59:25.661416800 +0100
+++ new/simplejson-3.18.0/PKG-INFO      2022-11-15 00:28:20.761875000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: simplejson
-Version: 3.17.6
+Version: 3.18.0
 Summary: Simple, fast, extensible JSON encoder/decoder for Python
 Home-page: https://github.com/simplejson/simplejson
 Author: Bob Ippolito
@@ -65,5 +65,3 @@
 is not maintained, and should only be used as a last resort.
 
 .. _python2.2: https://github.com/simplejson/simplejson/tree/python2.2
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/conf.py 
new/simplejson-3.18.0/conf.py
--- old/simplejson-3.17.6/conf.py       2021-11-16 16:59:24.000000000 +0100
+++ new/simplejson-3.18.0/conf.py       2022-11-15 00:28:19.000000000 +0100
@@ -42,9 +42,9 @@
 # other places throughout the built documents.
 #
 # The short X.Y version.
-version = '3.17'
+version = '3.18'
 # The full version, including alpha/beta/rc tags.
-release = '3.17.6'
+release = '3.18.0'
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/setup.py 
new/simplejson-3.18.0/setup.py
--- old/simplejson-3.17.6/setup.py      2021-11-16 16:59:24.000000000 +0100
+++ new/simplejson-3.18.0/setup.py      2022-11-15 00:28:19.000000000 +0100
@@ -12,7 +12,7 @@
     DistutilsPlatformError
 
 IS_PYPY = hasattr(sys, 'pypy_translation_info')
-VERSION = '3.17.6'
+VERSION = '3.18.0'
 DESCRIPTION = "Simple, fast, extensible JSON encoder/decoder for Python"
 
 with open('README.rst', 'r') as f:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/simplejson/__init__.py 
new/simplejson-3.18.0/simplejson/__init__.py
--- old/simplejson-3.17.6/simplejson/__init__.py        2021-11-16 
16:59:24.000000000 +0100
+++ new/simplejson-3.18.0/simplejson/__init__.py        2022-11-15 
00:28:19.000000000 +0100
@@ -118,7 +118,7 @@
 
 """
 from __future__ import absolute_import
-__version__ = '3.17.6'
+__version__ = '3.18.0'
 __all__ = [
     'dump', 'dumps', 'load', 'loads',
     'JSONDecoder', 'JSONDecodeError', 'JSONEncoder',
@@ -300,7 +300,7 @@
           iterable_as_array=False, **kw):
     """Serialize ``obj`` to a JSON formatted ``str``.
 
-    If ``skipkeys`` is false then ``dict`` keys that are not basic types
+    If ``skipkeys`` is true then ``dict`` keys that are not basic types
     (``str``, ``int``, ``long``, ``float``, ``bool``, ``None``)
     will be skipped instead of raising a ``TypeError``.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/simplejson/_speedups.c 
new/simplejson-3.18.0/simplejson/_speedups.c
--- old/simplejson-3.17.6/simplejson/_speedups.c        2021-11-16 
16:59:24.000000000 +0100
+++ new/simplejson-3.18.0/simplejson/_speedups.c        2022-11-15 
00:28:19.000000000 +0100
@@ -25,6 +25,15 @@
 #define JSON_InternFromString PyString_InternFromString
 #endif /* PY_MAJOR_VERSION < 3 */
 
+#if PY_VERSION_HEX < 0x03090000
+#if !defined(PyObject_CallNoArgs)
+#define PyObject_CallNoArgs(callable) PyObject_CallFunctionObjArgs(callable, 
NULL);
+#endif
+#if !defined(PyObject_CallOneArg)
+#define PyObject_CallOneArg(callable, arg) 
PyObject_CallFunctionObjArgs(callable, arg, NULL);
+#endif
+#endif /* PY_VERSION_HEX < 0x03090000 */
+
 #if PY_VERSION_HEX < 0x02070000
 #if !defined(PyOS_string_to_double)
 #define PyOS_string_to_double json_PyOS_string_to_double
@@ -108,6 +117,9 @@
 #define ERR_STRING_CONTROL "Invalid control character %r at"
 #define ERR_STRING_ESC1 "Invalid \\X escape sequence %r"
 #define ERR_STRING_ESC4 "Invalid \\uXXXX escape sequence"
+#define FOR_JSON_METHOD_NAME "for_json"
+#define ASDICT_METHOD_NAME "_asdict"
+
 
 typedef struct _PyScannerObject {
     PyObject_HEAD
@@ -243,12 +255,10 @@
 _convertPyInt_AsSsize_t(PyObject *o, Py_ssize_t *size_ptr);
 static PyObject *
 _convertPyInt_FromSsize_t(Py_ssize_t *size_ptr);
+static int
+_call_json_method(PyObject *obj, const char *method_name, PyObject **result);
 static PyObject *
 encoder_encode_float(PyEncoderObject *s, PyObject *obj);
-static int
-_is_namedtuple(PyObject *obj);
-static int
-_has_for_json_hook(PyObject *obj);
 static PyObject *
 moduleinit(void);
 
@@ -383,32 +393,26 @@
 }
 
 static int
-_is_namedtuple(PyObject *obj)
+_call_json_method(PyObject *obj, const char *method_name, PyObject **result)
 {
     int rval = 0;
-    /* We intentionally accept anything with a duck typed _asdict method rather
-     * than requiring it to pass PyTuple_Check(obj). */
-    PyObject *_asdict = PyObject_GetAttrString(obj, "_asdict");
-    if (_asdict == NULL) {
+    PyObject *method = PyObject_GetAttrString(obj, method_name);
+    if (method == NULL) {
         PyErr_Clear();
         return 0;
     }
-    rval = PyCallable_Check(_asdict);
-    Py_DECREF(_asdict);
-    return rval;
-}
-
-static int
-_has_for_json_hook(PyObject *obj)
-{
-    int rval = 0;
-    PyObject *for_json = PyObject_GetAttrString(obj, "for_json");
-    if (for_json == NULL) {
-        PyErr_Clear();
-        return 0;
+    if (PyCallable_Check(method)) {
+        PyObject *tmp = PyObject_CallNoArgs(method);
+        if (tmp == NULL && PyErr_ExceptionMatches(PyExc_TypeError)) {
+            PyErr_Clear();
+        } else {
+            // This will set result to NULL if a TypeError occurred,
+            // which must be checked by the caller
+            *result = tmp;
+            rval = 1;
+        }
     }
-    rval = PyCallable_Check(for_json);
-    Py_DECREF(for_json);
+    Py_DECREF(method);
     return rval;
 }
 
@@ -640,7 +644,7 @@
         if (!(PyInt_CheckExact(key) || PyLong_CheckExact(key))) {
             /* See #118, do not trust custom str/repr */
             PyObject *res;
-            PyObject *tmp = PyObject_CallFunctionObjArgs((PyObject 
*)&PyLong_Type, key, NULL);
+            PyObject *tmp = PyObject_CallOneArg((PyObject *)&PyLong_Type, key);
             if (tmp == NULL) {
                 return NULL;
             }
@@ -794,7 +798,7 @@
         if (joinfn == NULL)
             return NULL;
     }
-    return PyObject_CallFunctionObjArgs(joinfn, lst, NULL);
+    return PyObject_CallOneArg(joinfn, lst);
 }
 #endif /* PY_MAJOR_VERSION < 3 */
 
@@ -1486,7 +1490,7 @@
 
     /* if pairs_hook is not None: rval = object_pairs_hook(pairs) */
     if (s->pairs_hook != Py_None) {
-        val = PyObject_CallFunctionObjArgs(s->pairs_hook, pairs, NULL);
+        val = PyObject_CallOneArg(s->pairs_hook, pairs);
         if (val == NULL)
             goto bail;
         Py_DECREF(pairs);
@@ -1496,7 +1500,7 @@
 
     /* if object_hook is not None: rval = object_hook(rval) */
     if (s->object_hook != Py_None) {
-        val = PyObject_CallFunctionObjArgs(s->object_hook, rval, NULL);
+        val = PyObject_CallOneArg(s->object_hook, rval);
         if (val == NULL)
             goto bail;
         Py_DECREF(rval);
@@ -1650,7 +1654,7 @@
 
     /* if pairs_hook is not None: rval = object_pairs_hook(pairs) */
     if (s->pairs_hook != Py_None) {
-        val = PyObject_CallFunctionObjArgs(s->pairs_hook, pairs, NULL);
+        val = PyObject_CallOneArg(s->pairs_hook, pairs);
         if (val == NULL)
             goto bail;
         Py_DECREF(pairs);
@@ -1660,7 +1664,7 @@
 
     /* if object_hook is not None: rval = object_hook(rval) */
     if (s->object_hook != Py_None) {
-        val = PyObject_CallFunctionObjArgs(s->object_hook, rval, NULL);
+        val = PyObject_CallOneArg(s->object_hook, rval);
         if (val == NULL)
             goto bail;
         Py_DECREF(rval);
@@ -1853,7 +1857,7 @@
     PyObject *rval;
 
     /* rval = parse_constant(constant) */
-    rval = PyObject_CallFunctionObjArgs(s->parse_constant, constant, NULL);
+    rval = PyObject_CallOneArg(s->parse_constant, constant);
     idx += PyString_GET_SIZE(constant);
     *next_idx_ptr = idx;
     return rval;
@@ -1939,7 +1943,7 @@
     if (is_float) {
         /* parse as a float using a fast path if available, otherwise call 
user defined method */
         if (s->parse_float != (PyObject *)&PyFloat_Type) {
-            rval = PyObject_CallFunctionObjArgs(s->parse_float, numstr, NULL);
+            rval = PyObject_CallOneArg(s->parse_float, numstr);
         }
         else {
             /* rval = 
PyFloat_FromDouble(PyOS_ascii_atof(PyString_AS_STRING(numstr))); */
@@ -1953,7 +1957,7 @@
     else {
         /* parse as an int using a fast path if available, otherwise call user 
defined method */
         if (s->parse_int != (PyObject *)&PyInt_Type) {
-            rval = PyObject_CallFunctionObjArgs(s->parse_int, numstr, NULL);
+            rval = PyObject_CallOneArg(s->parse_int, numstr);
         }
         else {
             rval = PyInt_FromString(PyString_AS_STRING(numstr), NULL, 10);
@@ -2057,7 +2061,7 @@
     if (is_float) {
         /* parse as a float using a fast path if available, otherwise call 
user defined method */
         if (s->parse_float != (PyObject *)&PyFloat_Type) {
-            rval = PyObject_CallFunctionObjArgs(s->parse_float, numstr, NULL);
+            rval = PyObject_CallOneArg(s->parse_float, numstr);
         }
         else {
 #if PY_MAJOR_VERSION >= 3
@@ -2069,7 +2073,7 @@
     }
     else {
         /* no fast path for unicode -> int, just call */
-        rval = PyObject_CallFunctionObjArgs(s->parse_int, numstr, NULL);
+        rval = PyObject_CallOneArg(s->parse_int, numstr);
     }
     Py_DECREF(numstr);
     *next_idx_ptr = idx;
@@ -2748,7 +2752,7 @@
     else {
         /* See #118, do not trust custom str/repr */
         PyObject *res;
-        PyObject *tmp = PyObject_CallFunctionObjArgs((PyObject 
*)&PyFloat_Type, obj, NULL);
+        PyObject *tmp = PyObject_CallOneArg((PyObject *)&PyFloat_Type, obj);
         if (tmp == NULL) {
             return NULL;
         }
@@ -2767,7 +2771,7 @@
     if (s->fast_encode) {
         return py_encode_basestring_ascii(NULL, obj);
     }
-    encoded = PyObject_CallFunctionObjArgs(s->encoder, obj, NULL);
+    encoded = PyObject_CallOneArg(s->encoder, obj);
     if (encoded != NULL &&
 #if PY_MAJOR_VERSION < 3
         !PyString_Check(encoded) &&
@@ -2798,6 +2802,7 @@
     /* Encode Python object obj to a JSON term, rval is a PyList */
     int rv = -1;
     do {
+        PyObject *newobj;
         if (obj == Py_None || obj == Py_True || obj == Py_False) {
             PyObject *cstr = _encoded_const(obj);
             if (cstr != NULL)
@@ -2817,7 +2822,7 @@
             }
             else {
                 /* See #118, do not trust custom str/repr */
-                PyObject *tmp = PyObject_CallFunctionObjArgs((PyObject 
*)&PyLong_Type, obj, NULL);
+                PyObject *tmp = PyObject_CallOneArg((PyObject *)&PyLong_Type, 
obj);
                 if (tmp == NULL) {
                     encoded = NULL;
                 }
@@ -2838,35 +2843,37 @@
             if (encoded != NULL)
                 rv = _steal_accumulate(rval, encoded);
         }
-        else if (s->for_json && _has_for_json_hook(obj)) {
-            PyObject *newobj;
-            if (Py_EnterRecursiveCall(" while encoding a JSON object"))
-                return rv;
-            newobj = PyObject_CallMethod(obj, "for_json", NULL);
-            if (newobj != NULL) {
-                rv = encoder_listencode_obj(s, rval, newobj, indent_level);
+        else if (s->for_json && _call_json_method(obj, FOR_JSON_METHOD_NAME, 
&newobj)) {
+            if (newobj == NULL) {
+                return -1;
+            }
+            if (Py_EnterRecursiveCall(" while encoding a JSON object")) {
                 Py_DECREF(newobj);
+                return rv;
             }
+            rv = encoder_listencode_obj(s, rval, newobj, indent_level);
+            Py_DECREF(newobj);
             Py_LeaveRecursiveCall();
         }
-        else if (s->namedtuple_as_object && _is_namedtuple(obj)) {
-            PyObject *newobj;
-            if (Py_EnterRecursiveCall(" while encoding a JSON object"))
+        else if (s->namedtuple_as_object && _call_json_method(obj, 
ASDICT_METHOD_NAME, &newobj)) {
+            if (newobj == NULL) {
+                return -1;
+            }
+            if (Py_EnterRecursiveCall(" while encoding a JSON object")) {
+                Py_DECREF(newobj);
                 return rv;
-            newobj = PyObject_CallMethod(obj, "_asdict", NULL);
-            if (newobj != NULL) {
-                if (!PyDict_Check(newobj)) {
-                    PyErr_Format(
-                        PyExc_TypeError,
-                        "_asdict() must return a dict, not %.80s",
-                        Py_TYPE(newobj)->tp_name
-                    );
-                    Py_DECREF(newobj);
-                    return -1;
-                }
+            }
+            if (PyDict_Check(newobj)) {
                 rv = encoder_listencode_dict(s, rval, newobj, indent_level);
-                Py_DECREF(newobj);
+            } else {
+                PyErr_Format(
+                    PyExc_TypeError,
+                    "_asdict() must return a dict, not %.80s",
+                    Py_TYPE(newobj)->tp_name
+                );
+                rv = -1;
             }
+            Py_DECREF(newobj);
             Py_LeaveRecursiveCall();
         }
         else if (PyList_Check(obj) || (s->tuple_as_array && 
PyTuple_Check(obj))) {
@@ -2924,7 +2931,7 @@
             }
             if (Py_EnterRecursiveCall(" while encoding a JSON object"))
                 return rv;
-            newobj = PyObject_CallFunctionObjArgs(s->defaultfn, obj, NULL);
+            newobj = PyObject_CallOneArg(s->defaultfn, obj);
             if (newobj == NULL) {
                 Py_XDECREF(ident);
                 Py_LeaveRecursiveCall();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/simplejson/decoder.py 
new/simplejson-3.18.0/simplejson/decoder.py
--- old/simplejson-3.17.6/simplejson/decoder.py 2021-11-16 16:59:24.000000000 
+0100
+++ new/simplejson-3.18.0/simplejson/decoder.py 2022-11-15 00:28:19.000000000 
+0100
@@ -109,6 +109,8 @@
                 uni = int(esc, 16)
             except ValueError:
                 raise JSONDecodeError(msg, s, end - 1)
+            if uni < 0 or uni > _maxunicode:
+                raise JSONDecodeError(msg, s, end - 1)
             end += 5
             # Check for surrogate pair on UCS-4 systems
             # Note that this will join high/low surrogate pairs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/simplejson/encoder.py 
new/simplejson-3.18.0/simplejson/encoder.py
--- old/simplejson-3.17.6/simplejson/encoder.py 2021-11-16 16:59:24.000000000 
+0100
+++ new/simplejson-3.18.0/simplejson/encoder.py 2022-11-15 00:28:19.000000000 
+0100
@@ -450,6 +450,15 @@
          not isinstance(_int_as_string_bitcount, integer_types))):
         raise TypeError("int_as_string_bitcount must be a positive integer")
 
+    def call_method(obj, method_name):
+        method = getattr(obj, method_name, None)
+        if callable(method):
+            try:
+                return (method(),)
+            except TypeError:
+                pass
+        return None
+
     def _encode_int(value):
         skip_quoting = (
             _int_as_string_bitcount is None
@@ -512,15 +521,15 @@
                 yield buf + str(value)
             else:
                 yield buf
-                for_json = _for_json and getattr(value, 'for_json', None)
-                if for_json and callable(for_json):
-                    chunks = _iterencode(for_json(), _current_indent_level)
+                for_json = _for_json and call_method(value, 'for_json')
+                if for_json:
+                    chunks = _iterencode(for_json[0], _current_indent_level)
                 elif isinstance(value, list):
                     chunks = _iterencode_list(value, _current_indent_level)
                 else:
-                    _asdict = _namedtuple_as_object and getattr(value, 
'_asdict', None)
-                    if _asdict and callable(_asdict):
-                        dct = _asdict()
+                    _asdict = _namedtuple_as_object and call_method(value, 
'_asdict')
+                    if _asdict:
+                        dct = _asdict[0]
                         if not isinstance(dct, dict):
                             raise TypeError("_asdict() must return a dict, not 
%s" % (type(dct).__name__,))
                         chunks = _iterencode_dict(dct,
@@ -636,15 +645,15 @@
             elif _use_decimal and isinstance(value, Decimal):
                 yield str(value)
             else:
-                for_json = _for_json and getattr(value, 'for_json', None)
-                if for_json and callable(for_json):
-                    chunks = _iterencode(for_json(), _current_indent_level)
+                for_json = _for_json and call_method(value, 'for_json')
+                if for_json:
+                    chunks = _iterencode(for_json[0], _current_indent_level)
                 elif isinstance(value, list):
                     chunks = _iterencode_list(value, _current_indent_level)
                 else:
-                    _asdict = _namedtuple_as_object and getattr(value, 
'_asdict', None)
-                    if _asdict and callable(_asdict):
-                        dct = _asdict()
+                    _asdict = _namedtuple_as_object and call_method(value, 
'_asdict')
+                    if _asdict:
+                        dct = _asdict[0]
                         if not isinstance(dct, dict):
                             raise TypeError("_asdict() must return a dict, not 
%s" % (type(dct).__name__,))
                         chunks = _iterencode_dict(dct,
@@ -682,17 +691,17 @@
         elif isinstance(o, float):
             yield _floatstr(o)
         else:
-            for_json = _for_json and getattr(o, 'for_json', None)
-            if for_json and callable(for_json):
-                for chunk in _iterencode(for_json(), _current_indent_level):
+            for_json = _for_json and call_method(o, 'for_json')
+            if for_json:
+                for chunk in _iterencode(for_json[0], _current_indent_level):
                     yield chunk
             elif isinstance(o, list):
                 for chunk in _iterencode_list(o, _current_indent_level):
                     yield chunk
             else:
-                _asdict = _namedtuple_as_object and getattr(o, '_asdict', None)
-                if _asdict and callable(_asdict):
-                    dct = _asdict()
+                _asdict = _namedtuple_as_object and call_method(o, '_asdict')
+                if _asdict:
+                    dct = _asdict[0]
                     if not isinstance(dct, dict):
                         raise TypeError("_asdict() must return a dict, not %s" 
% (type(dct).__name__,))
                     for chunk in _iterencode_dict(dct, _current_indent_level):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/simplejson-3.17.6/simplejson/tests/test_namedtuple.py 
new/simplejson-3.18.0/simplejson/tests/test_namedtuple.py
--- old/simplejson-3.17.6/simplejson/tests/test_namedtuple.py   2021-11-16 
16:59:24.000000000 +0100
+++ new/simplejson-3.18.0/simplejson/tests/test_namedtuple.py   2022-11-15 
00:28:19.000000000 +0100
@@ -110,22 +110,47 @@
 
     def test_asdict_not_callable_dump(self):
         for f in CONSTRUCTORS:
-            self.assertRaises(TypeError,
-                json.dump, f(DeadDuck()), StringIO(), 
namedtuple_as_object=True)
+            self.assertRaises(
+                TypeError,
+                json.dump,
+                f(DeadDuck()),
+                StringIO(),
+                namedtuple_as_object=True
+            )
             sio = StringIO()
             json.dump(f(DeadDict()), sio, namedtuple_as_object=True)
             self.assertEqual(
                 json.dumps(f({})),
                 sio.getvalue())
+            self.assertRaises(
+                TypeError,
+                json.dump,
+                f(Value),
+                StringIO(),
+                namedtuple_as_object=True
+            )
 
     def test_asdict_not_callable_dumps(self):
         for f in CONSTRUCTORS:
             self.assertRaises(TypeError,
                 json.dumps, f(DeadDuck()), namedtuple_as_object=True)
+            self.assertRaises(
+                TypeError,
+                json.dumps,
+                f(Value),
+                namedtuple_as_object=True
+            )
             self.assertEqual(
                 json.dumps(f({})),
                 json.dumps(f(DeadDict()), namedtuple_as_object=True))
 
+    def test_asdict_unbound_method_dumps(self):
+        for f in CONSTRUCTORS:
+            self.assertEqual(
+                json.dumps(f(Value), default=lambda v: v.__name__),
+                json.dumps(f(Value.__name__))
+            )
+
     def test_asdict_does_not_return_dict(self):
         if not mock:
             if hasattr(unittest, "SkipTest"):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/simplejson-3.17.6/simplejson/tests/test_scanstring.py 
new/simplejson-3.18.0/simplejson/tests/test_scanstring.py
--- old/simplejson-3.17.6/simplejson/tests/test_scanstring.py   2021-11-16 
16:59:24.000000000 +0100
+++ new/simplejson-3.18.0/simplejson/tests/test_scanstring.py   2022-11-15 
00:28:19.000000000 +0100
@@ -132,6 +132,8 @@
             self.assertRaises(ValueError,
                               scanstring, '\\ud834\\x0123"', 0, None, True)
 
+        self.assertRaises(json.JSONDecodeError, scanstring, "\\u-123", 0, 
None, True)
+
     def test_issue3623(self):
         self.assertRaises(ValueError, json.decoder.scanstring, "xxx", 1,
                           "xxx")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/simplejson-3.17.6/simplejson.egg-info/PKG-INFO 
new/simplejson-3.18.0/simplejson.egg-info/PKG-INFO
--- old/simplejson-3.17.6/simplejson.egg-info/PKG-INFO  2021-11-16 
16:59:25.000000000 +0100
+++ new/simplejson-3.18.0/simplejson.egg-info/PKG-INFO  2022-11-15 
00:28:20.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: simplejson
-Version: 3.17.6
+Version: 3.18.0
 Summary: Simple, fast, extensible JSON encoder/decoder for Python
 Home-page: https://github.com/simplejson/simplejson
 Author: Bob Ippolito
@@ -65,5 +65,3 @@
 is not maintained, and should only be used as a last resort.
 
 .. _python2.2: https://github.com/simplejson/simplejson/tree/python2.2
-
-

Reply via email to