diff --git a/gracedb/events/query.py b/gracedb/events/query.py index 384770dcfffd19b9a3ca225e60bf5e38f6ece2af..7bccc9ca50f5c95da2b4f7d42e86266367fc7ea0 100644 --- a/gracedb/events/query.py +++ b/gracedb/events/query.py @@ -16,6 +16,7 @@ from .nltime import nlTimeExpression as nltime_ nltime = nltime_.setParseAction(lambda toks: toks["calculatedTime"]) from .models import Group, Pipeline, Search, Label from .query_utils import maybeRange, getLabelQ, RUN_MAP +from superevents.query import parse_superevent_id, superevent_expr #import time, datetime import datetime @@ -238,6 +239,25 @@ nifoQ.setParseAction(lambda toks: ("nevents", Q(nevents=toks[0]))) ifoQ = ifoListQ | nifoQ +# Superevent queries --------------------------------------------------------- + +# Event is part of a superevent? +t_or_f = Or([CaselessLiteral(b) for b in ['true', 'false']]) +inSupereventQ = Suppress(Keyword("in_superevent:")) + t_or_f +inSupereventQ = inSupereventQ.setParseAction(lambda toks: ("in_superevent", + Q(superevent__isnull=(toks[0] == "false")))) + +# Event is preferred for some superevent? +isPreferredEventQ = Suppress(Keyword("is_preferred_event:")) + t_or_f +isPreferredEventQ = isPreferredEventQ.setParseAction(lambda toks: + ("is_preferred_event", Q(superevent_preferred_for__isnull= + (toks[0] == "false")))) + +# Event is part of a specific superevent? +supereventQ = Suppress(Keyword("superevent:")) + superevent_expr +supereventQ.setParseAction(lambda toks: parse_superevent_id( + "superevent", toks, filter_prefix="superevent")) + ########################### #andTheseTags = ["attr"] @@ -292,6 +312,7 @@ def parseQuery(s): # A parser for the non-label-related remainder of the query string. q = (ifoQ | hasfarQ | gidQ | hidQ | tidQ | eidQ | midQ | searchQ | pipelineQ | groupQ | gpsQ | createdQ | submitterQ | runQ + | inSupereventQ | supereventQ | isPreferredEventQ | attributeQ ).setName("query term")