# the directories with the output of breseq
directories = [str(21), str(22), str(43)]

for directory in directories:
    if directory == '21':
        sample = 'Ancestor_S1'
    elif directory == '22':
        sample = 'Ancestor_S2'
    elif directory == '43':
        sample = 'Ancestor_S3'
    else:
        raise RuntimeError('somehow not in an anticipated directory')
    with pushd(directory + '/output/evidence'):
        anno = open('annotated.gd')
        gd_dicts = []
        for line in anno:
            try:
                gd_dicts.append(lgd.gd_line_to_dict(line))
            except ValueError:
                pass
        dictIDs_to_save = []
        for gd_dict in gd_dicts:
            if gd_dict['type'] == 'SNP':
                dictIDs_to_save.append(gd_dict['parent_id'])
        for gd_dict in gd_dicts:
            if gd_dict['id'] in dictIDs_to_save:
                gene, snp_mutation, snp_evidence = \
                    lgd.RA_dict_to_SNP_dicts(sample, gd_dict)
                lgd.commit_SNP_dicts(gene, snp_mutation, snp_evidence, session)
for directory in directories:
    if directory == 'Agg_over_ancestors_against_self':
        sample = 'Aggregate_NS001_Ancestors'
    elif directory == '21':
        sample = 'Ancestor_S1'
    elif directory == '22':
        sample = 'Ancestor_S2'
    elif directory == '43':
        sample = 'Ancestor_S3'
    else:
        with pushd(directory + '/output'):
            output_file = open('output.gd')
            line_with_samplename = output_file.readlines()[5]
            sample = re.findall('[a-zA-Z]+[1-4]t[1-2]',
                                line_with_samplename)[0] + '_S1'
    with pushd(directory + '/output/evidence'):
        anno = open('annotated.gd')
        for line in anno:
            try:
                gd_dict = lgd.gd_line_to_dict(line)
                if gd_dict['type'] == 'MC':
                    mc = lgd.gdMC_dict_to_MC_dict(sample, gd_dict)
                    lgd.add_MC_dict(mc, session)
            except ValueError:
                pass
    try:
        session.commit()
    except DBAPIError:
        print('failed in directory {0}'.format(directory))
        session.rollback()