| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714 |
- Metadata-Version: 2.4
- Name: json5
- Version: 0.14.0
- Summary: A Python implementation of the JSON5 data format.
- Author-email: Dirk Pranke <dpranke@chromium.org>
- License: Files: Everything except for the benchmarks/*.json files.
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright {yyyy} {name of copyright owner}
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
- ---
-
- File: benchmarks/64KB-min.json
-
- MIT License
-
- Copyright (c) Microsoft Corporation.
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE
-
- ---
-
- File: benchmarks/bitly-usa-gov.json
-
- The MIT License (MIT)
-
- Copyright (c) 2017 Wes McKinney
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-
- ---
-
- File: benchmarks/twitter.json
-
- The MIT License (MIT)
-
- Copyright (c) 2014 Milo Yip
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-
- Project-URL: Changelog, https://github.com/dpranke/pyjson5/blob/master/README.md
- Project-URL: Issues, https://github.com/dpranke/pyjson5/issues
- Project-URL: Repository, https://github.com/dpranke/pyjson5
- Keywords: json5
- Classifier: Development Status :: 5 - Production/Stable
- Classifier: Intended Audience :: Developers
- Classifier: License :: OSI Approved :: Apache Software License
- Classifier: Programming Language :: Python :: 3 :: Only
- Classifier: Programming Language :: Python :: 3.8
- Classifier: Programming Language :: Python :: 3.9
- Classifier: Programming Language :: Python :: 3.10
- Classifier: Programming Language :: Python :: 3.11
- Classifier: Programming Language :: Python :: 3.12
- Classifier: Programming Language :: Python :: 3.13
- Classifier: Programming Language :: Python :: 3.14
- Requires-Python: >=3.8.0
- Description-Content-Type: text/markdown
- License-File: LICENSE
- Dynamic: license-file
- # pyjson5
- A Python implementation of the JSON5 data format.
- [JSON5](https://json5.org) extends the
- [JSON](http://www.json.org) data interchange format to make it
- slightly more usable as a configuration language:
- * JavaScript-style comments (both single and multi-line) are legal.
- * Object keys may be unquoted if they are legal ECMAScript identifiers
- * Objects and arrays may end with trailing commas.
- * Strings can be single-quoted, and multi-line string literals are allowed.
- There are a few other more minor extensions to JSON; see the above page for
- the full details.
- This project implements a reader and writer implementation for Python;
- where possible, it mirrors the
- [standard Python JSON API](https://docs.python.org/library/json.html)
- package for ease of use.
- There is one notable difference from the JSON api: the `load()` and
- `loads()` methods support optionally checking for (and rejecting) duplicate
- object keys; pass `allow_duplicate_keys=False` to do so (duplicates are
- allowed by default).
- This is an early release. It has been reasonably well-tested, but it is
- **SLOW**. It can be 1000-6000x slower than the C-optimized JSON module,
- and is 200x slower (or more) than the pure Python JSON module.
- **Please Note:** This library only handles JSON5 documents, it does not
- allow you to read arbitrary JavaScript. For example, bare integers can
- be legal object keys in JavaScript, but they aren't in JSON5.
- ## Known issues
- * Did I mention that it is **SLOW**?
- * The implementation follows Python3's `json` implementation where
- possible. This means that the `encoding` method to `dump()` is
- ignored, and unicode strings are always returned.
- * The `cls` keyword argument that `json.load()`/`json.loads()` accepts
- to specify a custom subclass of ``JSONDecoder`` is not and will not be
- supported, because this implementation uses a completely different
- approach to parsing strings and doesn't have anything like the
- `JSONDecoder` class.
- * The `cls` keyword argument that `json.dump()`/`json.dumps()` accepts
- is also not supported, for consistency with `json5.load()`. The `default`
- keyword *is* supported, though, and might be able to serve as a
- workaround.
- ## Contributing
- `json5` have no runtime dependencies and it is supported on Python version 3.8
- or later. However, in order to develop and build the package you need a
- bunch of extra tools and the latest versions of those tools may require 3.9
- or later. You can install the extra environment on 3.8 (and get older versions
- of the tools), but they may not run completely cleanly.
- #### On Mac
- The easiest thing to do is to install [`uv`](https://docs.astral.sh/uv) and
- use `uv` and the `//run` script to develop things. See `./run --help` for
- the various commands that are supported. `glop` is the parser generator
- tool used to generate a parser from the grammar in `json5/json5.g`.
- ```
- $ brew install uv
- $ git clone https://github.com/dpranke/pyjson5
- $ git clone https://github.com/dpranke/glop
- $ cd pyjson5
- $ source $(./run devenv) # To activate a venv w/ all the needed dev tools.
- ```
- #### On other platforms
- Install `uv` via whatever mechanism is appropriate.
- ### Create the venv
- ```
- $ ./run devenv
- ```
- (This calls `uv sync --extra dev`.)
- ### Running the tests
- ```
- $ ./run tests
- ```
- ### Updating the packages
- ```
- # Update the version in json5/version.py to $VERSION, which should be of
- # the form X.Y.Z where X, Y, and Z are numbers.
- $ ./run regen
- $ ./run presubmit
- $ git commit -a -m "Bump the version to $VERSION"
- $ git tag "v$VERSION"
- $ ./run build
- $ ./run publish --prod
- $ git push origin
- $ git push --tags origin
- ```
- (Assuming you have upload privileges to PyPI and the GitHub repo, of course.)
- ## Version History / Release Notes
- * v0.14.0 (2026-03-27)
- This is really just a dependency bump release.
- * No (non-test) code changes.
- * Upgraded to latest packages for dev dependencies
- * Silenced a couple of warnings from the latest pylint where it
- can't deal with both unreachable code and a bad return value.
- * v0.13.0 (2026-01-01)
- * No code changes.
- * Add Python 3.14 to supported version, project config, dependencies
- * Update dependencies to latest stuff < 2025-12-01
- * This relaxes the versions specified in pyproject.toml to just
- use 'newer than' rather than exact matches.
- * Sets 'uv.tool.exclude-newer' in pyproject.toml to tell uv not
- to look at packages published within the past 30 days; this will
- hopefully help prevent dependencies on compromised projects.
- * Switch to using dependency-groups for 'dev' group.
- * v0.12.1 (2025-08-12)
- * Fix [#94](https://github.com/dpranke/pyjson5/issues/94), where objects
- returned from a custom encoder were not being indented properly.
- * v0.12.0 (2025-04-03)
- * Roll back pyproject.toml change for licensing so that we can still
- build the package on 3.8.
- * Upgrade devenv package dependencies to latest versions; they now need
- Python 3.9 or newer, though json5 itself still supports 3.8.
- * v0.11.0 (2025-04-01)
- * Add a couple examples to the documentation and run doctest over
- them.
- * Fix a typing issue in dump and dumps with the `cls` argument; turns
- out mypy was right and I was wrong and I didn't realize it :).
- * Introduce a new `parse` method that can be used to iterate through
- a string, extracting multiple values.
- * Add a new `consume_trailing` parameter to `load`/`loads`/`parse`
- that specifies whether to keep parsing after a valid object is
- reached. By default, this is True and the string must only contain
- trailing whitespace. If set to False, parsing will stop when a
- valid object is reached.
- * Add a new `start` parameter to `load`/`loads`/`parse` to specify
- the zero-based offset to start parsing the string or file from.
- * [GitHub issue #60](https://github.com/dpranke/pyjson5/issues/60).
- Fix a bug where we were attempting to allow '--4' as a valid number.
- * v0.10.0 (2024-11-25)
- * [GitHub issue #57](https://github.com/dpranke/pyjson5/issues/57).
- Added a `JSON5Encoder` class that can be overridden to do custom
- encoding of values. This class is vaguely similar to the `JSONEncoder`
- class in the standard `json` library, except that it has an
- `encode()` method that can be overridden to customize *any*
- value, not just ones the standard encoder doesn't know how to handle.
- It does also support a `default()` method that can be used to
- encode things not normally encodable, like the JSONEncoder class.
- It does not support an `iterencode` method. One could probably
- be added in the future, although exactly how that would work and
- interact with `encode` is a little unclear.
- * Restructured the code to use the new encoder class; doing so actually
- allowed me to delete a bunch of tediously duplicative code.
- * Added a new `quote_style` argument to `dump()`/`dumps()` to control
- how strings are encoded by default. For compatibility with older
- versions of the json5 library and the standard json library, it
- uses `QuoteStyle.ALWAYS_DOUBLE` which encodes all strings with double
- quotes all the time. You can also configure it to use single quotes
- all the time (`ALWAYS_SINGLE`), and to switch between single and double
- when doing so eliminates a need to escape quotes (`PREFER_SINGLE` and
- `PREFER_DOUBLE`). This also adds a `--quote-style` argument to
- `python -m json5`.
- * This release has a fair number of changes, but is intended to be
- completely backwards-compatible. Code without changes should run exactly
- as it did before.
- * v0.9.28 (2024-11-11)
- * Fix GitHub CI to install `uv` so `./run tests` works properly.
- * Mark Python3.13 as supported in package metadata.
- * Update dev package dependencies (note that the latest versions
- of coverage and pylint no longer work w/ Python3.8)
- * v0.9.27 (2024-11-10)
- * Fix typo in //README.md
- * v0.9.26 (2024-11-10)
- * [GitHub issue #82](https://github.com/dpranke/pyjson5/issues/82)
- Add support for the `strict` parameter to `load()`/`loads()`.
- * Significantly rework the infra and the `run` script to be
- contemporary.
- * v0.9.25 (2024-04-12)
- * [GitHub issue #81](https://github.com/dpranke/pyjson5/issues/81)
- Explicitly specify the directory to use for the package in
- pyproject.toml.
- * v0.9.24 (2024-03-16)
- * Update GitHub workflow config to remove unnecessary steps and
- run on pull requests as well as commits.
- * Added note about removing `hypothesize` in v0.9.23.
- * No code changes.
- * v0.9.23 (2024-03-16)
- * Lots of cleanup:
- * Removed old code needed for Python2 compatibility.
- * Removed tests using `hypothesize`. This ran model-based checks
- and didn't really add anything useful in terms of coverage to
- the test suite, and it introduced dependencies and slowed down
- the tests significantly. It was a good experiment but I think
- we're better off without it.
- * Got everything linting cleanly with pylint 3.1 and `ruff check`
- using ruff 0.3.3 (Note that commit message in 00d73a3 says pylint
- 3.11, which is a typo).
- * Code reformatted with `ruff format`
- * Added missing tests to bring coverage up to 100%.
- * Lots of minor code changes as the result of linting and coverage
- testing, but no intentional functional differences.
- * v0.9.22 (2024-03-06)
- * Attempt to fix the GitHub CI configuration now that setup.py
- is gone. Also, test on 3.12 instead of 3.11.
- * No code changes.
- * v0.9.21 (2024-03-06)
- * Moved the benchmarks/*.json data files' license information
- to //LICENSE to (hopefully) make the Google linter happy.
- * v0.9.20 (2024-03-03)
- * Added `json5.__version__` in addition to `json5.VERSION`.
- * More packaging modernization (no more setup.{cfg,py} files).
- * Mark Python3.12 as supported in project.classifiers.
- * Updated the `//run` script to use python3.
- * v0.9.19 (2024-03-03)
- * Replaced the benchmarking data files that came from chromium.org with
- three files obtained from other datasets on GitHub. Since this repo
- is vendored into the chromium/src repo it was occasionally confusing
- people who thought the data was actually used for non-benchmarking
- purposes and thus updating it for whatever reason.
- * No code changes.
- * v0.9.18 (2024-02-29)
- * Add typing information to the module. This is kind of a big change,
- but there should be no functional differences.
- * v0.9.17 (2024-02-19)
- * Move from `setup.py` to `pyproject.toml`.
- * No code changes (other than the version increasing).
- * v0.9.16 (2024-02-19)
- * Drop Python2 from `setup.py`
- * Add minimal packaging instructions to `//README.md`.
- * v0.9.15 (2024-02-19)
- * Merge in [Pull request #66](https://github.com/dpranke/pyjson5/pull/66)
- to include the tests and sample file in a source distribution.
- * v0.9.14 (2023-05-14)
- * [GitHub issue #63](https://github.com/dpranke/pyjson5/issues/63)
- Handle `+Infinity` as well as `-Infinity` and `Infinity`.
- * v0.9.13 (2023-03-16)
- * [GitHub PR #64](https://github.com/dpranke/pyjson5/pull/64)
- Remove a field from one of the JSON benchmark files to
- reduce confusion in Chromium.
- * No code changes.
- * v0.9.12 (2023-01-02)
- * Fix GitHub Actions config file to no longer test against
- Python 3.6 or 3.7. For now we will only test against an
- "oldest" release (3.8 in this case) and a "current"
- release (3.11 in this case).
- * v0.9.11 (2023-01-02)
- * [GitHub issue #60](https://github.com/dpranke/pyjson5/issues/60)
- Fixed minor Python2 compatibility issue by referring to
- `float("inf")` instead of `math.inf`.
- * v0.9.10 (2022-08-18)
- * [GitHub issue #58](https://github.com/dpranke/pyjson5/issues/58)
- Updated the //README.md to be clear that parsing arbitrary JS
- code may not work.
- * Otherwise, no code changes.
- * v0.9.9 (2022-08-01)
- * [GitHub issue #57](https://github.com/dpranke/pyjson5/issues/57)
- Fixed serialization for objects that subclass `int` or `float`:
- Previously we would use the objects __str__ implementation, but
- that might result in an illegal JSON5 value if the object had
- customized __str__ to return something illegal. Instead,
- we follow the lead of the `JSON` module and call `int.__repr__`
- or `float.__repr__` directly.
- * While I was at it, I added tests for dumps(-inf) and dumps(nan)
- when those were supposed to be disallowed by `allow_nan=False`.
- * v0.9.8 (2022-05-08)
- * [GitHub issue #47](https://github.com/dpranke/pyjson5/issues/47)
- Fixed error reporting in some cases due to how parsing was handling
- nested rules in the grammar - previously the reported location for
- the error could be far away from the point where it actually happened.
- * v0.9.7 (2022-05-06)
- * [GitHub issue #52](https://github.com/dpranke/pyjson5/issues/52)
- Fixed behavior of `default` fn in `dump` and `dumps`. Previously
- we didn't require the function to return a string, and so we could
- end up returning something that wasn't actually valid. This change
- now matches the behavior in the `json` module. *Note: This is a
- potentially breaking change.*
- * v0.9.6 (2021-06-21)
- * Bump development status classifier to 5 - Production/Stable, which
- the library feels like it is at this point. If I do end up significantly
- reworking things to speed it up and/or to add round-trip editing,
- that'll likely be a 2.0. If this version has no reported issues,
- I'll likely promote it to 1.0.
- * Also bump the tested Python versions to 2.7, 3.8 and 3.9, though
- earlier Python3 versions will likely continue to work as well.
- * [GitHub issue #46](https://github.com/dpranke/pyjson5/issues/36)
- Fix incorrect serialization of custom subtypes
- * Make it possible to run the tests if `hypothesis` isn't installed.
- * v0.9.5 (2020-05-26)
- * Miscellaneous non-source cleanups in the repo, including setting
- up GitHub Actions for a CI system. No changes to the library from
- v0.9.4, other than updating the version.
- * v0.9.4 (2020-03-26)
- * [GitHub pull #38](https://github.com/dpranke/pyjson5/pull/38)
- Fix from fredrik@fornwall.net for dumps() crashing when passed
- an empty string as a key in an object.
- * v0.9.3 (2020-03-17)
- * [GitHub pull #35](https://github.com/dpranke/pyjson5/pull/35)
- Fix from pastelmind@ for dump() not passing the right args to dumps().
- * Fix from p.skouzos@novafutur.com to remove the tests directory from
- the setup call, making the package a bit smaller.
- * v0.9.2 (2020-03-02)
- * [GitHub pull #34](https://github.com/dpranke/pyjson5/pull/34)
- Fix from roosephu@ for a badly formatted nested list.
- * v0.9.1 (2020-02-09)
- * [GitHub issue #33](https://github.com/dpranke/pyjson5/issues/33):
- Fix stray trailing comma when dumping an object with an invalid key.
- * v0.9.0 (2020-01-30)
- * [GitHub issue #29](https://github.com/dpranke/pyjson5/issues/29):
- Fix an issue where objects keys that started with a reserved
- word were incorrectly quoted.
- * [GitHub issue #30](https://github.com/dpranke/pyjson5/issues/30):
- Fix an issue where dumps() incorrectly thought a data structure
- was cyclic in some cases.
- * [GitHub issue #32](https://github.com/dpranke/pyjson5/issues/32):
- Allow for non-string keys in dicts passed to ``dump()``/``dumps()``.
- Add an ``allow_duplicate_keys=False`` to prevent possible
- ill-formed JSON that might result.
- * v0.8.5 (2019-07-04)
- * [GitHub issue #25](https://github.com/dpranke/pyjson5/issues/25):
- Add LICENSE and README.md to the dist.
- * [GitHub issue #26](https://github.com/dpranke/pyjson5/issues/26):
- Fix printing of empty arrays and objects with indentation, fix
- misreporting of the position on parse failures in some cases.
- * v0.8.4 (2019-06-11)
- * Updated the version history, too.
- * v0.8.3 (2019-06-11)
- * Tweaked the README, bumped the version, forgot to update the version
- history :).
- * v0.8.2 (2019-06-11)
- * Actually bump the version properly, to 0.8.2.
- * v0.8.1 (2019-06-11)
- * Fix bug in setup.py that messed up the description. Unfortunately,
- I forgot to bump the version for this, so this also identifies as 0.8.0.
- * v0.8.0 (2019-06-11)
- * Add `allow_duplicate_keys=True` as a default argument to
- `json5.load()`/`json5.loads()`. If you set the key to `False`, duplicate
- keys in a single dict will be rejected. The default is set to `True`
- for compatibility with `json.load()`, earlier versions of json5, and
- because it's simply not clear if people would want duplicate checking
- enabled by default.
- * v0.7 (2019-03-31)
- * Changes dump()/dumps() to not quote object keys by default if they are
- legal identifiers. Passing `quote_keys=True` will turn that off
- and always quote object keys.
- * Changes dump()/dumps() to insert trailing commas after the last item
- in an array or an object if the object is printed across multiple lines
- (i.e., if `indent` is not None). Passing `trailing_commas=False` will
- turn that off.
- * The `json5.tool` command line tool now supports the `--indent`,
- `--[no-]quote-keys`, and `--[no-]trailing-commas` flags to allow
- for more control over the output, in addition to the existing
- `--as-json` flag.
- * The `json5.tool` command line tool no longer supports reading from
- multiple files, you can now only read from a single file or
- from standard input.
- * The implementation no longer relies on the standard `json` module
- for anything. The output should still match the json module (except
- as noted above) and discrepancies should be reported as bugs.
- * v0.6.2 (2019-03-08)
- * Fix [GitHub issue #23](https://github.com/dpranke/pyjson5/issues/23) and
- pass through unrecognized escape sequences.
- * v0.6.1 (2018-05-22)
- * Cleaned up a couple minor nits in the package.
- * v0.6.0 (2017-11-28)
- * First implementation that attempted to implement 100% of the spec.
- * v0.5.0 (2017-09-04)
- * First implementation that supported the full set of kwargs that
- the `json` module supports.
|