hypothesis-jsonschema
A Hypothesis strategy for generating data that matches some JSON schema.
API
The public API consists of just one function: hypothesis_jsonschema.from_schema,
which takes a JSON schema and returns a strategy for allowed JSON objects.
from hypothesis import given
from hypothesis_jsonschema import from_schema
@given(from_schema({"type": "integer", "minimum": 1, "exclusiveMaximum": 10}))
def test_integers(value):
assert isinstance(value, int)
assert 1 <= value < 10
@given(
from_schema(
{"type": "string", "format": "card"},
# Standard formats work out of the box. Custom formats are ignored
# by default, but you can pass custom strategies for them - e.g.
custom_formats={"card": st.sampled_from(EXAMPLE_CARD_NUMBERS)},
)
)
def test_card_numbers(value):
assert isinstance(value, str)
assert re.match(r"^\d{4} \d{4} \d{4} \d{4}$", value)
@given(from_schema({}, allow_x00=False, codec="utf-8").map(json.dumps))
def test_card_numbers(payload):
assert isinstance(payload, str)
assert "\0" not in payload # use allow_x00=False to exclude null characters
# If you want to restrict generated strings characters which are valid in
# a specific character encoding, you can do that with the `codec=` argument.
payload.encode(codec="utf-8")
For more details on property-based testing and how to use or customise strategies, see the Hypothesis docs.
JSONSchema drafts 04, 05, and 07 are fully tested and working. As of version 0.11, this includes resolving non-recursive references!
Supported versions
hypothesis-jsonschema requires Python 3.6 or later.
In general, 0.x versions will require very recent versions of all dependencies
because I don't want to deal with compatibility workarounds.
hypothesis-jsonschema may make backwards-incompatible changes at any time
before version 1.x - that's what semver means! - but I've kept the API surface
small enough that this should be avoidable. The main source of breaks will be
if or when schema that never really worked turn into explicit errors instead
of generating values that don't quite match.
You can sponsor me to get priority support, roadmap input, and prioritized feature development.
Contributing to hypothesis-jsonschema
We love external contributions - and try to make them both easy and fun. You can read more details in our contributing guide, and see everyone who has contributed on GitHub. Thanks, everyone!
Changelog
Patch notes can be found in CHANGELOG.md.
Security contact information
To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.
Metadata
Release files for hypothesis-jsonschema 0.23.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| hypothesis-jsonschema-0.23.1.tar.gz | 42.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hypothesis_jsonschema-0.23.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 72.1 kB
Release files / hypothesis-jsonschema-0.23.1.tar.gz
| Download URL | hypothesis-jsonschema-0.23.1.tar.gz |
|---|---|
| Size | 42.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f4ac032024342a4149a10253984f5a5736b82b3fe2afb0888f3834a31153f215
|
|
BLAKE2b-256 checksum How to use checksums |
4fad2073dd29d8463a92c243d0c298370e50e0d4082bc67f156dc613634d0ec4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.8.18
|
Release files / hypothesis_jsonschema-0.23.1-py3-none-any.whl
| Download URL | hypothesis_jsonschema-0.23.1-py3-none-any.whl |
|---|---|
| Size | 29.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a4d74d9516dd2784fbbae82e009f62486c9104ac6f4e3397091d98a1d5ee94a2
|
|
BLAKE2b-256 checksum How to use checksums |
1744635a8d2add845c9a2d99a93a379df77f7e70829f0a1d7d5a6998b61f9d01
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.0.0 CPython/3.8.18
|
Security for hypothesis-jsonschema 0.23.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.