def test_create_configuration():
        'Test default config'
        fhand = NamedTemporaryFile()
        fhand.write('[Snvs]\nmin_num_alleles = 2\n[[edge_removal]]\n454_left=None')
        fhand.flush()
        config_fpath = fhand.name
        config = create_configuration(config_fpath)
        assert config['Snvs']['min_quality'] == 45

        #malformed
        fhand = NamedTemporaryFile()
        fhand.write('[blast]\n[[nr]]\nkind="nucl"\npath="path"\nspecies="all"')
        fhand.flush()
        config_fpath = fhand.name
        config = create_configuration(config_fpath)
        assert config['Snvs']['min_quality'] == 45
def do_analysis(kind, project_settings=None, analysis_config=None,
                silent=False):
    'It does one of the predefined analyses'
    if project_settings is None:
        project_settings = os.path.join(os.getcwd(),
                                        BACKBONE_DIRECTORIES['config_file'])
        if not os.path.exists(project_settings):
            raise ValueError('Settings path not given and not found')

    if not analysis_config:
        analysis_config = {}

    settings = create_configuration(project_settings)

    specifications = get_analysis_especifications()


    log_fpath = os.path.join(settings['General_settings']['project_path'],
                             BACKBONE_DIRECTORIES['log_file'])
    _configure_logging(log_fpath, silent)

    try:
        analysis_def = specifications[kind]
    except KeyError:
        raise ValueError('Unknown analysis: ' + kind)

    analyzer_klass = analysis_def['analyzer']
    analyzer = analyzer_klass(project_settings=settings,
                        analysis_definition=analysis_def, silent=silent)

    analyzer.run()
    def test_create_project():
        'We can create a project'
        test_dir = NamedTemporaryDir()
        settings_path = create_project(directory=test_dir.name,
                                       name='backbone')

        assert settings_path == join(test_dir.name,
                                'backbone', BACKBONE_DIRECTORIES['config_file'])
        settings = create_configuration(settings_path)
        assert settings['General_settings']['project_name'] == 'backbone'
        project_path = join(test_dir.name, 'backbone')
        assert settings['General_settings']['project_path'] == project_path
        assert settings['Cleaning']['strip_n_percent'] == 2.0
        content = open(settings_path).read()
        assert 'strip_n_percent' in content
        test_dir.close()