rendered paste bodyfrom django.http import HttpResponse, HttpResponseRedirectfrom django.template import Context, loaderimport os from align.bubu.models import RunningAlignmentfrom django.contrib.auth import authenticate, login, logoutfrom align.bubu.uuid import uuid1from datetime import datetimedef getBasePath(): return '/home/wojtek/Dwork/Dtest/align/bubu/media/data/'def makeDataFile(type, uid, basepath): if(type == 1): return basepath + 'in' + uid + '.fas' elif(type == 20): return basepath + 'out' + uid + '.fas' elif(type == 21): return basepath + 'in' + uid + '.aln' elif(type == 3): return basepath + 'prog' + uid + '.fas' elif(type == 4): return basepath + 'sa' + uid + '.showalign'def index(request): if not request.user.is_authenticated(): return(startLogin(request)) t = loader.get_template('index.html') c = Context({'test' : 'test text', 'username' : request.user.username}) return HttpResponse(t.render(c))def startProcess(algo, infile, outfile, progfile, fast): if(algo == 'mafft'): if(fast): os.system('mafft ' + infile + ' > ' + outfile + ' 2> ' + progfile + ' & disown') else: os.system('mafft --retree 1 ' + infile + ' > ' + outfile + ' 2> ' + progfile + ' & disown') else: if(fast): os.system('clustalw -infile=' + infile + ' -quicktree ' + ' > ' + progfile + ' & disown') else: os.system('clustalw -infile=' + infile + ' > ' + progfile + ' & disown')def step1(request): algo = request.REQUEST['algo'] # Get uuid for the communication files uid = uuid1().hex basepath = getBasePath() infile = makeDataFile(1, uid, basepath) if(algo=='mafft'): outfile = makeDataFile(20, uid, basepath) else: outfile = makeDataFile(21, uid, basepath) progfile = makeDataFile(3, uid, basepath) # Copy the data fr4om submitted file to the alignment input file data = request.FILES['afile'] infileF = open(infile, 'w') infileF.write(data['content']) infileF.close() sfile = data['filename'] fast = False; try: fast = request.REQUEST['fast'] != None except: pass if(sfile.startswith("/")): sfile = sfile.split("/")[-1] else: sfile = sfile.split("\\")[-1] sfile = sfile.split(".")[0] # Create a new running alignment in the queue (start_date = NILL && end_date = NULL) ra = RunningAlignment(user_name = request.user.username, added_date = datetime.now(), start_date = None, end_date = None, tmp_file = progfile, result_file = outfile, input_file = infile, uid = uid, submit_file = sfile, algo = algo) # check if there are any alignments currenlty running (start_date != NULL && end_date == NULL) # If no other alignments are running, start the alignment for the uploaded file. running = RunningAlignment.objects.filter(start_date__isnull=False, end_date__isnull=True) if(len(running)==0): ra.start_date = datetime.now() startProcess(algo, infile, outfile, progfile, fast) ra.save() tab = progress(request) tpl = loader.get_template('step1.html') cnt = Context({'submit' : True, 'table' : tab, 'username' : request.user.username}) return HttpResponse(tpl.render(cnt))def showStatus(request): tab = progress(request) tpl = loader.get_template('step1.html') cnt = Context({'submit' : False, 'table' : tab, 'username' : request.user.username}) return HttpResponse(tpl.render(cnt))def showDoc(request): tpl = loader.get_template('doc.html') cnt = Context({'username' : request.user.username}) return HttpResponse(tpl.render(cnt))def doDelete(request, uid): alignment = RunningAlignment.objects.filter(uid=uid)[0] if(alignment.start_date != None): if(alignment.algo == 'mafft'): os.system('pkill mafft') os.system('pkill disttbfast') else: os.system('pkill clustalw') basepath = '/home/wojtek/Dwork/Dtest/align/bubu/media/data/' delIfExists(makeDataFile(1, uid, basepath)) if(alignment.algo == 'mafft'): delIfExists(makeDataFile(20, uid, basepath)) else: delIfExists(makeDataFile(21, uid, basepath)) delIfExists(makeDataFile(3, uid, basepath)) alignment.delete() return(HttpResponse(""))def delIfExists(filename): try: os.remove(makeDataFile(1, uid, basepath)) except: passdef getShowAlign(infile, outfile): os.system('showalign -sequence ' + infile + ' -outfile ' + outfile)def progress(request): allrunning = RunningAlignment.objects.filter(end_date__isnull=True, start_date__isnull=False) if(len(allrunning) != 0): running = allrunning[0] if(running.algo == 'mafft'): tmpfile = open(running.tmp_file, 'r') tmpstr = tmpfile.read() tmpfile.close() if(tmpstr.rstrip().endswith("mafft page.")): running.end_date = datetime.now() getShowAlign(makeDataFile(20, running.uid, getBasePath()), makeDataFile(4, running.uid, getBasePath())) running.save() else: try: tmpfile = open(running.tmp_file, 'r') tmpstr = tmpfile.read() tmpfile.close() if(tmpstr.rfind("CLUSTAL-Alignment file created") != -1): running.end_date = datetime.now() getShowAlign(makeDataFile(21, running.uid, getBasePath()), makeDataFile(4, running.uid, getBasePath())) running.save() except: pass allrunning = RunningAlignment.objects.filter(end_date__isnull=True, start_date__isnull=False) if(len(allrunning) == 0): queuedAndRunning = RunningAlignment.objects.filter(end_date__isnull=True, start_date__isnull=True).order_by('added_date') if(len(queuedAndRunning) != 0): torun = queuedAndRunning[0] torun.start_date = datetime.now() torun.save() os.system('mafft ' + torun.input_file + ' > ' + torun.result_file + ' 2> ' + torun.tmp_file + ' & disown') queuedAndRunning = RunningAlignment.objects.filter(end_date__isnull=True).order_by('-start_date', 'added_date') finished = RunningAlignment.objects.filter(end_date__isnull=False).order_by('-start_date') t = loader.get_template('progress.html') c = Context({'running' : queuedAndRunning, 'finished' : finished, 'username' : request.user.username}) ret = t.render(c) return retdef doProgress(request): return HttpResponse(progress(request))def doFileProgress(request): allrunning = RunningAlignment.objects.filter(end_date__isnull=True, start_date__isnull=False) if(len(allrunning) != 0): running = allrunning[0] if(running.algo != 'mafft'): return(HttpResponse("n/a")) tmpfile = open(running.tmp_file, 'r') tmpstr = tmpfile.read() tmpfile.close() if(tmpstr.rfind("STEP")==-1): return(HttpResponse("0")) progs = tmpstr[tmpstr.rfind("STEP"):].split(" ") if(progs == ""): return(HttpResponse("0")) vals = filter(lambda x: x!='' and x!='STEP' and x!='f', progs) try: ret = 100*float(vals[0])/float(vals[2]) except: return(HttpResponse("0")) return(HttpResponse(str(round(ret)))) return(HttpResponse("0"))def startLogin(request): t = loader.get_template('startLogin.html') c = Context() return HttpResponse(t.render(c))def doLogin(request): user = authenticate(username=request.POST['username'], password=request.POST['password']) if user is not None: login(request, user) return index(request) else: return startLogin(request)def getResultFile(request, uid): align = RunningAlignment.objects.filter(uid=uid)[0] if(align.algo == 'mafft'): path = makeDataFile(20, uid, '/site_media/data/') else: path = makeDataFile(21, uid, '/site_media/data/') return HttpResponseRedirect(path)def getShowAlignFile(request, uid): return HttpResponseRedirect(makeDataFile(4, uid, '/site_media/data/'))def doLogout(request): logout(request) return index(request)