From 2444fcc4562895ae8f469053cc9cff512e33f715 Mon Sep 17 00:00:00 2001
From: Tanner Prestegard <tanner.prestegard@ligo.org>
Date: Fri, 2 Nov 2018 15:34:37 -0500
Subject: [PATCH] Add queries by public/exposed status for superevents

Allow queries on whether a superevent is publicly available or
not. Add documentation to the query help page.
---
 gracedb/superevents/query.py                  | 18 +++++++++++++++++-
 gracedb/templates/search/query_help_frag.html | 10 ++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/gracedb/superevents/query.py b/gracedb/superevents/query.py
index d42bee32f..62fdb4c2c 100644
--- a/gracedb/superevents/query.py
+++ b/gracedb/superevents/query.py
@@ -21,6 +21,7 @@ from pyparsing import Word, nums, Literal, CaselessLiteral, delimitedList, \
 # Set up logger
 logger = logging.getLogger(__name__)
 
+
 # Function for parsing matched superevent ID tokens
 def parse_superevent_id(name, toks, filter_prefix=None):
     # toks = matched superevent id
@@ -119,6 +120,22 @@ parameter_dicts = {
         'value': Or([CaselessLiteral(b) for b in ['true', 'false']]),
         'parseAction': lambda toks: ("is_gw", Q(is_gw=(toks[0] == "true"))),
     },
+    # is_public: true|false OR is_exposed: true|false
+    'is_public': {
+        'keyword': ['is_public', 'is_exposed'],
+        'keywordOptional': False,
+        'value': Or([CaselessLiteral(b) for b in ['true', 'false']]),
+        'parseAction': lambda toks: ("is_exposed",
+            Q(is_exposed=(toks[0] == "true"))),
+    },
+    # status: internal|public OR internal|public
+    'public': {
+        'keyword': 'status',
+        'keywordOptional': True,
+        'value': Or([CaselessLiteral(b) for b in ['public', 'internal']]),
+        'parseAction': lambda toks: ("is_exposed",
+            Q(is_exposed=(toks[0] == "public"))),
+    },
     # created: yesterday .. now (uses events.nltime.nltimeExpression)
     'created_nl': {
         'keyword': 'created',
@@ -153,7 +170,6 @@ parameter_dicts = {
     },
 }
 
-
 # Compile a list of expressions to try to match
 expr_list = []
 for k,p in parameter_dicts.iteritems():
diff --git a/gracedb/templates/search/query_help_frag.html b/gracedb/templates/search/query_help_frag.html
index 9e4477a64..e9e135197 100644
--- a/gracedb/templates/search/query_help_frag.html
+++ b/gracedb/templates/search/query_help_frag.html
@@ -151,4 +151,14 @@
 
  <h4>By label</h4>
   Same as for events.
+
+ <h4>By public status</h4>
+ Use the <code>is_public:</code> or <code>is_exposed:</code> keywords:
+ <ul>
+   <li>is_public: True</li>
+   <li>is_exposed: True</li>
+ </ul>
+ Or, just add either "public" or "internal" to your query.
+
+
 </div>
-- 
GitLab