Skip to content
Snippets Groups Projects
Commit f88ef849 authored by Brian Moe's avatar Brian Moe
Browse files

Query mods -- especially guided query.

Guided query
    - results now display equivalent text query, if possible
    - results now include number of events listed
    - initially hidden, becomes visible on click
Some display fiddling
    - hints and current query link more visible, less ugly (imho)
    - stuff lines up better
parent 4a190f60
No related branches found
No related tags found
No related merge requests found
......@@ -112,6 +112,13 @@ class Event(models.Model):
gps_time = int(posixToGpsTime(posix_time))
return gps_time - self.gpstime
@classmethod
def getTypeLabel(cls, code):
for key, label in cls.ANALYSIS_TYPE_CHOICES:
if (key == code) or (code == label):
return label
raise KeyError("Unknown analysis type code: %s" % code)
@classmethod
def getByGraceid(cls, id):
if id[0] not in "GH":
......
......@@ -122,7 +122,8 @@ labelQ_ = operatorPrecedence(label,
(andop, 2, opAssoc.LEFT, lambda a,b,toks: reduce(Q.__and__, toks[0].asList(), Q())),
]).setParseAction(lambda toks: toks[0])
labelQ = labelQ_.copy().setParseAction(lambda toks: ("label", toks[0]))
labelQ = (Optional(Suppress(Keyword("label:"))) + labelQ_.copy())
labelQ.setParseAction(lambda toks: ("label", toks[0]))
q = (gidQ | hidQ | atypeQ | groupQ | labelQ | createdQ | gpsQ).setName("query term")
......
......@@ -450,6 +450,8 @@ def oldsearch(request):
gpsStart = form.cleaned_data['gpsStart']
gpsEnd = form.cleaned_data['gpsEnd']
textQuery = []
if not groupname:
# don't show test events unless explicitly requested
# Scales? Or should we find test group and do group= ?
......@@ -474,30 +476,54 @@ def oldsearch(request):
objects = objects.filter(id__lte=int(end[1:]))
objects = objects.filter(uid="")
if start and end:
textQuery.append("gid: %s..%s" % (start, end))
if gpsStart != None or gpsEnd != None :
if gpsStart == gpsEnd:
objects = objects.filter(gpstime=gpsStart)
textQuery.append("gpstime: %s" % gpsStart)
else:
if gpsStart != None:
objects = objects.filter(gpstime__gte=gpsStart)
if gpsEnd != None:
objects = objects.filter(gpstime__lte=gpsEnd)
if gpsStart and gpsEnd:
textQuery.append("gpstime: %s .. %s" % (gpsStart, gpsEnd))
elif gpsStart:
textQuery.append("gpstime: %s..2000000000" % gpsStart)
else:
textQuery.append("gpstime: 0..%s" % gpsEnd)
if submitter:
objects = objects.filter(submitter=submitter)
if groupname:
group = Group.objects.filter(name=groupname)[0]
objects = objects.filter(group=group)
textQuery.append("group: %s" % group.name)
if typename:
objects = objects.filter(analysisType=typename)
textQuery.append("type: %s" % Event.getTypeLabel(typename))
if labels:
objects = objects.filter(labels__in=labels)
textQuery.append("label: %s" % " ".join([
Label.objects.filter(id=l)[0].name for l in labels]))
# Need this because events with multiple labels can appear multiple times!
objects = objects.distinct()
return object_list(request, objects, extra_context={'title':"Query Results"})
extra_context = {'title':"Query Results. %s event(s)" % objects.count()}
if not submitter and (not (start or end) or (start and end)):
# ugh. there is no submitter option in text query
# Also, text query needs both ends of a graceid search
# Sooo.... set up a simple search form...
textQuery = " ".join(textQuery)
extra_context['queryLink'] = reverse(search)+"?query="+escape(textQuery)
simple_form = SimpleSearchForm({'query': textQuery})
extra_context['form'] = simple_form
return object_list(request, objects, extra_context=extra_context)
return render_to_response('gracedb/query.html',
......
......@@ -23,11 +23,24 @@
{% block content %}
<p>{{ message }}</p>
{% for field in form %}
{% endfor %}
{% if form %}
<form action="{{ formAction }}"method="POST">
{{ form.as_table }} <a href="{{queryLink}}">Link</a>
<table>
{{ form.as_table }}
<tr><td/>
<td>
<a onClick="toggle_visibility('hints');">Hints on querying</a>
{% if queryLink %}
| <a href="{{queryLink}}">Link to current query</a>
{% endif %}
</td>
</tr>
<tr><td/><td>{% include "gracedb/query_help_frag.html" %}</td></tr>
</table>
</form>
{% include "gracedb/query_help_frag.html" %}
{% endif %}
{% if object_list.count %}
......
......@@ -23,19 +23,17 @@
<form method="POST">
<table>
{{ form.as_table }}
<tr><td></td><td><input type="Submit"/></td></tr>
<tr><td></td>
<td>{% include "gracedb/query_help_frag.html" %}</td>
<tr><td/><td><a onClick="toggle_visibility('hints');">Hints on querying</a></td>
</tr>
<tr><td/><td>{% include "gracedb/query_help_frag.html" %}</td></tr>
</table>
</form>
<!-- Old style Query -->
{% if form2 %}
<hr/>
<h4>Simple Query</h4>
<div id="hiddenqueryform" class=hideableForm>
<a><h3 onClick="toggle_visibility('hiddenqueryform');">Guided Query</h3></a>
<div id="hiddenqueryform" style="display: none;">
<form method="POST">
<table>
{{ form2.as_table }}
......
<a onClick="toggle_visibility('hints');">Hints on querying:</a>
<div id="hints" style="display: none;">
<h5>By GPS Time</h5>
Specifiy an exact GPS time, or a range.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment