Skip to main content

JSON/YAML schema validation within Jinja2 templates

Project description

JSON Schema Validation within Jinja2 Templates

CI Python versions PyPI Code style: Black Linter: Ruff Type-checker: mypy

A Jinja2 extension providing a Jinja2 filter for validating data against a JSON/YAML schema within Jinja2 templates.

Installation

  • With pip:

    pip install jinja2-jsonschema
    
    # ... or with YAML support
    pip install jinja2-jsonschema[yaml]
    
  • With poetry:

    poetry add jinja2-jsonschema
    
    # ... or with YAML support
    poetry add jinja2-jsonschema -E yaml
    
  • With pdm:

    pdm add jinja2-jsonschema
    
    # ... or with YAML support
    pdm add jinja2-jsonschema[yaml]
    
  • With pipx (injected into the pipx-managed virtual env of a package):

    pipx inject PACKAGE jinja2-jsonschema
    
    # ... or with YAML support
    pipx inject PACKAGE jinja2-jsonschema[yaml]
    

Usage

The extension provides a Jinja2 filter which receives a schema file path or schema object as input and returns a jsonschema.ValidationError object when validation fails and an empty string ("") otherwise. The JSON Schema dialect is inferred from the $schema field in the JSON Schema document and, when omitted, defaults to the latest dialect supported by the installed jsonschema library. Both local and remote schemas are supported including schema references and JSON Pointers.

Local schema files are loaded via a Jinja2 loader in which case configuring the Jinja2 environment with a loader is mandatory.

Some example usage of the JSON Schema validation filter is this:

from jinja2 import Environment
from jinja2 import FileSystemLoader


env = Environment(
    # Register a loader (only necessary when using local schema files).
    loader=FileSystemLoader("/path/to/templates"),
    # Register the extension.
    extensions=['jinja2_jsonschema.JsonSchemaExtension'],
)

# Example using an inline schema object.
template = env.from_string("{{ age | jsonschema({'type': 'integer', 'minimum': 0}) }}")
template.render(age=30)  # OK
template.render(age=-1)  # ERROR

# Example using a local schema file.
template = env.from_string("{{ age | jsonschema('age.json') }}")
template.render(age=30)  # OK
template.render(age=-1)  # ERROR

# Example using a remote schema file.
template = env.from_string("{{ age | jsonschema('https://example.com/age.json') }}")
template.render(age=30)  # OK
template.render(age=-1)  # ERROR

Contributions

Contributions are always welcome via filing issues or submitting pull requests. Please check the contribution guide for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jinja2_jsonschema-0.1.0.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

jinja2_jsonschema-0.1.0-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file jinja2_jsonschema-0.1.0.tar.gz.

File metadata

  • Download URL: jinja2_jsonschema-0.1.0.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for jinja2_jsonschema-0.1.0.tar.gz
Algorithm Hash digest
SHA256 37f353b020753dd94780cc6902793bd7d7bb9c9ffb831382f49f8360ce4619d6
MD5 47c8ac90ddb14448f6cd129f7264d0fd
BLAKE2b-256 0a217b6c5c25f276253ae15f9ef245bb7fdd08962d1a74376cce5b78452f3f54

See more details on using hashes here.

File details

Details for the file jinja2_jsonschema-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for jinja2_jsonschema-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b75c65ab734e9bc871c6b388336cf49f2465a7646a7830e34e53d30ea045c1e
MD5 96d1742a6cdee4418821a492899244bb
BLAKE2b-256 11f50ec80e29630a6a61b1f3f840935cf5caa15c6b98fc195c3b35052618db1f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page