python-rapidjson 1.17__tar.gz → 1.18__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 (97) hide show
  1. {python-rapidjson-1.17 → python-rapidjson-1.18}/CHANGES.rst +8 -0
  2. {python-rapidjson-1.17 → python-rapidjson-1.18}/LICENSE +1 -0
  3. {python-rapidjson-1.17 → python-rapidjson-1.18}/MANIFEST.in +1 -0
  4. {python-rapidjson-1.17 → python-rapidjson-1.18}/PKG-INFO +9 -1
  5. {python-rapidjson-1.17 → python-rapidjson-1.18}/benchmarks/conftest.py +30 -2
  6. {python-rapidjson-1.17 → python-rapidjson-1.18}/benchmarks/tablize.py +37 -25
  7. python-rapidjson-1.18/docs/benchmarks-tables.rst +123 -0
  8. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/changes.rst +8 -0
  9. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/decoder.rst +3 -3
  10. {python-rapidjson-1.17 → python-rapidjson-1.18}/python_rapidjson.egg-info/PKG-INFO +9 -1
  11. {python-rapidjson-1.17 → python-rapidjson-1.18}/python_rapidjson.egg-info/SOURCES.txt +2 -1
  12. python-rapidjson-1.18/python_rapidjson.egg-info/top_level.txt +2 -0
  13. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson.cpp +8 -2
  14. {python-rapidjson-1.17 → python-rapidjson-1.18}/requirements-test.txt +1 -0
  15. {python-rapidjson-1.17 → python-rapidjson-1.18}/requirements.txt +2 -3
  16. {python-rapidjson-1.17 → python-rapidjson-1.18}/setup.py +4 -0
  17. python-rapidjson-1.18/typings/rapidjson/__init__.pyi +232 -0
  18. python-rapidjson-1.18/version.txt +1 -0
  19. python-rapidjson-1.17/docs/benchmarks-tables.rst +0 -121
  20. python-rapidjson-1.17/python_rapidjson.egg-info/top_level.txt +0 -1
  21. python-rapidjson-1.17/version.txt +0 -1
  22. {python-rapidjson-1.17 → python-rapidjson-1.18}/.dir-locals.el +0 -0
  23. {python-rapidjson-1.17 → python-rapidjson-1.18}/README.rst +0 -0
  24. {python-rapidjson-1.17 → python-rapidjson-1.18}/benchmarks/test_benchmark.py +0 -0
  25. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/Makefile +0 -0
  26. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/api.rst +0 -0
  27. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/benchmarks.rst +0 -0
  28. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/conf.py +0 -0
  29. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/dump.rst +0 -0
  30. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/dumps.rst +0 -0
  31. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/encoder.rst +0 -0
  32. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/index.rst +0 -0
  33. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/load.rst +0 -0
  34. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/loads.rst +0 -0
  35. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/quickstart.rst +0 -0
  36. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/rawjson.rst +0 -0
  37. {python-rapidjson-1.17 → python-rapidjson-1.18}/docs/validator.rst +0 -0
  38. {python-rapidjson-1.17 → python-rapidjson-1.18}/python_rapidjson.egg-info/dependency_links.txt +0 -0
  39. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/allocators.h +0 -0
  40. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/cursorstreamwrapper.h +0 -0
  41. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/document.h +0 -0
  42. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/encodedstream.h +0 -0
  43. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/encodings.h +0 -0
  44. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/error/en.h +0 -0
  45. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/error/error.h +0 -0
  46. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/filereadstream.h +0 -0
  47. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/filewritestream.h +0 -0
  48. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/fwd.h +0 -0
  49. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/biginteger.h +0 -0
  50. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/clzll.h +0 -0
  51. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/diyfp.h +0 -0
  52. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/dtoa.h +0 -0
  53. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/ieee754.h +0 -0
  54. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/itoa.h +0 -0
  55. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/meta.h +0 -0
  56. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/pow10.h +0 -0
  57. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/regex.h +0 -0
  58. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/stack.h +0 -0
  59. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/strfunc.h +0 -0
  60. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/strtod.h +0 -0
  61. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/internal/swap.h +0 -0
  62. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/istreamwrapper.h +0 -0
  63. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/memorybuffer.h +0 -0
  64. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/memorystream.h +0 -0
  65. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/msinttypes/inttypes.h +0 -0
  66. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/msinttypes/stdint.h +0 -0
  67. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/ostreamwrapper.h +0 -0
  68. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/pointer.h +0 -0
  69. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/prettywriter.h +0 -0
  70. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/rapidjson.h +0 -0
  71. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/reader.h +0 -0
  72. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/schema.h +0 -0
  73. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/stream.h +0 -0
  74. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/stringbuffer.h +0 -0
  75. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/uri.h +0 -0
  76. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/include/rapidjson/writer.h +0 -0
  77. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/license.txt +0 -0
  78. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson/readme.md +0 -0
  79. {python-rapidjson-1.17 → python-rapidjson-1.18}/rapidjson_exact_version.txt +0 -0
  80. {python-rapidjson-1.17 → python-rapidjson-1.18}/setup.cfg +0 -0
  81. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/conftest.py +0 -0
  82. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_base_types.py +0 -0
  83. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_circular.py +0 -0
  84. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_dict_subclass.py +0 -0
  85. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_enum.py +0 -0
  86. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_float.py +0 -0
  87. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_memory_leaks.py +0 -0
  88. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_params.py +0 -0
  89. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_pass1.py +0 -0
  90. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_pass2.py +0 -0
  91. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_pass3.py +0 -0
  92. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_rawjson.py +0 -0
  93. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_refs_count.py +0 -0
  94. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_streams.py +0 -0
  95. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_unicode.py +0 -0
  96. {python-rapidjson-1.17 → python-rapidjson-1.18}/tests/test_validator.py +0 -0
  97. {python-rapidjson-1.17 → python-rapidjson-1.18}/tox.ini +0 -0
@@ -1,6 +1,14 @@
1
1
  Changes
2
2
  -------
3
3
 
4
+ 1.18 (2024-06-29)
5
+ ~~~~~~~~~~~~~~~~~
6
+
7
+ * Expose PEP-484 typing stubs, thanks to Rodion Kosianenko and GoodWasHere (`PR #204`__)
8
+
9
+ __ https://github.com/python-rapidjson/python-rapidjson/pull/204
10
+
11
+
4
12
  1.17 (2024-05-18)
5
13
  ~~~~~~~~~~~~~~~~~
6
14
 
@@ -3,6 +3,7 @@ python-rapidjson is licensed under the MIT license.
3
3
  The MIT License (MIT)
4
4
 
5
5
  Copyright (c) 2015, 2016, 2017 Ken Robbins
6
+ Copyright (c) 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Lele Gaifax
6
7
 
7
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
8
9
  of this software and associated documentation files (the "Software"), to deal
@@ -2,6 +2,7 @@ include .dir-locals.el
2
2
  include LICENSE MANIFEST.in *.cfg *.ini *.py *.rst *.txt
3
3
  include python-rapidjson/*.cpp python-rapidjson/*.h
4
4
  include benchmarks/*.py tests/*.py
5
+ include typings/*.pyi
5
6
 
6
7
  exclude .github .gitmodules
7
8
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-rapidjson
3
- Version: 1.17
3
+ Version: 1.18
4
4
  Summary: Python wrapper around rapidjson
5
5
  Home-page: https://github.com/python-rapidjson/python-rapidjson
6
6
  Author: Ken Robbins
@@ -155,6 +155,14 @@ __ https://python-rapidjson.readthedocs.io/en/latest/quickstart.html#incompatibi
155
155
  Changes
156
156
  -------
157
157
 
158
+ 1.18 (2024-06-29)
159
+ ~~~~~~~~~~~~~~~~~
160
+
161
+ * Expose PEP-484 typing stubs, thanks to Rodion Kosianenko and GoodWasHere (`PR #204`__)
162
+
163
+ __ https://github.com/python-rapidjson/python-rapidjson/pull/204
164
+
165
+
158
166
  1.17 (2024-05-18)
159
167
  ~~~~~~~~~~~~~~~~~
160
168
 
@@ -2,7 +2,7 @@
2
2
  # :Project: python-rapidjson -- Benchmarks specific pytest configuration
3
3
  # :Author: Lele Gaifax <lele@metapensiero.it>
4
4
  # :License: MIT License
5
- # :Copyright: © 2016, 2017, 2018, 2020 Lele Gaifax
5
+ # :Copyright: © 2016, 2017, 2018, 2020, 2024 Lele Gaifax
6
6
  #
7
7
 
8
8
  from collections import namedtuple
@@ -56,6 +56,32 @@ contenders.append(Contender('rapidjson_nn_c',
56
56
  rj.Encoder(number_mode=rj.NM_NATIVE),
57
57
  rj.Decoder(number_mode=rj.NM_NATIVE)))
58
58
 
59
+
60
+
61
+ class DecoderPython(rj.Decoder):
62
+ def end_array(self, a):
63
+ return a
64
+
65
+ def start_object(self):
66
+ return {}
67
+
68
+ def end_object(self, d):
69
+ return d
70
+
71
+ def string(self, s):
72
+ return s
73
+
74
+
75
+ class EncoderPython(rj.Encoder):
76
+ def default(self, obj):
77
+ return repr(obj)
78
+
79
+
80
+ contenders.append(Contender('rapidjson_p',
81
+ EncoderPython(),
82
+ DecoderPython()))
83
+
84
+
59
85
  numbers_contenders = [
60
86
  Contender('Wide numbers', rj.dumps, rj.loads),
61
87
  Contender('Native numbers',
@@ -147,7 +173,9 @@ def pytest_generate_tests(metafunc):
147
173
  if metafunc.config.option.compare_other_engines:
148
174
  metafunc.parametrize('contender', contenders, ids=attrgetter('name'))
149
175
  else:
150
- metafunc.parametrize('contender', contenders[:1], ids=attrgetter('name'))
176
+ metafunc.parametrize('contender', [c for c in contenders
177
+ if c.name.startswith('rapidjson')],
178
+ ids=attrgetter('name'))
151
179
 
152
180
  if 'datetimes_loads_contender' in metafunc.fixturenames:
153
181
  metafunc.parametrize('datetimes_loads_contender',
@@ -70,7 +70,7 @@ class Comparison:
70
70
  cells = ['=' * (width+2) for width in widths]
71
71
  headseprow = '+' + '+'.join(cells) + '+'
72
72
 
73
- cells = [' {:^%d} ' % width for width in widths]
73
+ cells = [f' {{:^{width}}} ' for width in widths]
74
74
  rowfmt = '|' + '|'.join(cells) + '|'
75
75
 
76
76
  print(seprow)
@@ -95,6 +95,7 @@ def dumps_and_loads(benchmarks):
95
95
  'rapidjson_c',
96
96
  'rapidjson_nn_f',
97
97
  'rapidjson_nn_c',
98
+ 'rapidjson_p',
98
99
  'simdjson',
99
100
  'orjson',
100
101
  'ujson',
@@ -104,15 +105,17 @@ def dumps_and_loads(benchmarks):
104
105
  r'``Encoder()``\ [2]_',
105
106
  r'``dumps(n)``\ [3]_',
106
107
  r'``Encoder(n)``\ [4]_',
107
- r'simdjson\ [5]_',
108
- r'orjson\ [6]_',
109
- r'ujson\ [7]_',
110
- r'simplejson\ [8]_',
111
- r'stdlib\ [9]_')
112
- d_headers = (r'``loads()``\ [10]_',
113
- r'``Decoder()``\ [11]_',
114
- r'``loads(n)``\ [12]_',
115
- r'``Decoder(n)``\ [13]_',
108
+ r'``PyEncoder()``\ [5]_',
109
+ r'simdjson\ [6]_',
110
+ r'orjson\ [7]_',
111
+ r'ujson\ [8]_',
112
+ r'simplejson\ [9]_',
113
+ r'stdlib\ [10]_')
114
+ d_headers = (r'``loads()``\ [11]_',
115
+ r'``Decoder()``\ [12]_',
116
+ r'``loads(n)``\ [13]_',
117
+ r'``Decoder(n)``\ [14]_',
118
+ r'``PyDecoder()``\ [15]_',
116
119
  r'simdjson',
117
120
  r'orjson',
118
121
  r'ujson',
@@ -121,20 +124,29 @@ def dumps_and_loads(benchmarks):
121
124
 
122
125
  assert len(contenders) == len(s_headers) == len(d_headers)
123
126
 
127
+ from csimdjson import VERSION as simdjv
128
+ from orjson import __version__ as orjv
129
+ from simplejson import __version__ as sjv
130
+ from ujson import __version__ as ujv
131
+
132
+ pyv = '%d.%d.%d' % sys.version_info[:3]
133
+
124
134
  footnotes = [
125
135
  '.. [1] ``rapidjson.dumps()``',
126
136
  '.. [2] ``rapidjson.Encoder()``',
127
137
  '.. [3] ``rapidjson.dumps(number_mode=NM_NATIVE)``',
128
138
  '.. [4] ``rapidjson.Encoder(number_mode=NM_NATIVE)``',
129
- '.. [5] `simdjson 6.0.2 <https://pypi.org/project/pysimdjson/6.0.2/>`__',
130
- '.. [6] `orjson 3.10.1 <https://pypi.org/project/orjson/3.10.1/>`__',
131
- '.. [7] `ujson 5.9.0 <https://pypi.org/project/ujson/5.9.0/>`__',
132
- '.. [8] `simplejson 3.19.2 <https://pypi.org/pypi/simplejson/3.19.2>`__',
133
- '.. [9] Python %d.%d.%d standard library ``json``' % sys.version_info[:3],
134
- '.. [10] ``rapidjson.loads()``',
135
- '.. [11] ``rapidjson.Decoder()``',
136
- '.. [12] ``rapidjson.loads(number_mode=NM_NATIVE)``',
137
- '.. [13] ``rapidjson.Decoder(number_mode=NM_NATIVE)``']
139
+ '.. [5] ``rapidjson.Encoder()`` subclassed in Python with *no-op* hook methods',
140
+ f'.. [6] `simdjson {simdjv} <https://pypi.org/project/pysimdjson/>`__',
141
+ f'.. [7] `orjson {orjv} <https://pypi.org/project/orjson/{orjv}/>`__',
142
+ f'.. [8] `ujson {ujv} <https://pypi.org/project/ujson/{ujv}/>`__',
143
+ f'.. [9] `simplejson {sjv} <https://pypi.org/pypi/simplejson/{sjv}>`__',
144
+ f'.. [10] Python {pyv} standard library ``json``',
145
+ '.. [11] ``rapidjson.loads()``',
146
+ '.. [12] ``rapidjson.Decoder()``',
147
+ '.. [13] ``rapidjson.loads(number_mode=NM_NATIVE)``',
148
+ '.. [14] ``rapidjson.Decoder(number_mode=NM_NATIVE)``',
149
+ '.. [15] ``rapidjson.Decoder() subclassed in Python with *no-op* hook methods``']
138
150
 
139
151
  comparison = Comparison(contenders, benchmarks)
140
152
 
@@ -157,17 +169,17 @@ def ascii_vs_utf8(benchmarks):
157
169
  ('ujson', 'uj'),
158
170
  ('simplejson', 'sj'),
159
171
  ('stdlib json', 'json'))
160
- contenders = ['%s %s' % (e[0], k) for e in engines for k in ('ascii', 'utf8')]
161
- i = 14
172
+ contenders = [f'{e[0]} {k}' for e in engines for k in ('ascii', 'utf8')]
173
+ i = 15
162
174
  s_headers = []
163
175
  footnotes = []
164
176
  for e in engines:
165
177
  i += 1
166
- s_headers.append(r'``%s ascii``\ [%d]_' % (e[1], i))
167
- footnotes.append('.. [%d] ``%s.dumps(ensure_ascii=True)``' % (i, e[0]))
178
+ s_headers.append(rf'``{e[1]} ascii``\ [{i}]_')
179
+ footnotes.append(f'.. [{i}] ``{e[0]}.dumps(ensure_ascii=True)``')
168
180
  i += 1
169
- s_headers.append(r'``%s utf8``\ [%d]_' % (e[1], i))
170
- footnotes.append('.. [%d] ``%s.dumps(ensure_ascii=False)``' % (i, e[0]))
181
+ s_headers.append(rf'``{e[1]} utf8``\ [{i}]_')
182
+ footnotes.append(f'.. [{i}] ``{e[0]}.dumps(ensure_ascii=False)``')
171
183
 
172
184
  comparison = Comparison(contenders, benchmarks)
173
185
 
@@ -0,0 +1,123 @@
1
+
2
+ Serialization
3
+ ~~~~~~~~~~~~~
4
+
5
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
6
+ | serialize | ``dumps()``\ [1]_ | ``Encoder()``\ [2]_ | ``dumps(n)``\ [3]_ | ``Encoder(n)``\ [4]_ | ``PyEncoder()``\ [5]_ | simdjson\ [6]_ | orjson\ [7]_ | ujson\ [8]_ | simplejson\ [9]_ | stdlib\ [10]_ |
7
+ +=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+
8
+ | 100 arrays dict | 1.00 | 1.00 | 0.73 | 0.73 | 0.99 | 2.21 | **0.17** | 0.85 | 5.93 | 2.31 |
9
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
10
+ | 100 dicts array | 1.00 | 0.99 | 0.77 | 0.74 | 1.01 | 2.27 | **0.22** | 0.84 | 6.82 | 2.27 |
11
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
12
+ | 256 Trues array | 1.00 | 1.01 | 1.18 | 1.00 | 1.07 | 2.62 | **0.36** | 1.56 | 2.95 | 2.60 |
13
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
14
+ | 256 ascii array | 1.00 | 1.00 | 1.01 | 1.00 | 1.00 | 0.90 | **0.09** | 0.47 | 1.05 | 0.90 |
15
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
16
+ | 256 doubles array | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 0.91 | **0.04** | 0.22 | 0.95 | 0.92 |
17
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
18
+ | 256 unicode array | 1.00 | 0.80 | 0.79 | 0.82 | 0.80 | 0.68 | **0.02** | 0.52 | 0.66 | 0.68 |
19
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
20
+ | apache.json | 1.00 | 1.00 | 1.00 | 1.00 | 1.01 | 1.70 | **0.19** | 1.02 | 3.29 | 1.68 |
21
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
22
+ | canada.json | 1.00 | 1.00 | 0.98 | 0.99 | 1.00 | 1.04 | **0.06** | 0.27 | 1.81 | 1.05 |
23
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
24
+ | complex object | 1.00 | 1.00 | 0.89 | 0.88 | 1.00 | 1.55 | **0.17** | 0.66 | 2.68 | 1.54 |
25
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
26
+ | composite object | 1.00 | 0.99 | 0.68 | 0.64 | 0.98 | 1.70 | **0.21** | 0.83 | 2.48 | 1.72 |
27
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
28
+ | ctm.json | 1.00 | 1.00 | 0.75 | 0.75 | 1.00 | 2.27 | **0.21** | 1.11 | 6.56 | 2.27 |
29
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
30
+ | github.json | 1.00 | 1.00 | 0.97 | 0.96 | 1.00 | 1.38 | **0.16** | 0.86 | 2.10 | 1.39 |
31
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
32
+ | instruments.json | 1.00 | 1.00 | 0.74 | 0.74 | 1.00 | 1.81 | **0.20** | 0.90 | 2.86 | 1.81 |
33
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
34
+ | mesh.json | 1.00 | 1.00 | 0.89 | 0.89 | 1.00 | 0.94 | **0.10** | 0.28 | 1.19 | 0.94 |
35
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
36
+ | truenull.json | 1.00 | 1.02 | 1.06 | 1.03 | 1.03 | 2.13 | **0.28** | 1.76 | 2.12 | 2.21 |
37
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
38
+ | tweet.json | 1.00 | 1.00 | 0.99 | 0.93 | 1.00 | 1.70 | **0.20** | 0.91 | 2.70 | 1.69 |
39
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
40
+ | twitter.json | 1.00 | 1.00 | 0.95 | 0.95 | 1.00 | 1.46 | **0.18** | 0.94 | 2.02 | 1.46 |
41
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
42
+ | overall | 1.00 | 1.00 | 0.80 | 0.80 | 1.00 | 1.85 | **0.14** | 0.68 | 4.63 | 1.92 |
43
+ +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
44
+
45
+ Deserialization
46
+ ~~~~~~~~~~~~~~~
47
+
48
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
49
+ | deserialize | ``loads()``\ [11]_ | ``Decoder()``\ [12]_ | ``loads(n)``\ [13]_ | ``Decoder(n)``\ [14]_ | ``PyDecoder()``\ [15]_ | simdjson | orjson | ujson | simplejson | stdlib |
50
+ +=======================+========================+========================+========================+========================+========================+========================+========================+========================+========================+========================+
51
+ | 100 arrays dict | 1.00 | 1.01 | 0.98 | 0.93 | 1.59 | 0.86 | **0.56** | 0.85 | 1.20 | 0.94 |
52
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
53
+ | 100 dicts array | 1.00 | 1.00 | 0.87 | 0.86 | 1.58 | 0.62 | **0.36** | 0.69 | 1.35 | 1.00 |
54
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
55
+ | 256 Trues array | 1.00 | 1.02 | 1.08 | 0.98 | 1.14 | 0.93 | **0.42** | 0.96 | 1.53 | 1.37 |
56
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
57
+ | 256 ascii array | 1.00 | 1.00 | 0.99 | 0.99 | 1.50 | 0.50 | **0.33** | 0.85 | 0.86 | 0.77 |
58
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
59
+ | 256 doubles array | 1.00 | 1.00 | 0.26 | 0.26 | 1.01 | 0.21 | **0.16** | 0.61 | 1.08 | 1.03 |
60
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
61
+ | 256 unicode array | 1.00 | 1.00 | 1.00 | 1.00 | 1.07 | 1.12 | **0.41** | 0.82 | 4.06 | 1.45 |
62
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
63
+ | apache.json | 1.00 | 1.00 | 1.01 | 1.01 | 1.57 | 0.68 | **0.44** | 0.79 | 0.84 | 0.82 |
64
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
65
+ | canada.json | 1.00 | 1.00 | 0.33 | 0.33 | 1.12 | 0.29 | **0.25** | 0.54 | 0.97 | 0.96 |
66
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
67
+ | complex object | 1.00 | 1.00 | 0.84 | 0.83 | 1.31 | 0.68 | **0.35** | 0.78 | 1.15 | 0.96 |
68
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
69
+ | composite object | 1.00 | 1.00 | 0.84 | 0.83 | 1.34 | 0.61 | **0.39** | 0.59 | 1.45 | 1.07 |
70
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
71
+ | ctm.json | 1.00 | 0.99 | 0.93 | 0.93 | 1.48 | 0.80 | **0.53** | 1.13 | 1.20 | 0.97 |
72
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
73
+ | github.json | 1.00 | 1.00 | 0.99 | 0.98 | 1.37 | 0.66 | **0.39** | 0.77 | 0.91 | 0.82 |
74
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
75
+ | instruments.json | 1.00 | 1.00 | 0.87 | 0.87 | 1.23 | 0.66 | **0.36** | 0.76 | 1.17 | 0.94 |
76
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
77
+ | mesh.json | 1.00 | 1.00 | 0.52 | 0.51 | 1.04 | 0.43 | **0.33** | 0.66 | 1.48 | 1.04 |
78
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
79
+ | truenull.json | 1.00 | 1.01 | 1.01 | 0.99 | 1.01 | 0.58 | **0.34** | 0.87 | 0.99 | 0.95 |
80
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
81
+ | tweet.json | 1.00 | 1.01 | 0.99 | 0.97 | 1.30 | 0.69 | **0.39** | 0.84 | 1.17 | 0.99 |
82
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
83
+ | twitter.json | 1.00 | 1.00 | 0.97 | 0.97 | 1.25 | 0.68 | **0.39** | 0.85 | 0.99 | 0.89 |
84
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
85
+ | overall | 1.00 | 1.01 | 0.91 | 0.87 | 1.54 | 0.80 | **0.53** | 0.82 | 1.19 | 0.94 |
86
+ +-----------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+------------------------+
87
+
88
+ ASCII vs UTF-8 Serialization
89
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90
+
91
+ +-------------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
92
+ | serialize | ``rj ascii``\ [16]_ | ``rj utf8``\ [17]_ | ``uj ascii``\ [18]_ | ``uj utf8``\ [19]_ | ``sj ascii``\ [20]_ | ``sj utf8``\ [21]_ | ``json ascii``\ [22]_ | ``json utf8``\ [23]_ |
93
+ +=========================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+
94
+ | Long ASCII string | 1.00 | 0.43 | **0.24** | 0.29 | 0.60 | 1.24 | 0.57 | 1.00 |
95
+ +-------------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
96
+ | Long Unicode string | 1.00 | 0.57 | 0.64 | **0.47** | 0.72 | 0.62 | 0.76 | 0.48 |
97
+ +-------------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
98
+ | overall | 1.00 | 0.53 | 0.51 | **0.41** | 0.68 | 0.82 | 0.70 | 0.65 |
99
+ +-------------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
100
+
101
+ .. [1] ``rapidjson.dumps()``
102
+ .. [2] ``rapidjson.Encoder()``
103
+ .. [3] ``rapidjson.dumps(number_mode=NM_NATIVE)``
104
+ .. [4] ``rapidjson.Encoder(number_mode=NM_NATIVE)``
105
+ .. [5] ``rapidjson.Encoder()`` subclassed in Python with *no-op* hook methods
106
+ .. [6] `simdjson 3.6.4 <https://pypi.org/project/pysimdjson/>`__
107
+ .. [7] `orjson 3.10.5 <https://pypi.org/project/orjson/3.10.5/>`__
108
+ .. [8] `ujson 5.10.0 <https://pypi.org/project/ujson/5.10.0/>`__
109
+ .. [9] `simplejson 3.19.2 <https://pypi.org/pypi/simplejson/3.19.2>`__
110
+ .. [10] Python 3.11.9 standard library ``json``
111
+ .. [11] ``rapidjson.loads()``
112
+ .. [12] ``rapidjson.Decoder()``
113
+ .. [13] ``rapidjson.loads(number_mode=NM_NATIVE)``
114
+ .. [14] ``rapidjson.Decoder(number_mode=NM_NATIVE)``
115
+ .. [15] ``rapidjson.Decoder() subclassed in Python with *no-op* hook methods``
116
+ .. [16] ``rapidjson.dumps(ensure_ascii=True)``
117
+ .. [17] ``rapidjson.dumps(ensure_ascii=False)``
118
+ .. [18] ``ujson.dumps(ensure_ascii=True)``
119
+ .. [19] ``ujson.dumps(ensure_ascii=False)``
120
+ .. [20] ``simplejson.dumps(ensure_ascii=True)``
121
+ .. [21] ``simplejson.dumps(ensure_ascii=False)``
122
+ .. [22] ``stdlib json.dumps(ensure_ascii=True)``
123
+ .. [23] ``stdlib json.dumps(ensure_ascii=False)``
@@ -1,6 +1,14 @@
1
1
  Changes
2
2
  -------
3
3
 
4
+ 1.18 (2024-06-29)
5
+ ~~~~~~~~~~~~~~~~~
6
+
7
+ * Expose PEP-484 typing stubs, thanks to Rodion Kosianenko and GoodWasHere (`PR #204`__)
8
+
9
+ __ https://github.com/python-rapidjson/python-rapidjson/pull/204
10
+
11
+
4
12
  1.17 (2024-05-18)
5
13
  ~~~~~~~~~~~~~~~~~
6
14
 
@@ -2,7 +2,7 @@
2
2
  .. :Project: python-rapidjson -- Decoder class documentation
3
3
  .. :Author: Lele Gaifax <lele@metapensiero.it>
4
4
  .. :License: MIT License
5
- .. :Copyright: © 2017, 2018, 2020, 2021 Lele Gaifax
5
+ .. :Copyright: © 2017, 2018, 2020, 2021, 2024 Lele Gaifax
6
6
  ..
7
7
 
8
8
  ===============
@@ -77,11 +77,11 @@
77
77
 
78
78
  .. method:: end_array(sequence)
79
79
 
80
- :param sequence: an instance implement the *mutable sequence* protocol
80
+ :param sequence: an instance implementing the *mutable sequence* protocol
81
81
  :returns: a new value
82
82
 
83
83
  This is called, if implemented, when a *JSON array* has been completely parsed, and
84
- can be used replace it with an arbitrary different value:
84
+ can be used to replace it with an arbitrary different value:
85
85
 
86
86
  .. doctest::
87
87
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-rapidjson
3
- Version: 1.17
3
+ Version: 1.18
4
4
  Summary: Python wrapper around rapidjson
5
5
  Home-page: https://github.com/python-rapidjson/python-rapidjson
6
6
  Author: Ken Robbins
@@ -155,6 +155,14 @@ __ https://python-rapidjson.readthedocs.io/en/latest/quickstart.html#incompatibi
155
155
  Changes
156
156
  -------
157
157
 
158
+ 1.18 (2024-06-29)
159
+ ~~~~~~~~~~~~~~~~~
160
+
161
+ * Expose PEP-484 typing stubs, thanks to Rodion Kosianenko and GoodWasHere (`PR #204`__)
162
+
163
+ __ https://github.com/python-rapidjson/python-rapidjson/pull/204
164
+
165
+
158
166
  1.17 (2024-05-18)
159
167
  ~~~~~~~~~~~~~~~~~
160
168
 
@@ -89,4 +89,5 @@ tests/test_rawjson.py
89
89
  tests/test_refs_count.py
90
90
  tests/test_streams.py
91
91
  tests/test_unicode.py
92
- tests/test_validator.py
92
+ tests/test_validator.py
93
+ typings/rapidjson/__init__.pyi
@@ -0,0 +1,2 @@
1
+ rapidjson
2
+ rapidjson-stubs
@@ -4032,10 +4032,16 @@ module_exec(PyObject* m)
4032
4032
  ", Lele Gaifax <lele@metapensiero.it>")
4033
4033
  || PyModule_AddStringConstant(m, "__rapidjson_version__",
4034
4034
  RAPIDJSON_VERSION_STRING)
4035
- #ifdef RAPIDJSON_EXACT_VERSION
4036
4035
  || PyModule_AddStringConstant(m, "__rapidjson_exact_version__",
4037
- STRINGIFY(RAPIDJSON_EXACT_VERSION))
4036
+ #ifdef RAPIDJSON_EXACT_VERSION
4037
+ STRINGIFY(RAPIDJSON_EXACT_VERSION)
4038
+ #else
4039
+ // This may happen for several reasons, under CI
4040
+ // test or when the RJ library does not come from
4041
+ // the git submodule
4042
+ "not available"
4038
4043
  #endif
4044
+ )
4039
4045
  )
4040
4046
  return -1;
4041
4047
 
@@ -7,6 +7,7 @@
7
7
  # :Copyright: © 2015, 2017, 2018, 2021, 2022, 2023 Lele Gaifax
8
8
  #
9
9
 
10
+ mypy==1.10.0
10
11
  pytest==7.4.3
11
12
  pytz==2023.3.post1
12
13
  sphinx==7.2.6
@@ -15,8 +15,7 @@ twine==5.0.0
15
15
  # Needed by make benchmarks-*
16
16
  pytest-benchmark==4.0.0
17
17
 
18
- # Keep in sync with benchmarks/tablize.py versions
19
18
  pysimdjson==6.0.2
20
- orjson==3.10.1
19
+ orjson==3.10.5
21
20
  simplejson==3.19.2
22
- ujson==5.9.0
21
+ ujson==5.10.0
@@ -115,5 +115,9 @@ setup(
115
115
  'Programming Language :: Python',
116
116
  ],
117
117
  ext_modules=[Extension('rapidjson', **extension_options)],
118
+ package_dir={"rapidjson-stubs": "typings/rapidjson"},
119
+ packages=["rapidjson-stubs"],
120
+ package_data={"rapidjson-stubs": ["*.pyi"]},
121
+ include_package_data=True,
118
122
  **other_setup_options
119
123
  )
@@ -0,0 +1,232 @@
1
+ # -*- coding: utf-8 -*-
2
+ # :Project: python-rapidjson -- PEP-484 typing stubs
3
+ # :Author: Rodion Kosianenko <GoodWasHere@gmail.com>
4
+ # :License: MIT License
5
+ # :Copyright: © 2024 Rodion Kosianenko
6
+ # :Copyright: © 2024 Lele Gaifax
7
+ #
8
+
9
+ import typing as t
10
+
11
+
12
+ __rapidjson_exact_version__: str
13
+ __rapidjson_version__: str
14
+
15
+
16
+ _JSONType = t.Union[
17
+ str,
18
+ int,
19
+ float,
20
+ bool,
21
+ None,
22
+ t.Dict[str, "_JSONType"],
23
+ t.List["_JSONType"],
24
+ ]
25
+
26
+
27
+ # Const types
28
+ _BM_NONE_TYPE = t.Literal[0]
29
+ _BM_UTF8_TYPE = t.Literal[1]
30
+ _DM_IGNORE_TZ_TYPE = t.Literal[32]
31
+ _DM_ISO8601_TYPE = t.Literal[1]
32
+ _DM_NAIVE_IS_UTC_TYPE = t.Literal[64]
33
+ _DM_NONE_TYPE = t.Literal[0]
34
+ _DM_ONLY_SECONDS_TYPE = t.Literal[16]
35
+ _DM_SHIFT_TO_UTC_TYPE = t.Literal[128]
36
+ _DM_UNIX_TIME_TYPE = t.Literal[2]
37
+ _IM_ANY_ITERABLE_TYPE = t.Literal[0]
38
+ _IM_ONLY_LISTS_TYPE = t.Literal[1]
39
+ _MM_ANY_MAPPING_TYPE = t.Literal[0]
40
+ _MM_COERCE_KEYS_TO_STRINGS_TYPE = t.Literal[2]
41
+ _MM_ONLY_DICTS_TYPE = t.Literal[1]
42
+ _MM_SKIP_NON_STRING_KEYS_TYPE = t.Literal[4]
43
+ _MM_SORT_KEYS_TYPE = t.Literal[8]
44
+ _NM_DECIMAL_TYPE = t.Literal[2]
45
+ _NM_NAN_TYPE = t.Literal[1]
46
+ _NM_NATIVE_TYPE = t.Literal[4]
47
+ _NM_NONE_TYPE = t.Literal[0]
48
+ _PM_COMMENTS_TYPE = t.Literal[1]
49
+ _PM_NONE_TYPE = t.Literal[0]
50
+ _PM_TRAILING_COMMAS_TYPE = t.Literal[2]
51
+ _UM_CANONICAL_TYPE = t.Literal[1]
52
+ _UM_HEX_TYPE = t.Literal[2]
53
+ _UM_NONE_TYPE = t.Literal[0]
54
+ _WM_COMPACT_TYPE = t.Literal[0]
55
+ _WM_PRETTY_TYPE = t.Literal[1]
56
+ _WM_SINGLE_LINE_ARRAY_TYPE = t.Literal[2]
57
+
58
+
59
+ # Const values
60
+ BM_NONE: _BM_NONE_TYPE = 0
61
+ BM_UTF8: _BM_UTF8_TYPE = 1
62
+ DM_IGNORE_TZ: _DM_IGNORE_TZ_TYPE = 32
63
+ DM_ISO8601: _DM_ISO8601_TYPE = 1
64
+ DM_NAIVE_IS_UTC: _DM_NAIVE_IS_UTC_TYPE = 64
65
+ DM_NONE: _DM_NONE_TYPE = 0
66
+ DM_ONLY_SECONDS: _DM_ONLY_SECONDS_TYPE = 16
67
+ DM_SHIFT_TO_UTC: _DM_SHIFT_TO_UTC_TYPE = 128
68
+ DM_UNIX_TIME: _DM_UNIX_TIME_TYPE = 2
69
+ IM_ANY_ITERABLE: _IM_ANY_ITERABLE_TYPE = 0
70
+ IM_ONLY_LISTS: _IM_ONLY_LISTS_TYPE = 1
71
+ MM_ANY_MAPPING: _MM_ANY_MAPPING_TYPE = 0
72
+ MM_COERCE_KEYS_TO_STRINGS: _MM_COERCE_KEYS_TO_STRINGS_TYPE = 2
73
+ MM_ONLY_DICTS: _MM_ONLY_DICTS_TYPE = 1
74
+ MM_SKIP_NON_STRING_KEYS: _MM_SKIP_NON_STRING_KEYS_TYPE = 4
75
+ MM_SORT_KEYS: _MM_SORT_KEYS_TYPE = 8
76
+ NM_DECIMAL: _NM_DECIMAL_TYPE = 2
77
+ NM_NAN: _NM_NAN_TYPE = 1
78
+ NM_NATIVE: _NM_NATIVE_TYPE = 4
79
+ NM_NONE: _NM_NONE_TYPE = 0
80
+ PM_COMMENTS: _PM_COMMENTS_TYPE = 1
81
+ PM_NONE: _PM_NONE_TYPE = 0
82
+ PM_TRAILING_COMMAS: _PM_TRAILING_COMMAS_TYPE = 2
83
+ UM_CANONICAL: _UM_CANONICAL_TYPE = 1
84
+ UM_HEX: _UM_HEX_TYPE = 2
85
+ UM_NONE: _UM_NONE_TYPE = 0
86
+ WM_COMPACT: _WM_COMPACT_TYPE = 0
87
+ WM_PRETTY: _WM_PRETTY_TYPE = 1
88
+ WM_SINGLE_LINE_ARRAY: _WM_SINGLE_LINE_ARRAY_TYPE = 2
89
+
90
+
91
+ # Mode types
92
+ _NumberMode = int
93
+ _DatetimeMode = int
94
+ _UUIDMode = t.Literal[_UM_CANONICAL_TYPE, _UM_HEX_TYPE, _UM_NONE_TYPE]
95
+ _ParseMode = int
96
+ _WriteMode = t.Literal[_WM_COMPACT_TYPE, _WM_PRETTY_TYPE, _WM_SINGLE_LINE_ARRAY_TYPE]
97
+ _BytesMode = t.Literal[_BM_NONE_TYPE, _BM_UTF8_TYPE]
98
+ _IterableMode = t.Literal[_IM_ANY_ITERABLE_TYPE, _IM_ONLY_LISTS_TYPE]
99
+ _MappingMode = int
100
+
101
+
102
+ # Functions
103
+ def dumps(
104
+ obj: t.Any,
105
+ *,
106
+ skipkeys: t.Optional[bool] = False,
107
+ ensure_ascii: t.Optional[bool] = True,
108
+ write_mode: t.Optional[_WriteMode] = WM_COMPACT,
109
+ indent: t.Optional[t.Union[int, str]] = 4,
110
+ default: t.Optional[t.Callable[[t.Any], _JSONType]] = None,
111
+ sort_keys: t.Optional[bool] = False,
112
+ number_mode: t.Optional[_NumberMode] = NM_NAN,
113
+ datetime_mode: t.Optional[_DatetimeMode] = DM_NONE,
114
+ uuid_mode: t.Optional[_UUIDMode] = UM_NONE,
115
+ bytes_mode: t.Optional[_BytesMode] = BM_UTF8,
116
+ iterable_mode: t.Optional[_IterableMode] = IM_ANY_ITERABLE,
117
+ mapping_mode: t.Optional[_MappingMode] = MM_ANY_MAPPING,
118
+ allow_nan: t.Optional[bool] = True,
119
+ ) -> str: ...
120
+ def dump(
121
+ obj: t.Any,
122
+ stream: t.IO,
123
+ *,
124
+ skipkeys: t.Optional[bool] = False,
125
+ ensure_ascii: t.Optional[bool] = True,
126
+ write_mode: t.Optional[_WriteMode] = WM_COMPACT,
127
+ indent: t.Optional[t.Union[int, str]] = 4,
128
+ default: t.Optional[t.Callable[[t.Any], _JSONType]] = None,
129
+ sort_keys: t.Optional[bool] = False,
130
+ number_mode: t.Optional[_NumberMode] = NM_NAN,
131
+ datetime_mode: t.Optional[_DatetimeMode] = DM_NONE,
132
+ uuid_mode: t.Optional[_UUIDMode] = UM_NONE,
133
+ bytes_mode: t.Optional[_BytesMode] = BM_UTF8,
134
+ iterable_mode: t.Optional[_IterableMode] = IM_ANY_ITERABLE,
135
+ mapping_mode: t.Optional[_MappingMode] = MM_ANY_MAPPING,
136
+ chunk_size: t.Optional[int] = 65536,
137
+ allow_nan: t.Optional[bool] = True,
138
+ ) -> None: ...
139
+ def load(
140
+ stream: t.IO,
141
+ *,
142
+ object_hook: t.Optional[t.Callable[[t.Dict[str, t.Any]], t.Any]] = None,
143
+ number_mode: t.Optional[_NumberMode] = NM_NAN,
144
+ datetime_mode: t.Optional[_DatetimeMode] = DM_NONE,
145
+ uuid_mode: t.Optional[_UUIDMode] = UM_NONE,
146
+ parse_mode: t.Optional[_ParseMode] = PM_NONE,
147
+ chunk_size: t.Optional[int] = 65536,
148
+ allow_nan: t.Optional[bool] = True,
149
+ ) -> t.Any: ...
150
+ def loads(
151
+ string: str,
152
+ *,
153
+ object_hook: t.Optional[t.Callable[[t.Dict[str, t.Any]], t.Any]] = None,
154
+ number_mode: t.Optional[_NumberMode] = NM_NAN,
155
+ datetime_mode: t.Optional[_DatetimeMode] = DM_NONE,
156
+ uuid_mode: t.Optional[_UUIDMode] = UM_NONE,
157
+ parse_mode: t.Optional[_ParseMode] = PM_NONE,
158
+ allow_nan: t.Optional[bool] = True,
159
+ ) -> t.Any: ...
160
+
161
+
162
+ # Classes
163
+ class JSONDecodeError(Exception): ...
164
+ class ValidationError(Exception): ...
165
+
166
+
167
+ class Decoder:
168
+ datetime_mode: _DatetimeMode
169
+ number_mode: _NumberMode
170
+ parse_mode: _ParseMode
171
+ uuid_mode: _UUIDMode
172
+
173
+ def __init__(
174
+ self,
175
+ datetime_mode: t.Optional[_DatetimeMode] = DM_NONE,
176
+ number_mode: t.Optional[_NumberMode] = NM_NAN,
177
+ parse_mode: t.Optional[_ParseMode] = PM_NONE,
178
+ uuid_mode: t.Optional[_UUIDMode] = UM_NONE,
179
+ ) -> None: ...
180
+ def __call__(
181
+ self,
182
+ json: t.Union[str, bytes, t.IO],
183
+ chunk_size: t.Optional[int] = 65536,
184
+ ) -> t.Any: ...
185
+
186
+
187
+ class Encoder:
188
+ bytes_mode: _BytesMode
189
+ datetime_mode: _DatetimeMode
190
+ ensure_ascii: bool
191
+ indent_char: str
192
+ indent_count: int
193
+ iterable_mode: _IterableMode
194
+ mapping_mode: _MappingMode
195
+ number_mode: _NumberMode
196
+ skip_invalid_keys: bool
197
+ sort_keys: bool
198
+ uuid_mode: _UUIDMode
199
+ write_mode: _WriteMode
200
+
201
+ def __init__(
202
+ self,
203
+ skip_invalid_keys: t.Optional[bool] = False,
204
+ ensure_ascii: t.Optional[bool] = True,
205
+ write_mode: t.Optional[_WriteMode] = WM_COMPACT,
206
+ indent: t.Optional[t.Union[int, str]] = 4,
207
+ sort_keys: t.Optional[bool] = False,
208
+ number_mode: t.Optional[_NumberMode] = NM_NAN,
209
+ datetime_mode: t.Optional[_DatetimeMode] = DM_NONE,
210
+ uuid_mode: t.Optional[_UUIDMode] = UM_NONE,
211
+ bytes_mode: t.Optional[_BytesMode] = BM_UTF8,
212
+ iterable_mode: t.Optional[_IterableMode] = IM_ANY_ITERABLE,
213
+ mapping_mode: t.Optional[_MappingMode] = MM_ANY_MAPPING,
214
+ ) -> None: ...
215
+ def __call__(
216
+ self,
217
+ obj: t.Any,
218
+ stream: t.Optional[t.IO],
219
+ chunk_size: t.Optional[int] = 65536,
220
+ ) -> t.Optional[str]: ...
221
+
222
+
223
+ @t.final
224
+ class RawJSON:
225
+ value: RawJSON
226
+ def __init__(self, value: str) -> None: ...
227
+
228
+
229
+ @t.final
230
+ class Validator:
231
+ def __init__(self, json_schema: t.Union[str, bytes]) -> None: ...
232
+ def __call__(self, json: t.Union[str, bytes]) -> None: ...
@@ -0,0 +1 @@
1
+ 1.18
@@ -1,121 +0,0 @@
1
-
2
- Serialization
3
- ~~~~~~~~~~~~~
4
-
5
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
6
- | serialize | ``dumps()``\ [1]_ | ``Encoder()``\ [2]_ | ``dumps(n)``\ [3]_ | ``Encoder(n)``\ [4]_ | simdjson\ [5]_ | orjson\ [6]_ | ujson\ [7]_ | simplejson\ [8]_ | stdlib\ [9]_ |
7
- +=======================+======================+======================+======================+======================+======================+======================+======================+======================+======================+
8
- | 100 arrays dict | 1.00 | 1.01 | 0.72 | 0.73 | 3.00 | **0.26** | 1.23 | 5.73 | 2.89 |
9
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
10
- | 100 dicts array | 1.00 | 1.00 | 0.74 | 0.72 | 2.83 | **0.31** | 1.14 | 6.27 | 2.79 |
11
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
12
- | 256 Trues array | 1.00 | 1.01 | 1.14 | 1.01 | 2.41 | **0.40** | 1.63 | 2.42 | 2.36 |
13
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
14
- | 256 ascii array | 1.00 | 1.04 | 1.03 | 1.07 | 2.12 | **0.16** | 1.02 | 2.49 | 2.04 |
15
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
16
- | 256 doubles array | 1.00 | 0.95 | 1.01 | 1.00 | 1.03 | **0.05** | 0.22 | 0.92 | 0.98 |
17
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
18
- | 256 unicode array | 1.00 | 0.89 | 0.89 | 0.93 | 0.65 | **0.02** | 0.36 | 0.64 | 0.63 |
19
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
20
- | apache.json | 1.00 | 1.10 | 1.04 | 1.09 | 2.92 | **0.34** | 1.58 | 4.66 | 2.93 |
21
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
22
- | canada.json | 1.00 | 1.00 | 0.98 | 0.98 | 1.05 | **0.06** | 0.27 | 1.51 | 1.06 |
23
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
24
- | complex object | 1.00 | 1.00 | 0.89 | 0.88 | 1.78 | **0.19** | 0.78 | 2.61 | 1.76 |
25
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
26
- | composite object | 1.00 | 1.04 | 0.70 | 0.66 | 2.16 | **0.30** | 1.13 | 2.74 | 2.15 |
27
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
28
- | ctm.json | 1.00 | 0.99 | 0.73 | 0.72 | 2.31 | **0.24** | 1.11 | 6.17 | 2.53 |
29
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
30
- | github.json | 1.00 | 1.00 | 0.94 | 0.94 | 2.29 | **0.21** | 1.19 | 3.07 | 2.27 |
31
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
32
- | instruments.json | 1.00 | 1.00 | 0.66 | 0.66 | 2.16 | **0.20** | 1.12 | 2.99 | 2.16 |
33
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
34
- | mesh.json | 1.00 | 1.01 | 0.91 | 0.91 | 1.00 | **0.09** | 0.30 | 1.17 | 1.00 |
35
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
36
- | truenull.json | 1.00 | 1.00 | 1.00 | 1.01 | 1.94 | **0.26** | 1.59 | 1.92 | 1.93 |
37
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
38
- | tweet.json | 1.00 | 1.00 | 0.96 | 0.92 | 2.43 | **0.25** | 1.32 | 3.55 | 2.36 |
39
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
40
- | twitter.json | 1.00 | 1.00 | 0.93 | 0.93 | 1.91 | **0.19** | 1.20 | 2.40 | 1.93 |
41
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
42
- | overall | 1.00 | 1.01 | 0.81 | 0.82 | 2.26 | **0.18** | 0.88 | 4.12 | 2.19 |
43
- +-----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+----------------------+
44
-
45
- Deserialization
46
- ~~~~~~~~~~~~~~~
47
-
48
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
49
- | deserialize | ``loads()``\ [10]_ | ``Decoder()``\ [11]_ | ``loads(n)``\ [12]_ | ``Decoder(n)``\ [13]_ | simdjson | orjson | ujson | simplejson | stdlib |
50
- +=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+
51
- | 100 arrays dict | 1.00 | 1.07 | 0.89 | 0.97 | 0.95 | **0.65** | 0.92 | 1.22 | 1.05 |
52
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
53
- | 100 dicts array | 1.00 | 0.98 | 0.86 | 0.85 | 0.62 | **0.39** | 0.68 | 1.33 | 1.04 |
54
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
55
- | 256 Trues array | 1.00 | 1.06 | 1.10 | 1.11 | 1.06 | **0.53** | 0.95 | 1.49 | 1.55 |
56
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
57
- | 256 ascii array | 1.00 | 1.01 | 1.02 | 1.00 | 0.50 | **0.39** | 1.18 | 1.01 | 0.94 |
58
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
59
- | 256 doubles array | 1.00 | 1.00 | 0.25 | 0.25 | 0.19 | **0.17** | 0.57 | 1.06 | 1.05 |
60
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
61
- | 256 unicode array | 1.00 | 0.97 | 0.95 | 0.95 | 0.78 | **0.34** | 0.65 | 3.83 | 1.27 |
62
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
63
- | apache.json | 1.00 | 1.01 | 1.01 | 1.01 | 0.67 | **0.48** | 0.81 | 0.92 | 0.76 |
64
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
65
- | canada.json | 1.00 | 0.99 | 0.36 | 0.36 | 0.33 | **0.30** | 0.55 | 0.99 | 0.97 |
66
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
67
- | complex object | 1.00 | 1.06 | 0.89 | 0.89 | 0.63 | **0.35** | 0.70 | 1.23 | 1.07 |
68
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
69
- | composite object | 1.00 | 1.00 | 0.83 | 0.85 | 0.61 | **0.42** | 0.62 | 1.50 | 1.10 |
70
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
71
- | ctm.json | 1.00 | 1.03 | 0.93 | 0.95 | 0.84 | **0.61** | 1.07 | 1.12 | 1.01 |
72
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
73
- | github.json | 1.00 | 1.00 | 0.99 | 0.98 | 0.66 | **0.39** | 0.80 | 0.95 | 0.85 |
74
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
75
- | instruments.json | 1.00 | 1.00 | 0.85 | 0.84 | 0.61 | **0.35** | 0.67 | 1.20 | 0.97 |
76
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
77
- | mesh.json | 1.00 | 1.01 | 0.50 | 0.50 | 0.42 | **0.36** | 0.66 | 1.51 | 1.11 |
78
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
79
- | truenull.json | 1.00 | 1.09 | 1.16 | 1.07 | 0.92 | **0.70** | 0.92 | 1.31 | 1.41 |
80
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
81
- | tweet.json | 1.00 | 0.99 | 0.97 | 0.96 | 0.63 | **0.36** | 0.85 | 1.17 | 1.01 |
82
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
83
- | twitter.json | 1.00 | 0.99 | 0.94 | 0.94 | 0.64 | **0.37** | 0.88 | 0.97 | 0.83 |
84
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
85
- | overall | 1.00 | 1.06 | 0.84 | 0.91 | 0.89 | **0.62** | 0.89 | 1.20 | 1.04 |
86
- +-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
87
-
88
- ASCII vs UTF-8 Serialization
89
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
90
-
91
- +-------------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
92
- | serialize | ``rj ascii``\ [15]_ | ``rj utf8``\ [16]_ | ``uj ascii``\ [17]_ | ``uj utf8``\ [18]_ | ``sj ascii``\ [19]_ | ``sj utf8``\ [20]_ | ``json ascii``\ [21]_ | ``json utf8``\ [22]_ |
93
- +=========================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+=======================+
94
- | Long ASCII string | 1.00 | 0.78 | 0.49 | **0.48** | 1.91 | 2.36 | 1.54 | 1.41 |
95
- +-------------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
96
- | Long Unicode string | 1.00 | 0.47 | 0.27 | 0.35 | 0.60 | 0.50 | 0.54 | **0.27** |
97
- +-------------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
98
- | overall | 1.00 | 0.52 | **0.31** | 0.37 | 0.81 | 0.80 | 0.70 | 0.45 |
99
- +-------------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+-----------------------+
100
-
101
- .. [1] ``rapidjson.dumps()``
102
- .. [2] ``rapidjson.Encoder()``
103
- .. [3] ``rapidjson.dumps(number_mode=NM_NATIVE)``
104
- .. [4] ``rapidjson.Encoder(number_mode=NM_NATIVE)``
105
- .. [5] `simdjson 6.0.2 <https://pypi.org/project/pysimdjson/6.0.2/>`__
106
- .. [6] `orjson 3.10.1 <https://pypi.org/project/orjson/3.10.1/>`__
107
- .. [7] `ujson 5.9.0 <https://pypi.org/project/ujson/5.9.0/>`__
108
- .. [8] `simplejson 3.19.2 <https://pypi.org/pypi/simplejson/3.19.2>`__
109
- .. [9] Python 3.11.8 standard library ``json``
110
- .. [10] ``rapidjson.loads()``
111
- .. [11] ``rapidjson.Decoder()``
112
- .. [12] ``rapidjson.loads(number_mode=NM_NATIVE)``
113
- .. [13] ``rapidjson.Decoder(number_mode=NM_NATIVE)``
114
- .. [15] ``rapidjson.dumps(ensure_ascii=True)``
115
- .. [16] ``rapidjson.dumps(ensure_ascii=False)``
116
- .. [17] ``ujson.dumps(ensure_ascii=True)``
117
- .. [18] ``ujson.dumps(ensure_ascii=False)``
118
- .. [19] ``simplejson.dumps(ensure_ascii=True)``
119
- .. [20] ``simplejson.dumps(ensure_ascii=False)``
120
- .. [21] ``stdlib json.dumps(ensure_ascii=True)``
121
- .. [22] ``stdlib json.dumps(ensure_ascii=False)``
@@ -1 +0,0 @@
1
- 1.17
File without changes