mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-21 22:45:33 -04:00
99 lines
3.1 KiB
Python
Executable file
99 lines
3.1 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import glob
|
|
import lxml.etree as etree
|
|
from subprocess import call
|
|
from optparse import OptionParser
|
|
|
|
# Command line parsing
|
|
parser = OptionParser()
|
|
parser.add_option('-r', '--relaxng-path', dest='relaxng',
|
|
help="Path to RelaxNG files.")
|
|
parser.add_option('-i', '--input-path', dest='inputs', default=os.getcwd(),
|
|
help="Path to OpenMC input files." )
|
|
(options, args) = parser.parse_args()
|
|
|
|
# Colored output
|
|
if sys.stdout.isatty():
|
|
OK = '\033[92m'
|
|
FAIL = '\033[91m'
|
|
NOT_FOUND = '\033[93m'
|
|
ENDC = '\033[0m'
|
|
BOLD = '\033[1m'
|
|
else:
|
|
OK = ''
|
|
FAIL = ''
|
|
ENDC = ''
|
|
BOLD = ''
|
|
NOT_FOUND = ''
|
|
|
|
# Get absolute paths
|
|
if options.relaxng is not None:
|
|
relaxng_path = os.path.abspath(options.relaxng)
|
|
if options.inputs is not None:
|
|
inputs_path = os.path.abspath(options.inputs)
|
|
|
|
# Search for relaxng path if not set
|
|
if options.relaxng is None:
|
|
xml_validate_path = os.path.abspath(os.path.dirname(sys.argv[0]))
|
|
if "bin" in xml_validate_path:
|
|
relaxng_path = os.path.join(xml_validate_path, "..", "share", "relaxng")
|
|
elif os.path.join("src", "utils") in xml_validate_path:
|
|
relaxng_path = os.path.join(xml_validate_path, "..", "relaxng")
|
|
else:
|
|
raise Exception("Set RelaxNG path with -r command line option.")
|
|
if not os.path.exists(relaxng_path):
|
|
raise Exception("RelaxNG path: {0} does not exist, set with -r "
|
|
"command line option.".format(relaxng_path))
|
|
|
|
# Make sure there are .rng files in RelaxNG path
|
|
rng_files = glob.glob(os.path.join(relaxng_path, "*.rng"))
|
|
if len(rng_files) == 0:
|
|
raise Exception("No .rng files found in RelaxNG "
|
|
"path: {0}.".format(relaxng_path))
|
|
|
|
# Get list of xml input files
|
|
xml_files = glob.glob(os.path.join(inputs_path, "*.xml"))
|
|
if len(xml_files) == 0:
|
|
raise Exception("No .xml files found at input path: {0}"
|
|
".".format(inputs_path))
|
|
|
|
# Begin loop around input files
|
|
for xml_file in xml_files:
|
|
|
|
text = "Validating {0}".format(os.path.basename(xml_file))
|
|
print(text + '.'*(30 - len(text)), end="")
|
|
|
|
# Validate the XML file
|
|
try:
|
|
xml_tree = etree.parse(xml_file)
|
|
except etree.XMLSyntaxError as e:
|
|
print(BOLD + FAIL + '[XML ERROR]' + ENDC)
|
|
print(" {0}".format(e))
|
|
continue
|
|
|
|
# Get xml_filename prefix
|
|
xml_prefix = os.path.basename(xml_file)
|
|
xml_prefix = xml_prefix.split(".")[0]
|
|
|
|
# Search for rng file
|
|
rng_file = os.path.join(relaxng_path, xml_prefix + ".rng")
|
|
if rng_file in rng_files:
|
|
|
|
# read in RelaxNG
|
|
relaxng_doc = etree.parse(rng_file)
|
|
relaxng = etree.RelaxNG(relaxng_doc)
|
|
|
|
# validate xml file again RelaxNG
|
|
try:
|
|
relaxng.assertValid(xml_tree)
|
|
print(BOLD + OK + '[VALID]' + ENDC)
|
|
except (etree.DocumentInvalid, TypeError) as e:
|
|
print(BOLD + FAIL + '[NOT VALID]' + ENDC)
|
|
print(" {0}".format(e))
|
|
|
|
# RNG file does not exist
|
|
else:
|
|
print(BOLD + NOT_FOUND + '[NO RELAXNG FOUND]' + ENDC)
|