From 9d67b8bba9d0f6fd39f64881f6fb3593f4ce00ae Mon Sep 17 00:00:00 2001
From: Branson Stephens <branson.stephens@ligo.org>
Date: Fri, 26 Sep 2014 11:38:45 -0500
Subject: [PATCH] I think I fixed the query parser to use pipeline and search
 rather than analysisType, but I havent' fixed the documentation yet.

---
 gracedb/query.py | 40 +++++++++++++++++++++++++++-------------
 1 file changed, 27 insertions(+), 13 deletions(-)

diff --git a/gracedb/query.py b/gracedb/query.py
index 0ed83ae33..a73cfe91e 100644
--- a/gracedb/query.py
+++ b/gracedb/query.py
@@ -38,8 +38,8 @@ encodeType = dict(
     [(x[0],x[0]) for x in models.Event.ANALYSIS_TYPE_CHOICES]
     )
 
-def doType(toks):
-    return ("type", Q(analysisType__in=[encodeType[tok] for tok in toks]))
+#def doType(toks):
+#    return ("type", Q(analysisType__in=[encodeType[tok] for tok in toks]))
 
 def convertToGps(dateStr):
     return 12
@@ -90,15 +90,28 @@ groupList = OneOrMore(group).setName("analysis group list")
 groupQ = (Optional(Suppress(Keyword("group:"))) + groupList)
 groupQ = groupQ.setParseAction(lambda toks: ("group", Q(group__name__in=toks.asList())))
 
+# Pipeline
+pipelineNames = [pipeline.name for pipeline in models.Pipeline.objects.all()]
+pipeline = Or(map(CaselessLiteral, pipelineNames)).setName("pipeline name")
+pipelineList = OneOrMore(pipeline).setName("pipeline list")
+pipelineQ = (Optional(Suppress(Keyword("pipeline:"))) + pipelineList)
+pipelineQ = pipelineQ.setParseAction(lambda toks: ("pipeline", Q(pipeline__name__in=toks.asList())))
+
+# Search
+searchNames = [search.name for search in models.Search.objects.all()]
+search = Or(map(CaselessLiteral, searchNames)).setName("search name")
+searchList = OneOrMore(search).setName("search list")
+searchQ = (Optional(Suppress(Keyword("search:"))) + searchList)
+searchQ = searchQ.setParseAction(lambda toks: ("search", Q(search__name__in=toks.asList())))
 
 # Analysis Types
-atypeNames = encodeType.keys()
-atype = Or(map(CaselessLiteral, atypeNames))
-atypeList = delimitedList(atype, delim='|').\
-            setName("analylsis type list").\
-            setResultsName("atypes")
-atypeQ = (Optional(Suppress(Keyword("type:"))) + atypeList).\
-            setParseAction(doType)
+#atypeNames = encodeType.keys()
+#atype = Or(map(CaselessLiteral, atypeNames))
+#atypeList = delimitedList(atype, delim='|').\
+#            setName("analylsis type list").\
+#            setResultsName("atypes")
+#atypeQ = (Optional(Suppress(Keyword("type:"))) + atypeList).\
+#            setParseAction(doType)
 
 # Gracedb ID
 gid = Suppress("G")+Word("0123456789")
@@ -243,7 +256,8 @@ ifoQ = ifoListQ | nifoQ
 
 ###########################
 
-q = (ifoQ | hasfarQ | gidQ | hidQ | tidQ | eidQ | labelQ | atypeQ | groupQ | gpsQ | createdQ | submitterQ | runQ | attributeQ).setName("query term")
+#q = (ifoQ | hasfarQ | gidQ | hidQ | tidQ | eidQ | labelQ | atypeQ | groupQ | gpsQ | createdQ | submitterQ | runQ | attributeQ).setName("query term")
+q = (ifoQ | hasfarQ | gidQ | hidQ | tidQ | eidQ | labelQ | searchQ | pipelineQ | groupQ | gpsQ | createdQ | submitterQ | runQ | attributeQ).setName("query term")
 
 #andTheseTags = ["attr"]
 andTheseTags = ["nevents"]
@@ -267,11 +281,11 @@ def parseQuery(s):
     if "tid" in d:
         d["tid"] = d["tid"] & Q(group__name="Test")
     if "hid" in d:
-        d["hid"] = d["hid"] & Q(analysisType="HWINJ")
+        d["hid"] = d["hid"] & Q(pipeline="HardwareInjection")
     if "eid" in d:
-        d["eid"] = d["eid"] & Q(analysisType="GRB")
+        d["eid"] = d["eid"] & Q(group__name="External")
     if "id" in d:
-        d["id"] = d["id"] & ~Q(analysisType="HWINJ") & ~Q(analysisType="GRB")
+        d["id"] = d["id"] & ~Q(pipeline="HardwareInjection") & ~Q(group__name="External")
     if "id" in d and "hid" in d:
         d["id"] = d["id"] | d["hid"]
         del d["hid"]
-- 
GitLab