#!/usr/bin/env python
# Jacob Joseph
# July 9, 2007
# Dump a sequence set to fasta format, using swissprot accessions

import sys
from DurandDB import blastq

class dumpfasta:
    set_id = None

    def __init__(self, set_id):
        self.set_id = set_id
        self.b_class = blastq.blastq()

    def fetch_seqs( self):
        q = """SELECT seq_id, primary_acc, sequence
FROM prot_seq_set_member
JOIN prot_seq_version USING (seq_id)
JOIN prot_seq USING (seq_id)
JOIN prot_seq_str USING (seq_str_id)
WHERE set_id='%d'"""
        return self.b_class.dbw.fetchall_iter(q % self.set_id)

    def write_fasta( self):
        dbret = self.fetch_seqs()

        fd = open('seq_set_%d.fasta' % self.set_id, 'w')
        for (seq_id, primary_acc, sequence) in dbret:
            #print >> fd, ">%s, %s" % (seq_id, primary_acc)
            #print >> fd, ">%s" % seq_id
            print >> fd, ">%s" % self.b_class.fetch_fa_descr( seq_id)
            print >> fd, sequence
        fd.close()

if __name__ == "__main__":
    df = dumpfasta(set_id=int(sys.argv[1]))
    df.write_fasta()
    
