comparison mzml_validator_wrapper.py @ 0:5961146e0d1a draft default tip

planemo upload for repository https://github.com/RECETOX/galaxytools/tree/master/tools/mzml_validator commit d9676cbf7a1f8bd1cf0af742585893459d4861aa
author recetox
date Fri, 20 Jan 2023 12:41:59 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:5961146e0d1a
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:])