1 # some core functions of analysis manager module
2 from django.http import HttpResponse
3 from datetime import datetime
6 from htsworkflow.frontend import settings
7 from htsworkflow.frontend.analysis.models import Task, Project
8 from django.core.exceptions import ObjectDoesNotExist
10 def updStatus(request):
11 ClIP = request.META['REMOTE_ADDR']
12 #Check client access permission
14 if (settings.ALLOWED_ANALYS_IPS.has_key(ClIP)): granted = True
15 if not granted: return HttpResponse("access denied.")
19 # Check required param
20 if request.has_key('taskid'): taskid = request['taskid']
21 else: return HttpResponse('missing param task id')
24 rec = Task.objects.get(id=taskid)
25 mytimestamp = datetime.now().__str__()
26 mytimestamp = re.sub(pattern=":[^:]*$",repl="",string=mytimestamp)
27 if request.has_key('msg'):
28 rec.task_status += ", "+request['msg']+" ("+mytimestamp+")"
30 rec.task_status = "Registered ("+mytimestamp+")"
32 output = "Hello "+settings.ALLOWED_ANALYS_IPS[ClIP]+". Updated status for task "+taskid
33 except ObjectDoesNotExist:
34 output = "entry not found: taskid="+taskid
36 return HttpResponse(output)
39 def getProjects(request):
40 ClIP = request.META['REMOTE_ADDR']
41 #Check client access permission
43 if (settings.ALLOWED_ANALYS_IPS.has_key(ClIP)): granted = True
44 if not granted: return HttpResponse("access denied.")
49 if (request.has_key('mode')):
50 if request['mode']=='all':
55 rec = Project.objects.all().distinct()
57 rec = Project.objects.filter(tasks__task_status__exact='defined').distinct()
59 outputfile = '<?xml version="1.0" ?>'
60 outputfile += '\n<Projects Client="'+settings.ALLOWED_ANALYS_IPS[ClIP]+'">'
63 outputfile += '\n<Project ProjectId="'+p.id.__str__()+'" Name="'+p.project_name+'">'
64 prj_tasks = p.tasks.all()
67 if (t.apply_calc == 'QuEST' or t.apply_calc == 'WingPeaks' or t.apply_calc == 'MACS'):
68 outputfile += '\n<PeakCalling TaskId="'+t.id.__str__()+'" Name="'+t.task_name+'" Caller="'+t.apply_calc+'" Genome="'+t.subject1.library_species.use_genome_build+'">'
69 outputfile += '\n<Signal Library="'+t.subject1.library_id+'"/>'
70 outputfile += '\n<Background Library="'+t.subject2.library_id+'"/>'
71 outputfile += '\n</PeakCalling>'
73 if (t.apply_calc == 'ProfileReads' or t.apply_calc == 'qPCR'):
74 outputfile += '\n<'+t.apply_calc+' TaskId="'+t.id.__str__()+'" Name="'+t.task_name+'" Genome="'+t.subject1.library_species.use_genome_build+'" Library="'+t.subject1.library_id+'"/>'
76 if (t.apply_calc == 'CompareLibs'):
77 outputfile += '\n<CompareLibraries TaskId="'+t.id.__str__()+'" TF="'+t.task_name+'" Genome="'+t.subject1.library_species.use_genome_build+'">'
78 outputfile += '\n<Library Library="'+t.subject1.library_id+'"/>'
79 outputfile += '\n<Library Library="'+t.subject2.library_id+'"/>'
80 outputfile += '\n</CompareLibraries>'
82 #if (t.apply_calc == 'ComparePeakCalls'):
83 # <ComparePeakCalls Genome="hg18" Caller1="QuEST" Set1="A549 GR Dex ChIP" Caller2="QuEST" Set2="A549 GR EtOH ChIP" />
84 # outputfile += '\n<ComparePeakCalls TaskId='+t.id.__str__()+' Genome="'+t.subject1.library_species.use_genome_build+'" Caller1="'+t.pcaller1+'" Caller1="'+t.pcaller1+'" Caller2="'+t.pcaller2+'" Set1="'+t.set1+'" Set1="'+t.set2+'"/>'
85 # TO DO: Define these new fields in Task: PCaller1 (QuEST,WingPeaks), PCaller2, Set1(FK to self), Set2 (FK..) ALL NULL=TRUE
86 outputfile += '\n</Project>'
87 outputfile += '\n</Projects>'
88 except ObjectDoesNotExist:
89 outputfile = "<?xml version='1.0' ?><Projects></Projects>"
91 return HttpResponse(outputfile, mimetype='text/plain')