コード例 #1
0
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))
コード例 #2
0
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))
コード例 #3
0
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))
コード例 #4
0
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))
コード例 #5
0
def job_name(job):
    summary = json.loads(controls.run_script("", job, "summary"))
    return summary['name']
コード例 #6
0
def run_script(form, job, script):
    return controls.run_script(format_params(form), job, script)
コード例 #7
0
    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']