A schema definition and validation library
Project description
schema-markdown is a schema definition and validation library.
Links
Define a Schema
Schemas are defined using the Schema Markdown language, which is parsed by the parse_schema_markdown function. For example:
>>> from schema_markdown import parse_schema_markdown ... >>> model_types = parse_schema_markdown('''\ ... # An aggregate numerical operation ... struct Aggregation ... ... # The aggregation function - default is "Sum" ... optional AggregationFunction aggregation ... ... # The numbers to aggregate on ... int[len > 0] numbers ... ... # An aggregation function ... enum AggregationFunction ... Average ... Sum ... ''')
Validate using a Schema
To validate an object using the schema, use the validate_type function. For example:
>>> from schema_markdown import validate_type ... >>> validate_type(model_types, 'Aggregation', {'numbers': [1, 2, '3', 4]}) {'numbers': [1, 2, 3, 4]}
Notice that the numerical input ‘3’ above is type-massaged to the integer 3 by validation.
Validation fails if the object does not match the schema:
>>> from schema_markdown import ValidationError ... >>> try: ... validate_type(model_types, 'Aggregation', {'numbers': [1, 2, 'asdf', 4]}) ... except ValidationError as exc: ... str(exc) "Invalid value 'asdf' (type 'str') for member 'numbers.2', expected type 'int'"
Validation also fails if a member constraint is violated:
>>> try: ... validate_type(model_types, 'Aggregation', {'numbers': []}) ... except ValidationError as exc: ... str(exc) "Invalid value [] (type 'list') for member 'numbers', expected type 'array' [len > 0]"
Document a Schema
To document the schema, download the documentation application stub and save the type model as JSON:
curl -O https://craigahobbs.github.io/schema-markdown-doc/extra/index.html
python3 \
-c 'from model import model_types; import json; print(json.dumps(model_types))' \
> model.json
To host locally, start a local static web server:
python3 -m http.server
Development
This package is developed using python-build. It was started using python-template as follows:
template-specialize python-template/template/ schema-markdown/ -k package schema-markdown -k name 'Craig A. Hobbs' -k email 'craigahobbs@gmail.com' -k github 'craigahobbs' -k nomain 1
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for schema_markdown-1.2.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7235f468efac9671fa9a295f5f85d096cecbf5656759cf381a4c4855b7a847be |
|
MD5 | 34d754a2a93def15fe1b24a9be1d0822 |
|
BLAKE2b-256 | a21e94f6d3ad106b6c02f6a0ae3f12f9e2b5b3af4f582f107c1557249d3da6f4 |