def taxonomy(request, job): jobtitle = job_name(job) service = 'taxonomy' servicename = 'taxonomic groups' taxfilters = controls.run_script("", job, "taxonomy") treedata = controls.run_script("", job, "get_taxonomy") if request.method == 'POST': print(request.POST['jsfilters']) newfilters = controls.run_script( "newfilters=" + urllib.parse.unquote_plus(request.POST['jsfilters']), job, "taxonomy") taxfilters = newfilters.replace("u'", "'") pfilters = json.loads(taxfilters) pfkeys = list(pfilters.keys()) pfkeys.remove("none") template = loader.get_template('taxonomy.html') context = { 'job': job, 'title': jobtitle, 'service': service, 'servicename': servicename, 'taxfilters': taxfilters, 'pfkeys': pfkeys, 'treedata': treedata, 'jscripts': ["d3.v3.min.js"] } return HttpResponse(template.render(context, request))
def tags(request, job): jobtitle = job_name(job) service = 'tags' servicename = 'subsets of samples' tags = controls.run_script("", job, "tags") if request.method == 'POST': re_pattern = re.compile('[^\u0000-\uD7FF\uE000-\uFFFF]', re.UNICODE) ntstr = re_pattern.sub( '_', ''.join([urllib.parse.unquote_plus(request.POST['jstags'])])) ntstr = "".join([ uc if uc < "\u00ff" else "_" for uc in urllib.parse.unquote_plus(request.POST['jstags']) ]) print(ntstr) newtags = controls.run_script("newtags=" + ntstr, job, "tags") tags = newtags.replace("u'", "'") ptags = json.loads(tags) ptkeys = list(ptags.keys()) ptkeys.remove("name") ptkeys.remove("none") volumes = ptags['name'] template = loader.get_template('tags.html') context = { 'job': job, 'title': jobtitle, 'service': service, 'servicename': servicename, 'tags': tags, 'ptkeys': ptkeys, 'volumes': json.dumps(volumes), 'pvolumes': volumes } return HttpResponse(template.render(context, request))
def summary(request, job): summary = json.loads(controls.run_script("", job, "summary")) tags = json.loads(controls.run_script("", job, "tags")) jobtitle = summary['name'] template = loader.get_template('summary.html') vollist = ", ".join(summary['volumes']) result = '<br>'.join([ "maxlevel: " + str(summary['maxlevel']), "taxonomy type: " + summary['taxtype'], "num_volumes: " + str(summary['numvolumes']), "num_records: " + str(summary['numrecords']), "volumes: " + vollist ]) context = { 'job': job, 'title': jobtitle, 'service': 'summary', 'servicename': 'summary of the dataset', 'result': result } return HttpResponse(template.render(context, request))
def generic_view(request, job, service, formclass, **kwargs): jobtitle = job_name(job) jscripts = kwargs.get('jscripts', []) servicename = kwargs.get('servicename', service) script = kwargs.get('script', service) template = kwargs.get( 'template', "default_service" if len(jscripts) == 0 else "default_chart") outname = jobtitle + "_" + service result = "select parameters and press <i>Submit</i><br>" tags = controls.run_script("", job, "tags") if request.method == 'POST': form = formclass(request.POST, request.FILES, job_id=job, tags_dict=tags) if not service in ["indices", "summary", "anova"]: outname += "_" + form.data['level'] if "command" in form.data and form.data["command"] != "Submit": host = "http://secure.bri-shur.com:%s/static" % request.META[ 'SERVER_PORT'] print(form.data["command"]) #host = "http://bri-shur.com/javascripts" if form.data["command"] == "Download as PNG": pngres = controls.render_png(format_params(form), job, script, host, jscripts) if len(pngres) > 0: response = HttpResponse(pngres, content_type="image/png") response[ 'Content-Disposition'] = 'attachment; filename="%s.png"' % outname.replace( "\n", "_") return response if form.data["command"] == "Download as SVG": svgres = controls.render_svg(format_params(form), job, script, host, jscripts) if len(svgres) > 0: response = HttpResponse(svgres, content_type="image/svg+xml") response[ 'Content-Disposition'] = 'attachment; filename="%s.svg"' % outname.replace( "\n", "_") return response print(script) result = run_script(form, job, script) else: form = formclass(job_id=job, tags_dict=tags) template = loader.get_template(template + '.html') context = { 'job': job, 'title': jobtitle, 'service': service, 'servicename': servicename, 'result': result, 'form': form, 'outname': outname, 'jscripts': jscripts, 'tags': tags } if service == "venn" and request.method == 'POST' and form.data[ "ptype"] == "interactive-presence": context['extracss'] = jvenn_css context['extrascripts'] = jvenn_js return HttpResponse(template.render(context, request))
def job_name(job): summary = json.loads(controls.run_script("", job, "summary")) return summary['name']
def run_script(form, job, script): return controls.run_script(format_params(form), job, script)
def __init__(self, *args, **kwargs): job_id = kwargs.pop('job_id') tags = json.loads(kwargs.pop('tags_dict')) super(GenericForm, self).__init__(*args, **kwargs) summary = json.loads(controls.run_script("", job_id, "summary")) #tags = json.loads( controls.run_script( "", job_id, "tags" ) ) taxfilters = json.loads(controls.run_script("", job_id, "taxonomy")) cvolumes = [(v, v) for v in summary['volumes']] levelnames = { "qiime": [ "Kingdom", "Phylum", "Class", "Order", "Family", "Genus", "Species", "OTU" ] } if summary["taxtype"] != "none": clevels = [ (str(k), levelnames[summary["taxtype"]][k - 1] + " (" + str(k) + ")") for k in range(1, summary['maxlevel'] + 1) ] else: clevels = [(str(k), str(k)) for k in range(1, summary['maxlevel'] + 1)] ctags = [(v, v) for v in list(tags.keys())] ctaxfilters = [(v, v) for v in list(taxfilters.keys())] distmeasures = [ "Pearson", "Kendall", "Spearman", "Euclidean", "Bray-Curtis", "Jaccard", "Morisita-Horn", "Unifrac-unweighted", "Unifrac-weighted" ] cdmeasures = [(v, v) for v in distmeasures] if 'level' in self.fields: self.fields['level'].widget.choices += clevels self.initial['level'] = [ clevels[min(summary['maxlevel'] - 1, 3)][0] ] #self.fields[ 'level' ].widget.initial = [ clevels[ min( summary[ 'maxlevel' ], 3 ) ][1] ] for fieldname in ['dorder', 'volume']: if fieldname in self.fields: self.fields[fieldname].widget.choices += cvolumes for fieldname in ['dmethod']: if fieldname in self.fields: self.fields[fieldname].widget.choices += cdmeasures for fieldname in [ 'dfilter', 'color', 'shape', 'dgroup', 'order1', 'order2', 'labels', 'shisttag' ]: if fieldname in self.fields: self.fields[fieldname].widget.choices += ctags if fieldname in ['labels']: self.initial[fieldname] = ['name'] else: self.initial[fieldname] = ['none'] for fieldname in ['spfilter', 'spshow']: if fieldname in self.fields: self.initial[fieldname] = ['none'] self.fields[fieldname].widget.choices += ctaxfilters if 'samples' in self.fields: ctag = 'name' if len(args) > 0: post = args[0] if 'dgroup' in post: ctag = post['dgroup'] if ctag == 'none': ctag = 'name' snames = set(tags[ctag]) print(snames) self.fields['samples'].widget.choices = [(v, v) for v in snames] self.initial['dgroup'] = ['name']