Mercurial > repos > recetox > mzml_validator
comparison mzml_validator_wrapper.py @ 0:9beb3a276ce3 draft
planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/mzml_validator commit d9676cbf7a1f8bd1cf0af742585893459d4861aa
| author | recetox |
|---|---|
| date | Fri, 20 Jan 2023 12:42:11 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:9beb3a276ce3 |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 | |
| 3 | |
| 4 import argparse | |
| 5 import logging | |
| 6 import os | |
| 7 import sys | |
| 8 | |
| 9 from lxml import etree | |
| 10 | |
| 11 XSD_FILENAMES = {'1.1.0': 'mzML1.1.0.xsd', | |
| 12 '1.1.1': 'mzML1.1.1_idx.xsd'} | |
| 13 | |
| 14 | |
| 15 def main(args): | |
| 16 parser = argparse.ArgumentParser(description='Validate mzML files') | |
| 17 parser.add_argument('--input_file', type=str, help='mzML file to validate') | |
| 18 parser.add_argument('--schemas_dir', type=str, help='Directory containing XML Schema Definitions') | |
| 19 parser.add_argument('--xsd_versions', type=lambda version: [v for v in version.split(',')], help='XSD versions to validate against') | |
| 20 parser.add_argument('--log_file', type=str, help='Path to log file') | |
| 21 args = parser.parse_args(args) | |
| 22 | |
| 23 logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s', filename=args.log_file, filemode='w') | |
| 24 | |
| 25 mzml = etree.parse(args.input_file) | |
| 26 validated = False | |
| 27 | |
| 28 stderrs = set() | |
| 29 for version in args.xsd_versions: | |
| 30 xsd = etree.parse(os.path.join(args.schemas_dir, XSD_FILENAMES[version])) | |
| 31 schema = etree.XMLSchema(xsd) | |
| 32 if schema.validate(mzml): | |
| 33 validated = True | |
| 34 logging.info(f'Validated against mzML XML Schema Definition v{version}') | |
| 35 else: | |
| 36 stderrs.add(f'Failed to validate against mzML XML Schema Definition v{version}\n' | |
| 37 f'xmllint error message(s):' | |
| 38 f'{schema.error_log.last_error}\n') | |
| 39 | |
| 40 if validated: | |
| 41 sys.exit(0) | |
| 42 else: | |
| 43 list((logging.error(e), sys.stderr.write(e)) for e in stderrs) | |
| 44 sys.exit(1) | |
| 45 | |
| 46 | |
| 47 if __name__ == '__main__': | |
| 48 main(sys.argv[1:]) |
