Package: bento-mdf
bento_mdfPython 3 drivers for the graphModel Description FormatThis directory providestest-mdf.py, a standalone command line MDF validator.InstallationInstall the latest version (including scripts below) from GitHub using
an up-to-date pip:pip install bento-mdfScriptsScriptstest-mdf.pyandload-mdf.pyare included in the
distribution.test-mdfis a verbose validator that can be used to
find issues in a set of local MDFs using theMDF
JSONSchema.load-mdfwill load a
valid set of MDFs into an existingNeo4jMetamodel Database.test-mdfUsage$ 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 nameSee "Validator Notes" below.load-mdfUsage$ ./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 databaseValidatortest-mdf.pyNotesThe--schemaargument is optional.test-mdf.pywill automatically retrieve the latestmdf-schema.yamlin the master branch ofthis 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 thePyYamlandjsonschemapackages, 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 3Schema-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 testerThe validator code itself can be tested as follows:pip install tox
cd bento-mdf/validators/mdf-validate
tox