Source code for aiida.common.example_helpers

# -*- coding: utf-8 -*-
###########################################################################
# Copyright (c), The AiiDA team. All rights reserved.                     #
# This file is part of the AiiDA code.                                    #
#                                                                         #
# The code is hosted on GitHub at https://github.com/aiidateam/aiida_core #
# For further information on the license, see the LICENSE.txt file        #
# For further information please visit http://www.aiida.net               #
###########################################################################



[docs]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): from aiida.orm.querybuilder import QueryBuilder qb = QueryBuilder() qb.append(Code, filters={'attributes.input_plugin': {'==': expected_code_type}}, project='*') valid_code_labels = ["{}@{}".format(c.label, c.get_computer().name) for [c] in qb.all()] 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