jsonschema
Advanced tools
| [console_scripts] | ||
| jsonschema = jsonschema.cli:main |
| Copyright (c) 2013 Julian Berman | ||
| 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. |
| Metadata-Version: 2.3 | ||
| Name: jsonschema | ||
| Version: 4.23.0 | ||
| Summary: An implementation of JSON Schema validation for Python | ||
| Project-URL: Homepage, https://github.com/python-jsonschema/jsonschema | ||
| Project-URL: Documentation, https://python-jsonschema.readthedocs.io/ | ||
| Project-URL: Issues, https://github.com/python-jsonschema/jsonschema/issues/ | ||
| Project-URL: Funding, https://github.com/sponsors/Julian | ||
| Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link | ||
| Project-URL: Changelog, https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst | ||
| Project-URL: Source, https://github.com/python-jsonschema/jsonschema | ||
| Author-email: Julian Berman <Julian+jsonschema@GrayVines.com> | ||
| License: MIT | ||
| License-File: COPYING | ||
| Keywords: data validation,json,json schema,jsonschema,validation | ||
| Classifier: Development Status :: 5 - Production/Stable | ||
| Classifier: Intended Audience :: Developers | ||
| Classifier: License :: OSI Approved :: MIT License | ||
| Classifier: Operating System :: OS Independent | ||
| Classifier: Programming Language :: Python | ||
| 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 :: Implementation :: CPython | ||
| Classifier: Programming Language :: Python :: Implementation :: PyPy | ||
| Classifier: Topic :: File Formats :: JSON | ||
| Classifier: Topic :: File Formats :: JSON :: JSON Schema | ||
| Requires-Python: >=3.8 | ||
| Requires-Dist: attrs>=22.2.0 | ||
| Requires-Dist: importlib-resources>=1.4.0; python_version < '3.9' | ||
| Requires-Dist: jsonschema-specifications>=2023.03.6 | ||
| Requires-Dist: pkgutil-resolve-name>=1.3.10; python_version < '3.9' | ||
| Requires-Dist: referencing>=0.28.4 | ||
| Requires-Dist: rpds-py>=0.7.1 | ||
| Provides-Extra: format | ||
| Requires-Dist: fqdn; extra == 'format' | ||
| Requires-Dist: idna; extra == 'format' | ||
| Requires-Dist: isoduration; extra == 'format' | ||
| Requires-Dist: jsonpointer>1.13; extra == 'format' | ||
| Requires-Dist: rfc3339-validator; extra == 'format' | ||
| Requires-Dist: rfc3987; extra == 'format' | ||
| Requires-Dist: uri-template; extra == 'format' | ||
| Requires-Dist: webcolors>=1.11; extra == 'format' | ||
| Provides-Extra: format-nongpl | ||
| Requires-Dist: fqdn; extra == 'format-nongpl' | ||
| Requires-Dist: idna; extra == 'format-nongpl' | ||
| Requires-Dist: isoduration; extra == 'format-nongpl' | ||
| Requires-Dist: jsonpointer>1.13; extra == 'format-nongpl' | ||
| Requires-Dist: rfc3339-validator; extra == 'format-nongpl' | ||
| Requires-Dist: rfc3986-validator>0.1.0; extra == 'format-nongpl' | ||
| Requires-Dist: uri-template; extra == 'format-nongpl' | ||
| Requires-Dist: webcolors>=24.6.0; extra == 'format-nongpl' | ||
| Description-Content-Type: text/x-rst | ||
| ========== | ||
| jsonschema | ||
| ========== | ||
| |PyPI| |Pythons| |CI| |ReadTheDocs| |Precommit| |Zenodo| | ||
| .. |PyPI| image:: https://img.shields.io/pypi/v/jsonschema.svg | ||
| :alt: PyPI version | ||
| :target: https://pypi.org/project/jsonschema/ | ||
| .. |Pythons| image:: https://img.shields.io/pypi/pyversions/jsonschema.svg | ||
| :alt: Supported Python versions | ||
| :target: https://pypi.org/project/jsonschema/ | ||
| .. |CI| image:: https://github.com/python-jsonschema/jsonschema/workflows/CI/badge.svg | ||
| :alt: Build status | ||
| :target: https://github.com/python-jsonschema/jsonschema/actions?query=workflow%3ACI | ||
| .. |ReadTheDocs| image:: https://readthedocs.org/projects/python-jsonschema/badge/?version=stable&style=flat | ||
| :alt: ReadTheDocs status | ||
| :target: https://python-jsonschema.readthedocs.io/en/stable/ | ||
| .. |Precommit| image:: https://results.pre-commit.ci/badge/github/python-jsonschema/jsonschema/main.svg | ||
| :alt: pre-commit.ci status | ||
| :target: https://results.pre-commit.ci/latest/github/python-jsonschema/jsonschema/main | ||
| .. |Zenodo| image:: https://zenodo.org/badge/3072629.svg | ||
| :alt: Zenodo DOI | ||
| :target: https://zenodo.org/badge/latestdoi/3072629 | ||
| ``jsonschema`` is an implementation of the `JSON Schema <https://json-schema.org>`_ specification for Python. | ||
| .. code:: python | ||
| >>> from jsonschema import validate | ||
| >>> # A sample schema, like what we'd get from json.load() | ||
| >>> schema = { | ||
| ... "type" : "object", | ||
| ... "properties" : { | ||
| ... "price" : {"type" : "number"}, | ||
| ... "name" : {"type" : "string"}, | ||
| ... }, | ||
| ... } | ||
| >>> # If no exception is raised by validate(), the instance is valid. | ||
| >>> validate(instance={"name" : "Eggs", "price" : 34.99}, schema=schema) | ||
| >>> validate( | ||
| ... instance={"name" : "Eggs", "price" : "Invalid"}, schema=schema, | ||
| ... ) # doctest: +IGNORE_EXCEPTION_DETAIL | ||
| Traceback (most recent call last): | ||
| ... | ||
| ValidationError: 'Invalid' is not of type 'number' | ||
| It can also be used from the command line by installing `check-jsonschema <https://github.com/python-jsonschema/check-jsonschema>`_. | ||
| Features | ||
| -------- | ||
| * Full support for `Draft 2020-12 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft202012Validator>`_, `Draft 2019-09 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft201909Validator>`_, `Draft 7 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft7Validator>`_, `Draft 6 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft6Validator>`_, `Draft 4 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft4Validator>`_ and `Draft 3 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft3Validator>`_ | ||
| * `Lazy validation <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/protocols/#jsonschema.protocols.Validator.iter_errors>`_ that can iteratively report *all* validation errors. | ||
| * `Programmatic querying <https://python-jsonschema.readthedocs.io/en/latest/errors/>`_ of which properties or items failed validation. | ||
| Installation | ||
| ------------ | ||
| ``jsonschema`` is available on `PyPI <https://pypi.org/project/jsonschema/>`_. You can install using `pip <https://pip.pypa.io/en/stable/>`_: | ||
| .. code:: bash | ||
| $ pip install jsonschema | ||
| Extras | ||
| ====== | ||
| Two extras are available when installing the package, both currently related to ``format`` validation: | ||
| * ``format`` | ||
| * ``format-nongpl`` | ||
| They can be used when installing in order to include additional dependencies, e.g.: | ||
| .. code:: bash | ||
| $ pip install jsonschema'[format]' | ||
| Be aware that the mere presence of these dependencies – or even the specification of ``format`` checks in a schema – do *not* activate format checks (as per the specification). | ||
| Please read the `format validation documentation <https://python-jsonschema.readthedocs.io/en/latest/validate/#validating-formats>`_ for further details. | ||
| About | ||
| ----- | ||
| I'm Julian Berman. | ||
| ``jsonschema`` is on `GitHub <https://github.com/python-jsonschema/jsonschema>`_. | ||
| Get in touch, via GitHub or otherwise, if you've got something to contribute, it'd be most welcome! | ||
| You can also generally find me on Libera (nick: ``Julian``) in various channels, including ``#python``. | ||
| If you feel overwhelmingly grateful, you can also `sponsor me <https://github.com/sponsors/Julian/>`_. | ||
| And for companies who appreciate ``jsonschema`` and its continued support and growth, ``jsonschema`` is also now supportable via `TideLift <https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=readme>`_. | ||
| Release Information | ||
| ------------------- | ||
| v4.23.0 | ||
| ======= | ||
| * Do not reorder dictionaries (schemas, instances) that are printed as part of validation errors. | ||
| * Declare support for Py3.13 |
| jsonschema/__init__.py,sha256=LkPwscySlJ9lTOp7ZB1M7jQ8mbG7-bYG41iBwbZ-o9s,3941 | ||
| jsonschema/__main__.py,sha256=iLsZf2upUB3ilBKTlMnyK-HHt2Cnnfkwwxi_c6gLvSA,115 | ||
| jsonschema/_format.py,sha256=F_MA52IkrhOIxDqD8x-01bH37mG5nh0kyNrWUSLtWb8,14591 | ||
| jsonschema/_keywords.py,sha256=r8_DrqAfn6QLwQnmXEggveiSU-UaIL2p2nuPINelfFc,14949 | ||
| jsonschema/_legacy_keywords.py,sha256=2tWuwRPWbYS7EAl8wBIC_rabGuv1J4dfYLqNEPpShhA,15191 | ||
| jsonschema/_types.py,sha256=HQ5QD_oL85zF1FSW2v-5rvfYF0967HJdxSR88kzw2mY,5367 | ||
| jsonschema/_typing.py,sha256=NZhPhkBOn9INYZk8G69rDeuRamztgXCMLh10z9cfT6g,610 | ||
| jsonschema/_utils.py,sha256=ODga3vrJ6K2wMGxerpgn4ipc9q7ZSqBsvwKU4embLEE,10642 | ||
| jsonschema/cli.py,sha256=SGy9JPg02mgXhNxugU8iXhYNivfSjBhKTNAgV90ty-M,8551 | ||
| jsonschema/exceptions.py,sha256=RxE2T5xxgg_B6ttR8a3lCbZyh29RUtFe4oZKMoHPBAE,15035 | ||
| jsonschema/protocols.py,sha256=7mpZxO1gfRNMCGXwldwsSN3nEugVfIVyKZ_HZgN1vSw,7174 | ||
| jsonschema/validators.py,sha256=H31FwHdyB7LP5eunxdBrZ9E57hpvozfnRlZaOYy45jU,47045 | ||
| jsonschema/benchmarks/__init__.py,sha256=A0sQrxDBVHSyQ-8ru3L11hMXf3q9gVuB9x_YgHb4R9M,70 | ||
| jsonschema/benchmarks/const_vs_enum.py,sha256=DVFi3WDqBalZFOibnjpX1uTSr3Rxa2cPgFcowd7Ukrs,830 | ||
| jsonschema/benchmarks/contains.py,sha256=gexQoUrCOwECofbt19BeosQZ7WFL6PDdkX49DWwBlOg,786 | ||
| jsonschema/benchmarks/issue232.py,sha256=3LLYLIlBGQnVuyyo2iAv-xky5P6PRFHANx4-zIIQOoE,521 | ||
| jsonschema/benchmarks/json_schema_test_suite.py,sha256=PvfabpUYcF4_7csYDTcTauED8rnFEGYbdY5RqTXD08s,320 | ||
| jsonschema/benchmarks/nested_schemas.py,sha256=mo07dx-CIgmSOI62CNs4g5xu1FzHklLBpkQoDxWYcKs,1892 | ||
| jsonschema/benchmarks/subcomponents.py,sha256=fEyiMzsWeK2pd7DEGCuuY-vzGunwhHczRBWEnBRLKIo,1113 | ||
| jsonschema/benchmarks/unused_registry.py,sha256=hwRwONc9cefPtYzkoX_TYRO3GyUojriv0-YQaK3vnj0,940 | ||
| jsonschema/benchmarks/useless_applicator_schemas.py,sha256=EVm5-EtOEFoLP_Vt2j4SrCwlx05NhPqNuZQ6LIMP1Dc,3342 | ||
| jsonschema/benchmarks/useless_keywords.py,sha256=bj_zKr1oVctFlqyZaObCsYTgFjiiNgPzC0hr1Y868mE,867 | ||
| jsonschema/benchmarks/validator_creation.py,sha256=UkUQlLAnussnr_KdCIdad6xx2pXxQLmYtsXoiirKeWQ,285 | ||
| jsonschema/benchmarks/issue232/issue.json,sha256=eaPOZjMRu5u8RpKrsA9uk7ucPZS5tkKG4D_hkOTQ3Hk,117105 | ||
| jsonschema/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | ||
| jsonschema/tests/_suite.py,sha256=QAfBj34zMbJQ5_JJ2ogpiTlw9hQ6Is43dvo_bpS0EdM,8156 | ||
| jsonschema/tests/fuzz_validate.py,sha256=fUA7yTJIihaCwJplkUehZeyB84HcXEcqtY5oPJXIO7I,1114 | ||
| jsonschema/tests/test_cli.py,sha256=uFMu2YbIfbSDCnykhLL4-VR3-jg1tvQLJn2Bliwp_Bw,28587 | ||
| jsonschema/tests/test_deprecations.py,sha256=9VxOCfWzMG1Tg4OD8riU_Znd6HDOQZkepzVgxsdUdU8,15760 | ||
| jsonschema/tests/test_exceptions.py,sha256=JgC-E1ZFZK2puVBp35WFRnG8CNOiSWLYtyLjh9IvFKI,22591 | ||
| jsonschema/tests/test_format.py,sha256=eVm5SMaWF2lOPO28bPAwNvkiQvHCQKy-MnuAgEchfEc,3188 | ||
| jsonschema/tests/test_jsonschema_test_suite.py,sha256=a2saPs2Cwwg0sdRdu-uJ8goSXLbqrS-pC48QJy0K4DE,8674 | ||
| jsonschema/tests/test_types.py,sha256=cF51KTDmdsx06MrIc4fXKt0X9fIsVgw5uhT8CamVa8U,6977 | ||
| jsonschema/tests/test_utils.py,sha256=sao74o1PyYMxBfqweokQN48CFSS6yhJk5FkCfMJ5PsI,4163 | ||
| jsonschema/tests/test_validators.py,sha256=eiaigsZMzHYYsniQ1UPygaS56a1d-_7-9NC4wVXAhzs,87975 | ||
| jsonschema-4.23.0.dist-info/METADATA,sha256=Hd96gAfdO0v5RpFeT25qjyo7PvhASy56F4Jw3FUUTlo,7906 | ||
| jsonschema-4.23.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87 | ||
| jsonschema-4.23.0.dist-info/entry_points.txt,sha256=vO7rX4Fs_xIVJy2pnAtKgTSxfpnozAVQ0DjCmpMxnWE,51 | ||
| jsonschema-4.23.0.dist-info/licenses/COPYING,sha256=T5KgFaE8TRoEC-8BiqE0MLTxvHO0Gxa7hGw0Z2bedDk,1057 | ||
| jsonschema-4.23.0.dist-info/RECORD,, |
| Wheel-Version: 1.0 | ||
| Generator: hatchling 1.25.0 | ||
| Root-Is-Purelib: true | ||
| Tag: py3-none-any |
@@ -416,16 +416,12 @@ from __future__ import annotations | ||
| with suppress(ImportError): | ||
| from webcolors import CSS21_NAMES_TO_HEX | ||
| import webcolors | ||
| def is_css_color_code(instance: object) -> bool: | ||
| return webcolors.normalize_hex(instance) | ||
| @_checks_drafts(draft3="color", raises=(ValueError, TypeError)) | ||
| def is_css21_color(instance: object) -> bool: | ||
| if ( | ||
| not isinstance(instance, str) | ||
| or instance.lower() in CSS21_NAMES_TO_HEX | ||
| ): | ||
| return True | ||
| return is_css_color_code(instance) | ||
| if isinstance(instance, str): | ||
| try: | ||
| webcolors.name_to_hex(instance) | ||
| except ValueError: | ||
| webcolors.normalize_hex(instance.lower()) | ||
| return True | ||
@@ -432,0 +428,0 @@ |
+42
-28
@@ -9,3 +9,3 @@ """ | ||
| from textwrap import dedent, indent | ||
| from typing import TYPE_CHECKING, ClassVar | ||
| from typing import TYPE_CHECKING, Any, ClassVar | ||
| import heapq | ||
@@ -21,4 +21,6 @@ import itertools | ||
| if TYPE_CHECKING: | ||
| from collections.abc import Iterable, Mapping, MutableMapping | ||
| from collections.abc import Iterable, Mapping, MutableMapping, Sequence | ||
| from jsonschema import _types | ||
| WEAK_MATCHES: frozenset[str] = frozenset(["anyOf", "oneOf"]) | ||
@@ -30,2 +32,9 @@ STRONG_MATCHES: frozenset[str] = frozenset() | ||
| def _pretty(thing: Any, prefix: str): | ||
| """ | ||
| Format something for an error message as prettily as we currently can. | ||
| """ | ||
| return indent(pformat(thing, width=72, sort_dicts=False), prefix).lstrip() | ||
| def __getattr__(name): | ||
@@ -50,13 +59,13 @@ if name == "RefResolutionError": | ||
| message: str, | ||
| validator=_unset, | ||
| path=(), | ||
| cause=None, | ||
| validator: str = _unset, # type: ignore[assignment] | ||
| path: Iterable[str | int] = (), | ||
| cause: Exception | None = None, | ||
| context=(), | ||
| validator_value=_unset, | ||
| instance=_unset, | ||
| schema=_unset, | ||
| schema_path=(), | ||
| parent=None, | ||
| type_checker=_unset, | ||
| ): | ||
| validator_value: Any = _unset, | ||
| instance: Any = _unset, | ||
| schema: Mapping[str, Any] | bool = _unset, # type: ignore[assignment] | ||
| schema_path: Iterable[str | int] = (), | ||
| parent: _Error | None = None, | ||
| type_checker: _types.TypeChecker = _unset, # type: ignore[assignment] | ||
| ) -> None: | ||
| super().__init__( | ||
@@ -89,6 +98,6 @@ message, | ||
| def __repr__(self): | ||
| def __repr__(self) -> str: | ||
| return f"<{self.__class__.__name__}: {self.message!r}>" | ||
| def __str__(self): | ||
| def __str__(self) -> str: | ||
| essential_for_verbose = ( | ||
@@ -115,6 +124,6 @@ self.validator, self.validator_value, self.instance, self.schema, | ||
| Failed validating {self.validator!r} in {schema_path}: | ||
| {indent(pformat(self.schema, width=72), prefix).lstrip()} | ||
| {_pretty(self.schema, prefix=prefix)} | ||
| On {instance_path}: | ||
| {indent(pformat(self.instance, width=72), prefix).lstrip()} | ||
| {_pretty(self.instance, prefix=prefix)} | ||
| """.rstrip(), | ||
@@ -124,7 +133,7 @@ ) | ||
| @classmethod | ||
| def create_from(cls, other): | ||
| def create_from(cls, other: _Error): | ||
| return cls(**other._contents()) | ||
| @property | ||
| def absolute_path(self): | ||
| def absolute_path(self) -> Sequence[str | int]: | ||
| parent = self.parent | ||
@@ -139,3 +148,3 @@ if parent is None: | ||
| @property | ||
| def absolute_schema_path(self): | ||
| def absolute_schema_path(self) -> Sequence[str | int]: | ||
| parent = self.parent | ||
@@ -150,3 +159,3 @@ if parent is None: | ||
| @property | ||
| def json_path(self): | ||
| def json_path(self) -> str: | ||
| path = "$" | ||
@@ -160,3 +169,7 @@ for elem in self.absolute_path: | ||
| def _set(self, type_checker=None, **kwargs): | ||
| def _set( | ||
| self, | ||
| type_checker: _types.TypeChecker | None = None, | ||
| **kwargs: Any, | ||
| ) -> None: | ||
| if type_checker is not None and self._type_checker is _unset: | ||
@@ -176,5 +189,6 @@ self._type_checker = type_checker | ||
| def _matches_type(self): | ||
| def _matches_type(self) -> bool: | ||
| try: | ||
| expected = self.schema["type"] | ||
| # We ignore this as we want to simply crash if this happens | ||
| expected = self.schema["type"] # type: ignore[index] | ||
| except (KeyError, TypeError): | ||
@@ -229,3 +243,3 @@ return False | ||
| def __str__(self): | ||
| def __str__(self) -> str: | ||
| return str(self._cause) | ||
@@ -263,6 +277,6 @@ | ||
| def __init__(self, type): | ||
| def __init__(self, type: str) -> None: | ||
| self.type = type | ||
| def __str__(self): | ||
| def __str__(self) -> str: | ||
| return f"Type {self.type!r} is unknown to this type checker" | ||
@@ -287,6 +301,6 @@ | ||
| Unknown type {self.type!r} for validator with schema: | ||
| {indent(pformat(self.schema, width=72), prefix).lstrip()} | ||
| {_pretty(self.schema, prefix=prefix)} | ||
| While checking instance: | ||
| {indent(pformat(self.instance, width=72), prefix).lstrip()} | ||
| {_pretty(self.instance, prefix=prefix)} | ||
| """.rstrip(), | ||
@@ -293,0 +307,0 @@ ) |
@@ -651,2 +651,25 @@ from unittest import TestCase | ||
| def test_does_not_reorder_dicts(self): | ||
| self.assertShows( | ||
| """ | ||
| Failed validating 'type' in schema: | ||
| {'do': 3, 'not': 7, 'sort': 37, 'me': 73} | ||
| On instance: | ||
| {'here': 73, 'too': 37, 'no': 7, 'sorting': 3} | ||
| """, | ||
| schema={ | ||
| "do": 3, | ||
| "not": 7, | ||
| "sort": 37, | ||
| "me": 73, | ||
| }, | ||
| instance={ | ||
| "here": 73, | ||
| "too": 37, | ||
| "no": 7, | ||
| "sorting": 3, | ||
| }, | ||
| ) | ||
| def test_str_works_with_instances_having_overriden_eq_operator(self): | ||
@@ -653,0 +676,0 @@ """ |
| [console_scripts] | ||
| jsonschema = jsonschema.cli:main |
| Copyright (c) 2013 Julian Berman | ||
| 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. |
| Metadata-Version: 2.3 | ||
| Name: jsonschema | ||
| Version: 4.22.0 | ||
| Summary: An implementation of JSON Schema validation for Python | ||
| Project-URL: Homepage, https://github.com/python-jsonschema/jsonschema | ||
| Project-URL: Documentation, https://python-jsonschema.readthedocs.io/ | ||
| Project-URL: Issues, https://github.com/python-jsonschema/jsonschema/issues/ | ||
| Project-URL: Funding, https://github.com/sponsors/Julian | ||
| Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=pypi-link | ||
| Project-URL: Changelog, https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst | ||
| Project-URL: Source, https://github.com/python-jsonschema/jsonschema | ||
| Author-email: Julian Berman <Julian+jsonschema@GrayVines.com> | ||
| License: MIT | ||
| License-File: COPYING | ||
| Keywords: data validation,json,json schema,jsonschema,validation | ||
| Classifier: Development Status :: 5 - Production/Stable | ||
| Classifier: Intended Audience :: Developers | ||
| Classifier: License :: OSI Approved :: MIT License | ||
| Classifier: Operating System :: OS Independent | ||
| Classifier: Programming Language :: Python | ||
| 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 :: Implementation :: CPython | ||
| Classifier: Programming Language :: Python :: Implementation :: PyPy | ||
| Classifier: Topic :: File Formats :: JSON | ||
| Classifier: Topic :: File Formats :: JSON :: JSON Schema | ||
| Requires-Python: >=3.8 | ||
| Requires-Dist: attrs>=22.2.0 | ||
| Requires-Dist: importlib-resources>=1.4.0; python_version < '3.9' | ||
| Requires-Dist: jsonschema-specifications>=2023.03.6 | ||
| Requires-Dist: pkgutil-resolve-name>=1.3.10; python_version < '3.9' | ||
| Requires-Dist: referencing>=0.28.4 | ||
| Requires-Dist: rpds-py>=0.7.1 | ||
| Provides-Extra: format | ||
| Requires-Dist: fqdn; extra == 'format' | ||
| Requires-Dist: idna; extra == 'format' | ||
| Requires-Dist: isoduration; extra == 'format' | ||
| Requires-Dist: jsonpointer>1.13; extra == 'format' | ||
| Requires-Dist: rfc3339-validator; extra == 'format' | ||
| Requires-Dist: rfc3987; extra == 'format' | ||
| Requires-Dist: uri-template; extra == 'format' | ||
| Requires-Dist: webcolors>=1.11; extra == 'format' | ||
| Provides-Extra: format-nongpl | ||
| Requires-Dist: fqdn; extra == 'format-nongpl' | ||
| Requires-Dist: idna; extra == 'format-nongpl' | ||
| Requires-Dist: isoduration; extra == 'format-nongpl' | ||
| Requires-Dist: jsonpointer>1.13; extra == 'format-nongpl' | ||
| Requires-Dist: rfc3339-validator; extra == 'format-nongpl' | ||
| Requires-Dist: rfc3986-validator>0.1.0; extra == 'format-nongpl' | ||
| Requires-Dist: uri-template; extra == 'format-nongpl' | ||
| Requires-Dist: webcolors>=1.11; extra == 'format-nongpl' | ||
| Description-Content-Type: text/x-rst | ||
| ========== | ||
| jsonschema | ||
| ========== | ||
| |PyPI| |Pythons| |CI| |ReadTheDocs| |Precommit| |Zenodo| | ||
| .. |PyPI| image:: https://img.shields.io/pypi/v/jsonschema.svg | ||
| :alt: PyPI version | ||
| :target: https://pypi.org/project/jsonschema/ | ||
| .. |Pythons| image:: https://img.shields.io/pypi/pyversions/jsonschema.svg | ||
| :alt: Supported Python versions | ||
| :target: https://pypi.org/project/jsonschema/ | ||
| .. |CI| image:: https://github.com/python-jsonschema/jsonschema/workflows/CI/badge.svg | ||
| :alt: Build status | ||
| :target: https://github.com/python-jsonschema/jsonschema/actions?query=workflow%3ACI | ||
| .. |ReadTheDocs| image:: https://readthedocs.org/projects/python-jsonschema/badge/?version=stable&style=flat | ||
| :alt: ReadTheDocs status | ||
| :target: https://python-jsonschema.readthedocs.io/en/stable/ | ||
| .. |Precommit| image:: https://results.pre-commit.ci/badge/github/python-jsonschema/jsonschema/main.svg | ||
| :alt: pre-commit.ci status | ||
| :target: https://results.pre-commit.ci/latest/github/python-jsonschema/jsonschema/main | ||
| .. |Zenodo| image:: https://zenodo.org/badge/3072629.svg | ||
| :alt: Zenodo DOI | ||
| :target: https://zenodo.org/badge/latestdoi/3072629 | ||
| ``jsonschema`` is an implementation of the `JSON Schema <https://json-schema.org>`_ specification for Python. | ||
| .. code:: python | ||
| >>> from jsonschema import validate | ||
| >>> # A sample schema, like what we'd get from json.load() | ||
| >>> schema = { | ||
| ... "type" : "object", | ||
| ... "properties" : { | ||
| ... "price" : {"type" : "number"}, | ||
| ... "name" : {"type" : "string"}, | ||
| ... }, | ||
| ... } | ||
| >>> # If no exception is raised by validate(), the instance is valid. | ||
| >>> validate(instance={"name" : "Eggs", "price" : 34.99}, schema=schema) | ||
| >>> validate( | ||
| ... instance={"name" : "Eggs", "price" : "Invalid"}, schema=schema, | ||
| ... ) # doctest: +IGNORE_EXCEPTION_DETAIL | ||
| Traceback (most recent call last): | ||
| ... | ||
| ValidationError: 'Invalid' is not of type 'number' | ||
| It can also be used from the command line by installing `check-jsonschema <https://github.com/python-jsonschema/check-jsonschema>`_. | ||
| Features | ||
| -------- | ||
| * Full support for `Draft 2020-12 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft202012Validator>`_, `Draft 2019-09 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft201909Validator>`_, `Draft 7 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft7Validator>`_, `Draft 6 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft6Validator>`_, `Draft 4 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft4Validator>`_ and `Draft 3 <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/validators/#jsonschema.validators.Draft3Validator>`_ | ||
| * `Lazy validation <https://python-jsonschema.readthedocs.io/en/latest/api/jsonschema/protocols/#jsonschema.protocols.Validator.iter_errors>`_ that can iteratively report *all* validation errors. | ||
| * `Programmatic querying <https://python-jsonschema.readthedocs.io/en/latest/errors/>`_ of which properties or items failed validation. | ||
| Installation | ||
| ------------ | ||
| ``jsonschema`` is available on `PyPI <https://pypi.org/project/jsonschema/>`_. You can install using `pip <https://pip.pypa.io/en/stable/>`_: | ||
| .. code:: bash | ||
| $ pip install jsonschema | ||
| Extras | ||
| ====== | ||
| Two extras are available when installing the package, both currently related to ``format`` validation: | ||
| * ``format`` | ||
| * ``format-nongpl`` | ||
| They can be used when installing in order to include additional dependencies, e.g.: | ||
| .. code:: bash | ||
| $ pip install jsonschema'[format]' | ||
| Be aware that the mere presence of these dependencies – or even the specification of ``format`` checks in a schema – do *not* activate format checks (as per the specification). | ||
| Please read the `format validation documentation <https://python-jsonschema.readthedocs.io/en/latest/validate/#validating-formats>`_ for further details. | ||
| About | ||
| ----- | ||
| I'm Julian Berman. | ||
| ``jsonschema`` is on `GitHub <https://github.com/python-jsonschema/jsonschema>`_. | ||
| Get in touch, via GitHub or otherwise, if you've got something to contribute, it'd be most welcome! | ||
| You can also generally find me on Libera (nick: ``Julian``) in various channels, including ``#python``. | ||
| If you feel overwhelmingly grateful, you can also `sponsor me <https://github.com/sponsors/Julian/>`_. | ||
| And for companies who appreciate ``jsonschema`` and its continued support and growth, ``jsonschema`` is also now supportable via `TideLift <https://tidelift.com/subscription/pkg/pypi-jsonschema?utm_source=pypi-jsonschema&utm_medium=referral&utm_campaign=readme>`_. | ||
| Release Information | ||
| ------------------- | ||
| v4.22.0 | ||
| ======= | ||
| * Improve ``best_match`` (and thereby error messages from ``jsonschema.validate``) in cases where there are multiple *sibling* errors from applying ``anyOf`` / ``allOf`` -- i.e. when multiple elements of a JSON array have errors, we now do prefer showing errors from earlier elements rather than simply showing an error for the full array (#1250). | ||
| * (Micro-)optimize equality checks when comparing for JSON Schema equality by first checking for object identity, as ``==`` would. |
| jsonschema/__init__.py,sha256=LkPwscySlJ9lTOp7ZB1M7jQ8mbG7-bYG41iBwbZ-o9s,3941 | ||
| jsonschema/__main__.py,sha256=iLsZf2upUB3ilBKTlMnyK-HHt2Cnnfkwwxi_c6gLvSA,115 | ||
| jsonschema/_format.py,sha256=CUs9_8jlbg-GTb6xWaH5AdxGOFm9VWyCvSCq5KNIQBA,14714 | ||
| jsonschema/_keywords.py,sha256=r8_DrqAfn6QLwQnmXEggveiSU-UaIL2p2nuPINelfFc,14949 | ||
| jsonschema/_legacy_keywords.py,sha256=2tWuwRPWbYS7EAl8wBIC_rabGuv1J4dfYLqNEPpShhA,15191 | ||
| jsonschema/_types.py,sha256=HQ5QD_oL85zF1FSW2v-5rvfYF0967HJdxSR88kzw2mY,5367 | ||
| jsonschema/_typing.py,sha256=NZhPhkBOn9INYZk8G69rDeuRamztgXCMLh10z9cfT6g,610 | ||
| jsonschema/_utils.py,sha256=ODga3vrJ6K2wMGxerpgn4ipc9q7ZSqBsvwKU4embLEE,10642 | ||
| jsonschema/cli.py,sha256=SGy9JPg02mgXhNxugU8iXhYNivfSjBhKTNAgV90ty-M,8551 | ||
| jsonschema/exceptions.py,sha256=ngFaUUZMtyX9nTb94VfTnWOk4JdNsZiejBAvEezG688,14331 | ||
| jsonschema/protocols.py,sha256=7mpZxO1gfRNMCGXwldwsSN3nEugVfIVyKZ_HZgN1vSw,7174 | ||
| jsonschema/validators.py,sha256=H31FwHdyB7LP5eunxdBrZ9E57hpvozfnRlZaOYy45jU,47045 | ||
| jsonschema/benchmarks/__init__.py,sha256=A0sQrxDBVHSyQ-8ru3L11hMXf3q9gVuB9x_YgHb4R9M,70 | ||
| jsonschema/benchmarks/const_vs_enum.py,sha256=DVFi3WDqBalZFOibnjpX1uTSr3Rxa2cPgFcowd7Ukrs,830 | ||
| jsonschema/benchmarks/contains.py,sha256=gexQoUrCOwECofbt19BeosQZ7WFL6PDdkX49DWwBlOg,786 | ||
| jsonschema/benchmarks/issue232.py,sha256=3LLYLIlBGQnVuyyo2iAv-xky5P6PRFHANx4-zIIQOoE,521 | ||
| jsonschema/benchmarks/json_schema_test_suite.py,sha256=PvfabpUYcF4_7csYDTcTauED8rnFEGYbdY5RqTXD08s,320 | ||
| jsonschema/benchmarks/nested_schemas.py,sha256=mo07dx-CIgmSOI62CNs4g5xu1FzHklLBpkQoDxWYcKs,1892 | ||
| jsonschema/benchmarks/subcomponents.py,sha256=fEyiMzsWeK2pd7DEGCuuY-vzGunwhHczRBWEnBRLKIo,1113 | ||
| jsonschema/benchmarks/unused_registry.py,sha256=hwRwONc9cefPtYzkoX_TYRO3GyUojriv0-YQaK3vnj0,940 | ||
| jsonschema/benchmarks/useless_applicator_schemas.py,sha256=EVm5-EtOEFoLP_Vt2j4SrCwlx05NhPqNuZQ6LIMP1Dc,3342 | ||
| jsonschema/benchmarks/useless_keywords.py,sha256=bj_zKr1oVctFlqyZaObCsYTgFjiiNgPzC0hr1Y868mE,867 | ||
| jsonschema/benchmarks/validator_creation.py,sha256=UkUQlLAnussnr_KdCIdad6xx2pXxQLmYtsXoiirKeWQ,285 | ||
| jsonschema/benchmarks/issue232/issue.json,sha256=eaPOZjMRu5u8RpKrsA9uk7ucPZS5tkKG4D_hkOTQ3Hk,117105 | ||
| jsonschema/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 | ||
| jsonschema/tests/_suite.py,sha256=QAfBj34zMbJQ5_JJ2ogpiTlw9hQ6Is43dvo_bpS0EdM,8156 | ||
| jsonschema/tests/fuzz_validate.py,sha256=fUA7yTJIihaCwJplkUehZeyB84HcXEcqtY5oPJXIO7I,1114 | ||
| jsonschema/tests/test_cli.py,sha256=uFMu2YbIfbSDCnykhLL4-VR3-jg1tvQLJn2Bliwp_Bw,28587 | ||
| jsonschema/tests/test_deprecations.py,sha256=9VxOCfWzMG1Tg4OD8riU_Znd6HDOQZkepzVgxsdUdU8,15760 | ||
| jsonschema/tests/test_exceptions.py,sha256=biVA6UqwhYutjSxpTr1mHcsfGjXCjUSRWbrdKC_6O38,21994 | ||
| jsonschema/tests/test_format.py,sha256=eVm5SMaWF2lOPO28bPAwNvkiQvHCQKy-MnuAgEchfEc,3188 | ||
| jsonschema/tests/test_jsonschema_test_suite.py,sha256=a2saPs2Cwwg0sdRdu-uJ8goSXLbqrS-pC48QJy0K4DE,8674 | ||
| jsonschema/tests/test_types.py,sha256=cF51KTDmdsx06MrIc4fXKt0X9fIsVgw5uhT8CamVa8U,6977 | ||
| jsonschema/tests/test_utils.py,sha256=sao74o1PyYMxBfqweokQN48CFSS6yhJk5FkCfMJ5PsI,4163 | ||
| jsonschema/tests/test_validators.py,sha256=eiaigsZMzHYYsniQ1UPygaS56a1d-_7-9NC4wVXAhzs,87975 | ||
| jsonschema-4.22.0.dist-info/METADATA,sha256=jhijmeEY8FsE_tiJzZ1RBvEtO15WxwLsytzkiM6kr3Y,8205 | ||
| jsonschema-4.22.0.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87 | ||
| jsonschema-4.22.0.dist-info/entry_points.txt,sha256=vO7rX4Fs_xIVJy2pnAtKgTSxfpnozAVQ0DjCmpMxnWE,51 | ||
| jsonschema-4.22.0.dist-info/licenses/COPYING,sha256=T5KgFaE8TRoEC-8BiqE0MLTxvHO0Gxa7hGw0Z2bedDk,1057 | ||
| jsonschema-4.22.0.dist-info/RECORD,, |
| Wheel-Version: 1.0 | ||
| Generator: hatchling 1.24.2 | ||
| Root-Is-Purelib: true | ||
| Tag: py3-none-any |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
471082
0.19%11333
0.26%