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+'">'
70 outputfile += '\n<Signal Library="'+t.subject1.id+'"/>'
72 outputfile += '\n<Background Library="'+t.subject2.id+'"/>'
74 outputfile += '\n<Err>Background Library Missing</Err>'
76 outputfile += '\n<Err>Signal Library Missing</Err>'
77 outputfile += '\n<params>'+t.task_params.__str__()+'</params>'
78 outputfile += '\n</PeakCalling>'
80 if (t.apply_calc == 'Methylseq'):
81 outputfile += '\n<Methylseq TaskId="'+t.id.__str__()+'" Name="'+t.task_name+'" Genome="'+t.subject1.library_species.use_genome_build+'">'
83 outputfile += '\n<Hpa2 Library="'+t.subject1.id+'"/>'
85 outputfile += '\n<Msp1 Library="'+t.subject2.id+'"/>'
87 outputfile += '\n<Err>Msp1 Library Missing</Err>'
89 outputfile += '\n<Err>Hpa2 Library Missing</Err>'
90 outputfile += '\n<params>'+t.task_params.__str__()+'</params>'
91 outputfile += '\n</Methylseq>'
93 if (t.apply_calc == 'ProfileReads' or t.apply_calc == 'qPCR'):
94 outputfile += '\n<'+t.apply_calc+' TaskId="'+t.id.__str__()+'" Name="'+t.task_name+'" Genome="'+t.subject1.library_species.use_genome_build+'" Library="'+t.subject1.id+'"/>'
96 if (t.apply_calc == 'CompareLibs'):
97 outputfile += '\n<CompareLibraries TaskId="'+t.id.__str__()+'" TF="'+t.task_name+'" Genome="'+t.subject1.library_species.use_genome_build+'">'
99 outputfile += '\n<Library Library="'+t.subject1.id+'"/>'
101 outputfile += '\n<Err>Library Missing</Err>'
103 outputfile += '\n<Library Library="'+t.subject2.id+'"/>'
105 outputfile += '\n<Err>Library Missing</Err>'
106 outputfile += '\n<params>'+t.task_params.__str__()+'</params>'
107 outputfile += '\n</CompareLibraries>'
109 #if (t.apply_calc == 'ComparePeakCalls'):
110 # <ComparePeakCalls Genome="hg18" Caller1="QuEST" Set1="A549 GR Dex ChIP" Caller2="QuEST" Set2="A549 GR EtOH ChIP" />
111 # 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+'"/>'
112 # TO DO: Define these new fields in Task: PCaller1 (QuEST,WingPeaks), PCaller2, Set1(FK to self), Set2 (FK..) ALL NULL=TRUE
113 outputfile += '\n</Project>'
114 outputfile += '\n</Projects>'
115 except ObjectDoesNotExist:
116 outputfile = "<?xml version='1.0' ?><Projects></Projects>"
118 return HttpResponse(outputfile, mimetype='text/plain')