Ejemplo n.º 1
0
def abstracts(request):
    """Return a list of abstracts (as HTML wrapped in JSON) for a keyword
    query and list of genes."""

    # get species, default=human
    try:
        species = int(request.GET['species'])
    except (KeyError, ValueError):
        species = 9606
    
    # get gene operator (any (or) / all (and))
    try:
        geneop = request.GET['geneop'].lower()
        if geneop == 'all':
            implicitOr = False
        else:
            geneop = 'any'
            implicitOr = True
    except KeyError:
        geneop = 'any'
        implicitOr = True

    # figure out if we should include homologs
    try:
        usehomologs = parseboolean(request.GET['usehomologs'])
    except (KeyError, ValueError):
        usehomologs = False  
        
    # get keyword arguments from query string
    keywords = request.GET.get('q')

    # get genes from query string
    try:
        if parseboolean(request.GET.get('usegenefile')):
            # look up genes from file if we're using one
            genefileID = request.GET.get('genefileID', -1)
            genes = genefile_lookup(genefileID, implicitOr, usehomologs)
        elif request.GET.get('genes'):
            gene_query = request.GET.get('genes')
            genes = parse_gene_abstractquery(gene_query, species, implicitOr, usehomologs)
        else:
            genes = NullQuery

        if request.GET.get('rowgene'):
            genes = addgene(genes, request.GET.get('rowgene'), species, usehomologs)

        # apply gene filter
        if request.GET.get('genefilter'):
            genes = addgene(genes, request.GET.get('genefilter'), species, usehomologs)

    except LookupError as e:
        # bad gene query
        response = HttpResponse()
        json.dump({'validresult': False, 'errmsg': 'Bad gene query.  Check your gene symbols: {0}.'.format(e.args[0])}, response)
        return response
    except BadGenefileError:
        response = HttpResponse()
        json.dump({'validresult': False, 'errmsg': "Can't find this gene file!  It probably expired.  Please upload it again."})
        return response

    # should we only include reviews?
    try:
        onlyreviews = parseboolean(request.GET['onlyreviews'])
    except (KeyError, ValueError):
        onlyreviews = False
    
    # error if no query
    if not keywords and not genes:
        response = HttpResponse()
        json.dump({'validresult': False, 'errmsg': 'You must supply either genes or a query'}, response)
        return response
    
    # get sorting parameter
    orderby = request.GET.get('orderby')
    if orderby: orderby = orderby.lower()
    if orderby not in (None, 'relevance', 'oldest', 'newest'):
        response = HttpResponse()
        json.dump({'validresult': False, 'errmsg': 'Invalid "orderby."  Valid options are None, "relevance", "oldest", or "newest".'}, response)
        return response
    
    # get limit and offset
    try: offset = int(request.GET.get('offset'))
    except: offset = 0
    try: limit = int(request.GET.get('limit'))
    except: limit = None
    
    # get keyword ID from query string
    keywordID = request.GET.get('keywordnum')
    if keywordID:
        keyword_abstracts = [a.pubmed_id for a in Abstract.objects.filter(ka_abstract__keyphrase=keywordID).only('pubmed_id')]
    else:
        keyword_abstracts = None
        
        
    # get optional metabolite ID
    metabolite = request.GET.get('metabolite')
    
    
    # get abstract ID's from index
    abstracts = abstracts_page(keywords, genes, usehomologs, limit, offset, orderby, onlyreviews, keyword_abstracts, metabolite)
    
    # error if no abstracts
    if not abstracts:
        response = HttpResponse()
        json.dump({'validresult': False, 'errmsg': 'No more abstracts!'}, response)
        return response
    
    # create response
    resulthtml = render_to_string('abstracts.html', {'abstracts': abstracts})
    response = HttpResponse()
    json.dump({'validresult': True, 'result': resulthtml}, response)
    return response
Ejemplo n.º 2
0
def abstractview(request):
    """Render the container page for displaying abstracts"""
    q = request.GET.get('q')
    species = request.GET.get('species')
    genes = request.GET.get('genes')
    genesyms = request.GET.get('genesyms')
    geneop = request.GET.get('geneop')
    usehomologs = request.GET.get('usehomologs')
    onlyreviews = request.GET.get('onlyreviews')
    orderby = request.GET.get('orderby')
    offset = request.GET.get('offset')
    unique = request.GET.get('unique')
    abstractcount = request.GET.get('abstractcount')
    rowgene = request.GET.get('rowgene')
    keywordnum = request.GET.get('keywordnum')
    genefilter = request.GET.get('genefilter')
    usegenefile = request.GET.get('usegenefile')
    genefileID = request.GET.get('genefileID')
    metabolite = request.GET.get('metabolite')


    # clean up gene symbols
    if genesyms:
        genesyms = ', '.join(set([s.strip() for s in genesyms.split(',') if s]))

    if orderby:
        orderby = orderby.lower()
    
    # turn onlyreviews into a boolean
    if onlyreviews:
        onlyreviews = parseboolean(onlyreviews)
        
    if usegenefile:
        usegenefile = parseboolean(usegenefile)

    # look up keyword string
    if keywordnum:
        keywordstring = KeyPhrase.objects.get(pk=keywordnum).string
    else:
        keywordstring = None

    # get gene list (from gene query)
    # only if this is a keyword search (for now)
    if keywordnum and genes:
        gene_symbol_list = filter_genes(gene_id_list(genes, species), keywordnum=keywordnum)
        
        if genefilter not in gene_symbol_list:
            genefilter = None # show gene filter option, but with none selected
    else:
        genefilter = None
        gene_symbol_list = []
        
        
    # look up metabolite
    if metabolite:
        metabolite_name = lookup_metabolitename(metabolite)
    else:
        metabolite_name = None
        

    return render_to_response('abstractview.html', {'q':q,
        'species':species, 'genes':genes, 'genesyms': genesyms, 'geneop': geneop,
        'usehomologs':usehomologs, 'onlyreviews':onlyreviews, 
        'orderby':orderby, 'offset':offset,
        'unique':unique, 'abstractcount':abstractcount, 'rowgene':rowgene,
        'keywordnum': keywordnum, 'keywordstring': keywordstring,
        'gene_symbol_list': gene_symbol_list, 
        'usegenefile': usegenefile, 'genefileID': genefileID,
        'metabolite_id': metabolite, 'metabolite_name': metabolite_name
        })