Skip to content

Commit

Permalink
backend blast new almost ready
Browse files Browse the repository at this point in the history
  • Loading branch information
carlosp420 committed Jan 16, 2015
1 parent ff17103 commit 13c7ff6
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 3 deletions.
46 changes: 46 additions & 0 deletions voseq/blast_new/utils.py
Expand Up @@ -4,6 +4,7 @@
from Bio import SeqIO
from Bio.Seq import Seq
from Bio.SeqRecord import SeqRecord
from django.db.models import Q

from blast_local.utils import BLAST
from public_interface.models import Sequences
Expand Down Expand Up @@ -47,3 +48,48 @@ def __init__(self, blast_type, name, sequence, gene_codes, mask=None):
'db',
'output_' + uuid.uuid4().hex + '.xml',
)

def save_seqs_to_file(self):
"""
Query sequences for each gene from our database and save them to local
disk.
Sets attribute `self.seq_file` containing necessary sequences from our
database.
"""
if self.blast_type == 'new':
self.seq_file = os.path.join(self.cwd,
'db',
'_'.join(self.gene_codes) + "_seqs.fas",
)
if self.gene_codes != '':
# Taken from http://stackoverflow.com/a/1239602
Qr = None
for gene_code in self.gene_codes:
q = Q(gene_code=gene_code)
if Qr:
Qr = Qr | q
else:
Qr = q
queryset = Sequences.objects.filter(Qr)
else:
queryset = Sequences.objects.all()

my_records = []
for i in queryset:
id = i.code_id + '|' + i.gene_code
seq = self.strip_question_marks(i.sequences)
if seq != '':
seq_record = SeqRecord(Seq(seq),
id=id)
my_records.append(seq_record)
SeqIO.write(my_records, self.seq_file, "fasta")

def save_query_to_file(self):
this_id = self.name
seq = self.strip_question_marks(self.sequence)

if seq != '':
seq_record = SeqRecord(Seq(seq),
id=this_id)
SeqIO.write(seq_record, self.query_file, "fasta")
33 changes: 30 additions & 3 deletions voseq/blast_new/views.py
Expand Up @@ -2,6 +2,7 @@
from django.conf import settings
from django.http import HttpResponseRedirect

from .utils import BLASTNew
from stats.models import Stats
from .forms import BLASTNewForm

Expand All @@ -24,11 +25,37 @@ def index(request):


def results(request):
VERSION = settings.VERSION
try:
STATS = Stats.objects.get(pk=1)
except Stats.DoesNotExist:
STATS = ''

if request.method == 'POST':
form = BLASTNewForm(request.POST)

if form.is_valid():
print(request.POST)
return render(request,
'blast_new/results.html')
cleaned_data = form.cleaned_data

# tmp, remove after fixing form
cleaned_data['gene_codes'] = ''
blast = BLASTNew('new', cleaned_data['name'], cleaned_data['sequence'],
cleaned_data['gene_codes'])
blast.save_seqs_to_file()

if blast.is_blast_db_up_to_date() is False:
blast.create_blast_db()

blast.save_query_to_file()
blast.do_blast()
result = blast.parse_blast_output()
blast.delete_query_output_files()
return render(request, 'blast_new/results.html',
{
'result': result,
'version': VERSION,
'stats': STATS,
},
)

return HttpResponseRedirect('/blast_new/')

0 comments on commit 13c7ff6

Please sign in to comment.