def test_and_get_code(codename, expected_code_type, use_exceptions=False): """ Pass a code name and an expected code (plugin) type. Check that the code exists, is unique, and return the Code object. :param codename: the name of the code to load (in the form label@machine) :param expected_code_type: a string with the plugin that is expected to be loaded. In case no plugins exist with the given name, show all existing plugins of that type :param use_exceptions: if True, raise a ValueError exception instead of calling sys.exit(1) :return: a Code object """ import sys from aiida.common.exceptions import NotExistent from aiida.orm import Code try: if codename is None: raise ValueError code = Code.get_from_string(codename) if code.get_input_plugin_name() != expected_code_type: raise ValueError except (NotExistent, ValueError): valid_code_labels = [ "{}@{}".format(c.label, c.get_computer().name) for c in Code.query(dbattributes__key="input_plugin", dbattributes__tval=expected_code_type) ] if valid_code_labels: msg = ("Pass as further parameter a valid code label.\n" "Valid labels with a {} executable are:\n".format( expected_code_type)) msg += "\n".join("* {}".format(l) for l in valid_code_labels) if use_exceptions: raise ValueError(msg) else: print >> sys.stderr, msg sys.exit(1) else: msg = ("Code not valid, and no valid codes for {}.\n" "Configure at least one first using\n" " verdi code setup".format(expected_code_type)) if use_exceptions: raise ValueError(msg) else: print >> sys.stderr, msg sys.exit(1) return code
options[argkey] = [] options[argkey].append(argval) else: files.append(arg) expected_code_type = "codtools.cifcoddeposit" try: if codename is None: raise ValueError code = Code.get(codename) if code.get_input_plugin_name() != expected_code_type: raise ValueError except (NotExistent, ValueError): valid_code_labels = [c.label for c in Code.query( dbattributes__key="input_plugin", dbattributes__tval=expected_code_type)] if valid_code_labels: print >> sys.stderr, "Pass as further parameter a valid code label." print >> sys.stderr, "Valid labels with a {} executable are:".format(expected_code_type) for l in valid_code_labels: print >> sys.stderr, "*", l else: print >> sys.stderr, "Code not valid, and no valid codes for {}. Configure at least one first using".format( expected_code_type) print >> sys.stderr, " verdi code setup" sys.exit(1) cif = None if len(files) == 1: cif = CifData(file=os.path.abspath(files[0]))