import abifpy
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from Bio.Emboss.Applications import NeedleCommandline 
import os #uso a funcao listdir 
from Bio import SeqIO

def acessa_ab1(arquivo,trim=True): #generalizar depois
    """acessa um arquivo ab1 e retorna um objeto SeqRecord"""
    dado = abifpy.Trace(arquivo)
    if trim:
        cortado = dado.trim(dado.seq(ambig=True)) 
        return SeqRecord(cortado, id=arquivo, description='dado cortado')
    else:
        return dado.seqrecord()
        
def abre_ref(arquivo):
    """acessa um arquivo contendo uma sequencia de referencia
      retorna um objeto SeqRecord"""
    with open(arquivo, 'rUb') as dado:
        referencia = SeqIO.read(dado, 'genbank')
    return referencia

def salva_fasta(obj_SeqRecord):
    """Pega um objeto SeqRecord e cria um fasta com a sua sequencia"""
    
    SeqIO.write([obj_SeqRecord], obj_SeqRecord + '.fasta','fasta')

def processar_lote(diretorio, ref):
    """abre os arquivos ab1 de uma pasta, apara, salva em fasta, faz o alinhamento com 
    o fasta de referencia e salva o alinhamento em um arquivo para analise
    posterior.
    diretorio --> uma string representando o caminho da pasta contendo os arquivos
    ref --> uma string representando o caminho absoluto + genbank com a 
    sequencia de referencia.
    """
    
    referencia = abre_ref(ref)
    referencia.id = 'sequencia de referencia'
    salva_fasta(referencia)
    ab1files = [x for x in os.listdir(diretorio) if x.endswith('.ab1')]
    for file in ab1files:
        dado = acessa_ab1(diretorio + file)
        salva_fasta(dado)
        needle_cline = NeedleCommandline(asequence='referencia.fasta', 
                                        bsequence= file + '.fasta', gapopen=10, gapextend=0.5, 
                                        outfile=file + "_aligned.txt")
    stdout, stderr = needle_cline()

        
        

#pasta = '/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/'
#referencia = '/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/BRCA1 (total) - Frag 3450.gb'

#processar_lote(pasta, referencia)

dado = acessa_ab1('/home/mercutio22/Dropbox/My scripts/Fabi/vs/Seq_placa273 analisada/1174411_3450F_A01.ab1')
print type(dado)
salva_fasta(dado)


===============================error msg==============
<class 'Bio.SeqRecord.SeqRecord'>
Traceback (most recent call last):
  File "louise.py", line 59, in <module>
    salva_fasta(dado)
  File "louise.py", line 26, in salva_fasta
    SeqIO.write([obj_SeqRecord], obj_SeqRecord + '.fasta','fasta')
  File "/usr/lib/pymodules/python2.6/Bio/SeqIO/__init__.py", line 412, in write
    count = writer_class(handle).write_file(sequences)
  File "/usr/lib/pymodules/python2.6/Bio/SeqIO/Interfaces.py", line 271, in write_file
    count = self.write_records(records)
  File "/usr/lib/pymodules/python2.6/Bio/SeqIO/Interfaces.py", line 256, in write_records
    self.write_record(record)
  File "/usr/lib/pymodules/python2.6/Bio/SeqIO/FastaIO.py", line 134, in write_record
    self.handle.write(">%s\n" % title)
AttributeError: 'SeqRecord' object has no attribute 'write'