Source code for chemicalchecker.core.validation

"""Generate validation sets.

Fetch the validation set generation scripts and run them.
"""
import os
import sys
from subprocess import call

from chemicalchecker.util import logged, Config


[docs]@logged class Validation(): """Validation class. Creates a validation set. """ def __init__(self, validation_path, name): """Initialize a Validation instance. Args: name(str): The name of the validatoion set. """ config = Config() self.name = name self.validation_sets_path = validation_path if not os.path.isdir(self.validation_sets_path): self.__log.warning("Creating validation sets dir") original_umask = os.umask(0) os.makedirs(self.validation_sets_path, 0o775) os.umask(original_umask) self.validation_script = os.path.join( config.PATH.CC_REPO, "package/scripts/validation_sets", name, "run.py") if not os.path.isfile(self.validation_script): raise Exception( "The validation script for validation set " + name + " is not available.") self.destination_file = os.path.join( self.validation_sets_path, self.name + "_validation.tsv")
[docs] def run(self, destination=None): """Run the validation script.""" if destination is None: destination = self.destination_file try: cmdStr = "python " + self.validation_script + " -o " + destination retcode = call(cmdStr, shell=True) self.__log.debug("FINISHED! " + cmdStr + (" returned code %d" % retcode)) if retcode != 0: if retcode > 0: self.__log.error( "ERROR return code %d, please check!" % retcode) elif retcode < 0: self.__log.error( "Command terminated by signal %d" % -retcode) sys.exit(1) except OSError as e: self.__log.critical("Execution failed: %s" % e) sys.exit(1)