Skip to main content

A schema definition and validation library

Project description

schema-markdown

PyPI - Status PyPI GitHub PyPI - Python Version

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


Download files

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

Source Distribution

schema_markdown-1.2.10.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

schema_markdown-1.2.10-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file schema_markdown-1.2.10.tar.gz.

File metadata

  • Download URL: schema_markdown-1.2.10.tar.gz
  • Upload date:
  • Size: 16.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.13.0

File hashes

Hashes for schema_markdown-1.2.10.tar.gz
Algorithm Hash digest
SHA256 15c2816f8853926fe0b1b15552de358e090b9ef656dbda28950cd71c62ee9487
MD5 e3b18ebe9b5c934d9bd945e4ab1485f9
BLAKE2b-256 bb9dffba9e4ac721bd7b07335fa28035a2f65f212d930ebc24dba4bc37c6413e

See more details on using hashes here.

File details

Details for the file schema_markdown-1.2.10-py3-none-any.whl.

File metadata

File hashes

Hashes for schema_markdown-1.2.10-py3-none-any.whl
Algorithm Hash digest
SHA256 c7cca8ceb5bc370e4c2c86b916b75522a884c3a4b693af01b6c6a36d0381e1db
MD5 3764f12785c6eace43d65f2e4a0c9209
BLAKE2b-256 066997549aaa80484fb5cb188a1e99706e45dbd27aa32ca951c83c53bdb5ea7b

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