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.9.tar.gz (16.2 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: schema_markdown-1.2.9.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.9.tar.gz
Algorithm Hash digest
SHA256 f07d1158ad659e2ae0474cfd7bd9f7ba7048cdab951b0b8cef8e97299d58a5b0
MD5 92537a853d182aa6539f21240ef0f65c
BLAKE2b-256 d596a950cd8eaed250258fd15ecfa87879e2c940cfee1eafec80abefb0cd0fa4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for schema_markdown-1.2.9-py3-none-any.whl
Algorithm Hash digest
SHA256 51ead902e9634fe36700d205531658b7e66b3d0fdd68be9507572eccedb65162
MD5 7eaac3d9ca2a03dc3d105c32d311781e
BLAKE2b-256 6383a47bcad982b9b35f89e2a5b7178c2bb9ddd32b568a661a5908489bbb47c9

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