text: # -*- 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               #
  ###########################################################################
  
  
  
  from __future__ import division
  from __future__ import absolute_import
  from __future__ import print_function
  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(msg, file=sys.stderr)
                  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(msg, file=sys.stderr)
                  sys.exit(1)
  
      return code
  