simplejson 4.1.2__tar.gz → 4.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. {simplejson-4.1.2 → simplejson-4.3.0}/CHANGES.txt +56 -0
  2. {simplejson-4.1.2/simplejson.egg-info → simplejson-4.3.0}/PKG-INFO +5 -5
  3. {simplejson-4.1.2 → simplejson-4.3.0}/README.rst +2 -2
  4. {simplejson-4.1.2 → simplejson-4.3.0}/conf.py +2 -2
  5. {simplejson-4.1.2 → simplejson-4.3.0}/index.rst +14 -7
  6. {simplejson-4.1.2 → simplejson-4.3.0}/setup.py +3 -3
  7. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/__init__.py +7 -6
  8. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/_speedups.c +304 -65
  9. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/_speedups_scan.h +5 -1
  10. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/decoder.py +5 -3
  11. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/encoder.py +239 -178
  12. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/scanner.py +3 -3
  13. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_bitsize_int_as_string.py +97 -0
  14. simplejson-4.3.0/simplejson/tests/test_check_circular.py +158 -0
  15. simplejson-4.3.0/simplejson/tests/test_custom_method_cycles.py +71 -0
  16. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_decimal.py +16 -0
  17. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_decode.py +66 -0
  18. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_dump.py +111 -0
  19. simplejson-4.3.0/simplejson/tests/test_errors.py +247 -0
  20. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_fail.py +26 -0
  21. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_float.py +13 -0
  22. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_for_json.py +20 -0
  23. simplejson-4.3.0/simplejson/tests/test_item_sort_key.py +68 -0
  24. simplejson-4.3.0/simplejson/tests/test_iterable.py +263 -0
  25. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_scanstring.py +1 -0
  26. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_speedups.py +12 -8
  27. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_tool.py +35 -2
  28. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tool.py +2 -2
  29. {simplejson-4.1.2 → simplejson-4.3.0/simplejson.egg-info}/PKG-INFO +5 -5
  30. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson.egg-info/SOURCES.txt +1 -0
  31. simplejson-4.1.2/simplejson/tests/test_check_circular.py +0 -50
  32. simplejson-4.1.2/simplejson/tests/test_errors.py +0 -108
  33. simplejson-4.1.2/simplejson/tests/test_item_sort_key.py +0 -27
  34. simplejson-4.1.2/simplejson/tests/test_iterable.py +0 -61
  35. {simplejson-4.1.2 → simplejson-4.3.0}/LICENSE.txt +0 -0
  36. {simplejson-4.1.2 → simplejson-4.3.0}/MANIFEST.in +0 -0
  37. {simplejson-4.1.2 → simplejson-4.3.0}/pyproject.toml +0 -0
  38. {simplejson-4.1.2 → simplejson-4.3.0}/scripts/make_docs.py +0 -0
  39. {simplejson-4.1.2 → simplejson-4.3.0}/setup.cfg +0 -0
  40. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/compat.py +0 -0
  41. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/errors.py +0 -0
  42. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/ordered_dict.py +0 -0
  43. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/raw_json.py +0 -0
  44. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/__init__.py +0 -0
  45. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/_cibw_runner.py +0 -0
  46. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/_helpers.py +0 -0
  47. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_bigint_as_string.py +0 -0
  48. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_default.py +0 -0
  49. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_encode_basestring_ascii.py +0 -0
  50. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_encode_for_html.py +0 -0
  51. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_free_threading.py +0 -0
  52. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_indent.py +0 -0
  53. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_namedtuple.py +0 -0
  54. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_pass1.py +0 -0
  55. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_pass2.py +0 -0
  56. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_pass3.py +0 -0
  57. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_raw_json.py +0 -0
  58. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_recursion.py +0 -0
  59. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_separators.py +0 -0
  60. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_str_subclass.py +0 -0
  61. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_subclass.py +0 -0
  62. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_subinterpreters.py +0 -0
  63. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_tuple.py +0 -0
  64. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson/tests/test_unicode.py +0 -0
  65. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson.egg-info/dependency_links.txt +0 -0
  66. {simplejson-4.1.2 → simplejson-4.3.0}/simplejson.egg-info/top_level.txt +0 -0
  67. {simplejson-4.1.2 → simplejson-4.3.0}/tsan_stress_simplejson.py +0 -0
@@ -1,3 +1,59 @@
1
+ Version 4.3.0 released 2026-11-10
2
+
3
+ * The C encoder no longer crashes when ``default()`` or ``for_json()``
4
+ shrinks or grows the list being encoded, and no longer reads a freed
5
+ key when encoding a dict value removes its entry. Both encoders now
6
+ raise ``RuntimeError("dictionary changed size during iteration")``
7
+ when a dict is resized while it is being encoded. ``make_encoder()``
8
+ raises ``TypeError`` for an invalid ``markers`` argument instead of
9
+ crashing, and C and pure Python error messages now match
10
+ https://github.com/simplejson/simplejson/pull/395
11
+ * Circular references are now detected through re-iterable objects
12
+ encoded with ``iterable_as_array=True``, in both encoders
13
+ https://github.com/simplejson/simplejson/pull/391
14
+ * A failure while adding a PEP 678 context note no longer replaces the
15
+ original serialization error
16
+ https://github.com/simplejson/simplejson/pull/392
17
+ * Explicitly supplied ``parse_float``, ``parse_int`` and
18
+ ``parse_constant`` callbacks are now used even when they are falsy
19
+ https://github.com/simplejson/simplejson/pull/394
20
+ * An explicit ``item_sort_key`` is now honored even when it is falsy
21
+ https://github.com/simplejson/simplejson/pull/396
22
+ * ``python -m simplejson.tool`` now reads input files as UTF-8
23
+ regardless of the locale
24
+ https://github.com/simplejson/simplejson/pull/397
25
+ * With ``allow_nan=False`` the C encoder's ``ValueError`` now names the
26
+ out-of-range value, matching the pure Python encoder
27
+ https://github.com/simplejson/simplejson/pull/399
28
+ * Build and test native Windows arm64 wheels
29
+ https://github.com/simplejson/simplejson/pull/401
30
+ * Wheels for CPython 3.15 are now built against the final 3.15 release
31
+ via cibuildwheel v4.3.5, and CI uses astral-sh/setup-uv v10.3.3
32
+ https://github.com/simplejson/simplejson/pull/405
33
+
34
+ Version 4.2.0 released 2026-10-02
35
+
36
+ * Start building wheels for Python 3.15 and drop Python 3.8 support
37
+ via upgrade to cibuildwheel v4.2.0
38
+ https://github.com/simplejson/simplejson/pull/385
39
+ * Build and test riscv64 Linux wheels on native RISE runners
40
+ https://github.com/simplejson/simplejson/pull/389
41
+ * The C scanner now reports the same error message as the pure Python
42
+ decoder for an invalid first key in an object
43
+ https://github.com/simplejson/simplejson/pull/388
44
+ * ``int_as_string_bitcount`` now supports thresholds of 64 bits and above
45
+ (including 128-bit integers) in both the C and pure Python encoders;
46
+ the C encoder previously rejected them
47
+ https://github.com/simplejson/simplejson/pull/387
48
+ * Circular references introduced through ``for_json()`` or ``_asdict()``
49
+ now raise ``ValueError("Circular reference detected")`` instead of
50
+ recursing without bound
51
+ https://github.com/simplejson/simplejson/pull/390
52
+ * CI now tests Python 3.15 (including free-threaded 3.15t), PyPy 3.12,
53
+ CPython 3.14.8 debug builds, and uses current GitHub Actions and
54
+ cibuildwheel v4.2.1
55
+ https://github.com/simplejson/simplejson/pull/386
56
+
1
57
  Version 4.1.2 released 2026-08-26
2
58
 
3
59
  * Fix control character error position when content precedes the control char
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: simplejson
3
- Version: 4.1.2
3
+ Version: 4.3.0
4
4
  Summary: Simple, fast, extensible JSON encoder/decoder for Python
5
5
  Home-page: https://github.com/simplejson/simplejson
6
6
  Author: Bob Ippolito
@@ -14,18 +14,18 @@ Classifier: Programming Language :: Python
14
14
  Classifier: Programming Language :: Python :: 2
15
15
  Classifier: Programming Language :: Python :: 2.7
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.8
18
17
  Classifier: Programming Language :: Python :: 3.9
19
18
  Classifier: Programming Language :: Python :: 3.10
20
19
  Classifier: Programming Language :: Python :: 3.11
21
20
  Classifier: Programming Language :: Python :: 3.12
22
21
  Classifier: Programming Language :: Python :: 3.13
23
22
  Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Programming Language :: Python :: 3.15
24
24
  Classifier: Programming Language :: Python :: Implementation :: CPython
25
25
  Classifier: Programming Language :: Python :: Implementation :: GraalPy
26
26
  Classifier: Programming Language :: Python :: Implementation :: PyPy
27
27
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
- Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, !=3.7.*
28
+ Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, !=3.7.*, !=3.8.*
29
29
  License-File: LICENSE.txt
30
30
  Dynamic: author
31
31
  Dynamic: author-email
@@ -42,7 +42,7 @@ simplejson
42
42
  ----------
43
43
 
44
44
  simplejson is a simple, fast, complete, correct and extensible
45
- JSON <http://json.org> encoder and decoder for Python 3.8+
45
+ JSON <http://json.org> encoder and decoder for Python 3.9+
46
46
  with legacy support for Python 2.7. It is pure Python code
47
47
  with no dependencies, but includes an optional C extension
48
48
  for a serious speed boost.
@@ -53,7 +53,7 @@ https://simplejson.readthedocs.io/
53
53
  simplejson is the externally maintained development version of the
54
54
  json library included with Python (since 2.6). This version is tested
55
55
  with Python 3.14 (including free-threaded builds) and maintains
56
- backwards compatibility with Python 3.8+. A legacy Python 2.7 wheel
56
+ backwards compatibility with Python 3.9+. A legacy Python 2.7 wheel
57
57
  is also published.
58
58
 
59
59
  The encoder can be specialized to provide serialization in any kind of
@@ -2,7 +2,7 @@ simplejson
2
2
  ----------
3
3
 
4
4
  simplejson is a simple, fast, complete, correct and extensible
5
- JSON <http://json.org> encoder and decoder for Python 3.8+
5
+ JSON <http://json.org> encoder and decoder for Python 3.9+
6
6
  with legacy support for Python 2.7. It is pure Python code
7
7
  with no dependencies, but includes an optional C extension
8
8
  for a serious speed boost.
@@ -13,7 +13,7 @@ https://simplejson.readthedocs.io/
13
13
  simplejson is the externally maintained development version of the
14
14
  json library included with Python (since 2.6). This version is tested
15
15
  with Python 3.14 (including free-threaded builds) and maintains
16
- backwards compatibility with Python 3.8+. A legacy Python 2.7 wheel
16
+ backwards compatibility with Python 3.9+. A legacy Python 2.7 wheel
17
17
  is also published.
18
18
 
19
19
  The encoder can be specialized to provide serialization in any kind of
@@ -42,9 +42,9 @@ copyright = '2026, Bob Ippolito'
42
42
  # other places throughout the built documents.
43
43
  #
44
44
  # The short X.Y version.
45
- version = '4.1'
45
+ version = '4.3'
46
46
  # The full version, including alpha/beta/rc tags.
47
- release = '4.1.2'
47
+ release = '4.3.0'
48
48
 
49
49
  # There are two options for replacing |today|: either, you set today to some
50
50
  # non-false value, then it is used:
@@ -21,7 +21,7 @@ for a serious speed boost.
21
21
  :mod:`simplejson` exposes an API familiar to users of the standard library
22
22
  :mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
23
23
  version of the :mod:`json` library, but maintains
24
- compatibility with Python 3.8 through 3.14 (including free-threaded
24
+ compatibility with Python 3.9 through 3.15 (including free-threaded
25
25
  builds) as well as legacy Python 2.7.
26
26
 
27
27
  Development of simplejson happens on Github:
@@ -215,8 +215,10 @@ Basic Usage
215
215
  optimization, the result would be a :class:`str` object.
216
216
 
217
217
  If *check_circular* is false (default: ``True``), then the circular
218
- reference check for container types will be skipped and a circular
219
- reference will result in an :exc:`OverflowError` (or worse).
218
+ reference check for container types (including iterables encoded with
219
+ *iterable_as_array*) will be skipped and a circular reference will
220
+ result in a :exc:`RecursionError` (:exc:`RuntimeError` on Python 2) or
221
+ worse.
220
222
 
221
223
  If *allow_nan* is false (default: ``False``), then it will be a
222
224
  :exc:`ValueError` to serialize out of range :class:`float` values
@@ -310,6 +312,10 @@ Basic Usage
310
312
  :class:`int` ``2**n`` and higher or lower than ``-2**n`` will be encoded as strings. This is to
311
313
  avoid the rounding that happens in Javascript otherwise. Note that this
312
314
  option loses type information, so use with extreme caution.
315
+ Thresholds of 64 bits and above are supported by both encoders, including
316
+ 128-bit integers. Very large thresholds do not allocate a power-of-two
317
+ boundary.
318
+
313
319
  See also *bigint_as_string* (which is equivalent to `int_as_string_bitcount=53`).
314
320
 
315
321
  .. note::
@@ -628,10 +634,11 @@ Encoders and decoders
628
634
  :class:`str` objects with all incoming unicode characters escaped. If
629
635
  *ensure_ascii* is false, the output will be a unicode object.
630
636
 
631
- If *check_circular* is true (the default), then lists, dicts, and custom
632
- encoded objects will be checked for circular references during encoding to
633
- prevent an infinite recursion (which would cause an :exc:`OverflowError`).
634
- Otherwise, no such check takes place.
637
+ If *check_circular* is true (the default), then lists, dicts, iterables
638
+ encoded with *iterable_as_array*, and custom encoded objects will be checked
639
+ for circular references during encoding to prevent an infinite recursion
640
+ (which would cause a :exc:`RecursionError`, or :exc:`RuntimeError` on
641
+ Python 2). Otherwise, no such check takes place.
635
642
 
636
643
  If *allow_nan* is true (not the default), then ``NaN``, ``Infinity``, and
637
644
  ``-Infinity`` will be encoded as such. This behavior is not JSON
@@ -12,13 +12,13 @@ from distutils.errors import CCompilerError, DistutilsExecError, \
12
12
 
13
13
  IS_PYPY = hasattr(sys, 'pypy_translation_info')
14
14
  IS_GRAALPY = getattr(getattr(sys, "implementation", None), "name", None) == "graalpy"
15
- VERSION = '4.1.2'
15
+ VERSION = '4.3.0'
16
16
  DESCRIPTION = "Simple, fast, extensible JSON encoder/decoder for Python"
17
17
 
18
18
  with open('README.rst', 'r') as f:
19
19
  LONG_DESCRIPTION = f.read()
20
20
 
21
- PYTHON_REQUIRES = '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, !=3.7.*'
21
+ PYTHON_REQUIRES = '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*, !=3.7.*, !=3.8.*'
22
22
 
23
23
  CLASSIFIERS = [
24
24
  'Development Status :: 5 - Production/Stable',
@@ -28,13 +28,13 @@ CLASSIFIERS = [
28
28
  'Programming Language :: Python :: 2',
29
29
  'Programming Language :: Python :: 2.7',
30
30
  'Programming Language :: Python :: 3',
31
- 'Programming Language :: Python :: 3.8',
32
31
  'Programming Language :: Python :: 3.9',
33
32
  'Programming Language :: Python :: 3.10',
34
33
  'Programming Language :: Python :: 3.11',
35
34
  'Programming Language :: Python :: 3.12',
36
35
  'Programming Language :: Python :: 3.13',
37
36
  'Programming Language :: Python :: 3.14',
37
+ 'Programming Language :: Python :: 3.15',
38
38
  'Programming Language :: Python :: Implementation :: CPython',
39
39
  'Programming Language :: Python :: Implementation :: GraalPy',
40
40
  'Programming Language :: Python :: Implementation :: PyPy',
@@ -5,7 +5,7 @@ interchange format.
5
5
  :mod:`simplejson` exposes an API familiar to users of the standard library
6
6
  :mod:`marshal` and :mod:`pickle` modules. It is the externally maintained
7
7
  version of the :mod:`json` library contained in Python 2.6+, supporting
8
- Python 2.7 and Python 3.8+, and has significant performance advantages,
8
+ Python 2.7 and Python 3.9+, and has significant performance advantages,
9
9
  even without using the optional C extension for speedups.
10
10
 
11
11
  Encoding basic Python object hierarchies::
@@ -118,7 +118,7 @@ Serializing multiple objects to JSON lines (newline-delimited JSON)::
118
118
 
119
119
  """
120
120
  from __future__ import absolute_import
121
- __version__ = '4.1.2'
121
+ __version__ = '4.3.0'
122
122
  __all__ = [
123
123
  'dump', 'dumps', 'load', 'loads',
124
124
  'JSONDecoder', 'JSONDecodeError', 'JSONEncoder',
@@ -246,7 +246,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
246
246
  encoding == 'utf-8' and default is None and use_decimal
247
247
  and namedtuple_as_object and tuple_as_array and not iterable_as_array
248
248
  and not bigint_as_string and not sort_keys
249
- and not item_sort_key and not for_json
249
+ and item_sort_key is None and not for_json
250
250
  and not ignore_nan and int_as_string_bitcount is None
251
251
  and not kw
252
252
  ):
@@ -292,8 +292,9 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
292
292
  by JSON. When it is true, all non-ASCII characters are escaped.
293
293
 
294
294
  If ``check_circular`` is false, then the circular reference check
295
- for container types will be skipped and a circular reference will
296
- result in an ``OverflowError`` (or worse).
295
+ for container types (including iterables encoded with
296
+ ``iterable_as_array``) will be skipped and a circular reference will
297
+ result in a ``RecursionError`` (``RuntimeError`` on Python 2) or worse.
297
298
 
298
299
  If *allow_nan* is true (default: ``False``), then out of range ``float``
299
300
  values (``nan``, ``inf``, ``-inf``) will be serialized to
@@ -372,7 +373,7 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
372
373
  encoding == 'utf-8' and default is None and use_decimal
373
374
  and namedtuple_as_object and tuple_as_array and not iterable_as_array
374
375
  and not bigint_as_string and not sort_keys
375
- and not item_sort_key and not for_json
376
+ and item_sort_key is None and not for_json
376
377
  and not ignore_nan and int_as_string_bitcount is None
377
378
  and not kw
378
379
  ):