Skip to main content

Python driver/validator for Bento Model Description Format

Project description

bento_mdf

Python 3 drivers for the graph Model Description Format

This directory provides test-mdf.py, a standalone command line MDF validator.

Installation

Install the latest version (including scripts below) from GitHub using an up-to-date pip:

pip install bento-mdf

Scripts

Scripts test-mdf.py and load-mdf.py are included in the distribution. test-mdf is a verbose validator that can be used to find issues in a set of local MDFs using the MDF JSONSchema. load-mdf will load a valid set of MDFs into an existing Neo4j Metamodel Database.

test-mdf Usage

$ test-mdf.py -h
usage: test-mdf.py [-h] [--schema SCHEMA] [--quiet] [--log-file LOG_FILE]
                   mdf-file [mdf-file ...]

Validate MDF against JSONSchema

positional arguments:
  mdf-file             MDF yaml files for validation

optional arguments:
  -h, --help           show this help message and exit
  --schema SCHEMA      MDF JSONschema file
  --quiet              Suppress output; return only exit value
  --log-file LOG_FILE  Log file name

See "Validator Notes" below.

load-mdf Usage

$ ./load-mdf.py -h
usage: load-mdf.py [-h] --commit COMMIT [--handle HANDLE] [--user USER] [--passw PASSW]
                   [--bolt BoltURL] [--put]
                   [MDF-FILE ...]

Load model in MDF into an MDB

positional arguments:
  MDF-FILE         MDF file(s)/url(s)

optional arguments:
  -h, --help       show this help message and exit
  --commit COMMIT  commit SHA1 for MDF instance (if any)
  --handle HANDLE  model handle
  --user USER      MDB username
  --passw PASSW    MDB password
  --bolt BoltURL   MDB Bolt url endpoint (specify as 'bolt://...')
  --put            Load model to database

Validator test-mdf.pyNotes

The --schema argument is optional. test-mdf.py will automatically retrieve the latest mdf-schema.yaml in the master branch of this repo.

The script tests both the syntax of the YAML (for both schema and MDF files), and the validity of the files with respect to the JSONSchema (for both schema and MDF files).

The errors are as emitted from the PyYaml and jsonschema packages, and can be rather obscure.

  • Successful test

      $ test-mdf.py samples/ctdc_model_file.yaml samples/ctdc_model_properties_file.yaml 
      Checking schema YAML =====
      Checking as a JSON schema =====
      Checking instance YAML =====
      Checking instance against schema =====
    
  • Bad YAML syntax

      $ test-mdf.py samples/ctdc_model_bad.yaml samples/ctdc_model_properties_file.yaml 
      Checking schema YAML =====
      Checking as a JSON schema =====
      Checking instance YAML =====
      YAML error in 'samples/ctdc_model_bad.yaml':
      while parsing a block mapping
        in "samples/ctdc_model_bad.yaml", line 1, column 1
      expected <block end>, but found '<block mapping start>'
        in "samples/ctdc_model_bad.yaml", line 3, column 3
    
  • Schema-invalid YAML

      $ test-mdf.py samples/ctdc_model_file_invalid.yaml samples/ctdc_model_properties_file.yaml 
      Checking schema YAML =====
      Checking as a JSON schema =====
      Checking instance YAML =====
      Checking instance against schema =====
      ['show_node', 'specimen_id', 'biopsy_sequence_number', 'specimen_type'] is not of type 'object'
      
      Failed validating 'type' in schema['properties']['Nodes']['additionalProperties']:
          {'$id': '#nodeSpec',
           'properties': {'Category': {'$ref': '#/defs/snake_case_id'},
                          'Props': {'oneOf': [{'items': {'$ref': '#/defs/snake_case_id'},
                                               'type': 'array',
                                               'uniqueItems': True},
                                              {'type': 'null'}]},
                          'Tags': {'$ref': '#/defs/tagsSpec'}},
           'required': ['Props'],
           'type': 'object'}
      
      On instance['Nodes']['specimen']:
          ['show_node', 'specimen_id', 'biopsy_sequence_number', 'specimen_type']
    

Testing the tester

The validator code itself can be tested as follows:

pip install tox
cd bento-mdf/validators/mdf-validate
tox

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

bento_mdf-0.9.8.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

bento_mdf-0.9.8-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file bento_mdf-0.9.8.tar.gz.

File metadata

  • Download URL: bento_mdf-0.9.8.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for bento_mdf-0.9.8.tar.gz
Algorithm Hash digest
SHA256 6fb6217625c355f20d60f65589fa7f27fd9638c929ddca56190bfe225b53327b
MD5 4cec75c31bf943104acba6af69a1dd5c
BLAKE2b-256 bec1e2df62b951a3cc058f9496557d71bae7461baf0a548641541c942fa767b0

See more details on using hashes here.

File details

Details for the file bento_mdf-0.9.8-py3-none-any.whl.

File metadata

  • Download URL: bento_mdf-0.9.8-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.12.5

File hashes

Hashes for bento_mdf-0.9.8-py3-none-any.whl
Algorithm Hash digest
SHA256 2c6be1a44400383afffcd9097b1a64e9e93ce843a0e708210d5e8c2411590220
MD5 9693c4bd522cd09a1b9d9662ed966573
BLAKE2b-256 5d16134fc1e11fc4493b2ee90c51e15cdbbfe50886c389322108195e1341b42f

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