1 # some core functions of analysis manager module
3 from datetime import datetime
7 from django.conf import settings
8 from django.core.exceptions import ObjectDoesNotExist
9 from django.http import HttpResponse
11 from htsworkflow.frontend.analysis.models import Task, Project
13 def updStatus(request):
14 ClIP = request.META['REMOTE_ADDR']
15 #Check client access permission
17 if (ClIP in settings.ALLOWED_ANALYS_IPS): granted = True
18 if not granted: return HttpResponse("access denied.")
22 # Check required param
23 if 'taskid' in request: taskid = request['taskid']
24 else: return HttpResponse('missing param task id')
27 rec = Task.objects.get(id=taskid)
28 mytimestamp = datetime.now().__str__()
29 mytimestamp = re.sub(pattern=":[^:]*$",repl="",string=mytimestamp)
31 rec.task_status += ", "+request['msg']+" ("+mytimestamp+")"
33 rec.task_status = "Registered ("+mytimestamp+")"
35 output = "Hello "+settings.ALLOWED_ANALYS_IPS[ClIP]+". Updated status for task "+taskid
36 except ObjectDoesNotExist:
37 output = "entry not found: taskid="+taskid
39 return HttpResponse(output)
42 def getProjects(request):
43 ClIP = request.META['REMOTE_ADDR']
44 #Check client access permission
46 if (ClIP in settings.ALLOWED_ANALYS_IPS): granted = True
47 if not granted: return HttpResponse("access denied.")
52 if ('mode' in request):
53 if request['mode']=='all':
58 rec = Project.objects.all().distinct()
60 rec = Project.objects.filter(tasks__task_status__exact='defined').distinct()
62 outputfile = '<?xml version="1.0" ?>'
63 outputfile += '\n<Projects Client="'+settings.ALLOWED_ANALYS_IPS[ClIP]+'">'
66 outputfile += '\n<Project ProjectId="'+p.id.__str__()+'" Name="'+p.project_name+'">'
67 prj_tasks = p.tasks.all()
70 if (t.apply_calc == 'QuEST' or t.apply_calc == 'WingPeaks' or t.apply_calc == 'MACS'):
71 outputfile += '\n<PeakCalling TaskId="'+t.id.__str__()+'" Name="'+t.task_name+'" Caller="'+t.apply_calc+'" Genome="'+t.subject1.library_species.use_genome_build+'">'
73 outputfile += '\n<Signal Library="'+t.subject1.id+'"/>'
75 outputfile += '\n<Background Library="'+t.subject2.id+'"/>'
77 outputfile += '\n<Err>Background Library Missing</Err>'
79 outputfile += '\n<Err>Signal Library Missing</Err>'
80 outputfile += '\n<params>'+t.task_params.__str__()+'</params>'
81 outputfile += '\n</PeakCalling>'
83 if (t.apply_calc == 'Methylseq'):
84 outputfile += '\n<Methylseq TaskId="'+t.id.__str__()+'" Name="'+t.task_name+'" Genome="'+t.subject1.library_species.use_genome_build+'">'
86 outputfile += '\n<Hpa2 Library="'+t.subject1.id+'"/>'
88 outputfile += '\n<Msp1 Library="'+t.subject2.id+'"/>'
90 outputfile += '\n<Err>Msp1 Library Missing</Err>'
92 outputfile += '\n<Err>Hpa2 Library Missing</Err>'
93 outputfile += '\n<params>'+t.task_params.__str__()+'</params>'
94 outputfile += '\n</Methylseq>'
96 if (t.apply_calc == 'ProfileReads' or t.apply_calc == 'qPCR'):
97 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+'"/>'
99 if (t.apply_calc == 'CompareLibs'):
100 outputfile += '\n<CompareLibraries TaskId="'+t.id.__str__()+'" TF="'+t.task_name+'" Genome="'+t.subject1.library_species.use_genome_build+'">'
102 outputfile += '\n<Library Library="'+t.subject1.id+'"/>'
104 outputfile += '\n<Err>Library Missing</Err>'
106 outputfile += '\n<Library Library="'+t.subject2.id+'"/>'
108 outputfile += '\n<Err>Library Missing</Err>'
109 outputfile += '\n<params>'+t.task_params.__str__()+'</params>'
110 outputfile += '\n</CompareLibraries>'
112 #if (t.apply_calc == 'ComparePeakCalls'):
113 # <ComparePeakCalls Genome="hg18" Caller1="QuEST" Set1="A549 GR Dex ChIP" Caller2="QuEST" Set2="A549 GR EtOH ChIP" />
114 # 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+'"/>'
115 # TO DO: Define these new fields in Task: PCaller1 (QuEST,WingPeaks), PCaller2, Set1(FK to self), Set2 (FK..) ALL NULL=TRUE
116 outputfile += '\n</Project>'
117 outputfile += '\n</Projects>'
118 except ObjectDoesNotExist:
119 outputfile = "<?xml version='1.0' ?><Projects></Projects>"
121 return HttpResponse(outputfile, mimetype='text/plain')