docs: def check_configuration(config):
      '''Check if configuration object is not malformed.
  
      :param config: configuration
      :type config: dict
      :return: is configuration correct?
      :rtype: bool
      '''
      sections = ('commands', 'parameters', 'pipelines')
      # Check all sections are there and contain dicts
      for section in sections:
          if section not in config:
              error_msg = 'Error: Section {0} is missing.'.format(section)
              raise ConfigurationErrorDietException(error_msg)
          if not isinstance(config[section], dict):
              error_msg = 'Error: Section {0} is malformed.'.format(section)
              raise ConfigurationErrorDietException(error_msg)
  
      # Check every command has a corresponding parameters entry
      commands_cmds = set(list(config['commands'].keys()))
      parameters_cmds = set(list(config['parameters'].keys()))
      if commands_cmds != parameters_cmds:
          error_msg = ('Every command in commands and parameters section has to '
                       'have a corresponding entry in the other section.')
          raise ConfigurationErrorDietException(error_msg)
  
      # Check pipelines section contains lists as values and each of them only
      # has entries listed in commands section
      for cmd in config['pipelines']:
          pipeline = config['pipelines'][cmd]
          if not isinstance(pipeline, list):
              error_msg = ('Error: Pipeline {0} is malformed. Values have to '
                           'be a list of command names.').format(cmd)
              raise ConfigurationErrorDietException(error_msg)
          for tool in pipeline:
              if tool not in commands_cmds:
                  error_msg = ('Error in pipeline {0}. "{1}" cannot be found '
                               'among commands listed in commands '
                               'section').format(cmd, tool)
                  raise ConfigurationErrorDietException(error_msg)