Embedding validations in your project

validate-pyproject can be used as a dependency in your project in the same way you would use any other Python library, i.e. by adding it to the same virtual environment you run your code in, or by specifying it as a project or library dependency that is automatically retrieved every time your project is installed. Please check this example for a quick overview on how to use the Python API.

Alternatively, if you cannot afford having external dependencies in your project you can also opt to “vendorise” [1] validate-pyproject. This can be done automatically via tools such as vendoring or vendorize and many others others, however this technique will copy several files into your project.

However, if you want to keep the amount of files to a minimum, validate-pyproject offers a different solution that consists in pre-compiling the JSON Schemas (thanks to fastjsonschema).

After installing validate-pyproject this can be done via CLI as indicated in the command below:

# in you terminal
$ python -m validate_pyproject.pre_compile --help
$ python -m validate_pyproject.pre_compile -O dir/for/generated_files

This command will generate a few files under the directory given to the CLI. Please notice this directory should, ideally, be empty, and will correspond to a “sub-package” in your package (a __init__.py file will be generated, together with a few other ones).

Assuming you have created a generated_files directory, and that the value for the --main-file option in the CLI was kept as the default __init__.py, you should be able to invoke the validation function in your code by doing:

from .generated_files import validate, ValidationError

try:
    validate(dict_representing_the_parsed_toml_file)
except ValidationError:
    print("Invalid File")