Skip to content
Snippets Groups Projects
Commit b45237ef authored by Tanner Prestegard's avatar Tanner Prestegard Committed by GraceDB
Browse files

Bugfix for superevent queries by creation time

Fixing a bug in superevent queries by creation time:
using Combine on the expression resulted in incorrect args
being passed to construct a datetime object.
parent f3618edd
No related branches found
No related tags found
No related merge requests found
import datetime
import logging
import pytz
from django.db.models import Q from django.db.models import Q
from django.db.models.query import QuerySet from django.db.models.query import QuerySet
...@@ -8,14 +12,15 @@ from events.nltime import nlTimeExpression as nltime_ ...@@ -8,14 +12,15 @@ from events.nltime import nlTimeExpression as nltime_
from events.query_utils import maybeRange, getLabelQ, RUN_MAP from events.query_utils import maybeRange, getLabelQ, RUN_MAP
from .models import Superevent from .models import Superevent
import datetime
import pytz
from pyparsing import Word, nums, Literal, CaselessLiteral, delimitedList, \ from pyparsing import Word, nums, Literal, CaselessLiteral, delimitedList, \
Suppress, QuotedString, Keyword, Combine, Or, Optional, OneOrMore, \ Suppress, QuotedString, Keyword, Combine, Or, Optional, OneOrMore, \
ZeroOrMore, alphas, alphanums, Regex, opAssoc, operatorPrecedence, \ ZeroOrMore, alphas, alphanums, Regex, opAssoc, operatorPrecedence, \
oneOf, stringStart, stringEnd, FollowedBy, ParseResults, ParseException, \ oneOf, stringStart, stringEnd, FollowedBy, ParseResults, ParseException, \
CaselessKeyword CaselessKeyword
# Set up logger
logger = logging.getLogger(__name__)
# Function for parsing matched superevent ID tokens # Function for parsing matched superevent ID tokens
def parse_superevent_id(name, toks, filter_prefix=None): def parse_superevent_id(name, toks, filter_prefix=None):
# toks = matched superevent id # toks = matched superevent id
...@@ -127,12 +132,12 @@ parameter_dicts = { ...@@ -127,12 +132,12 @@ parameter_dicts = {
'keyword': 'created', 'keyword': 'created',
'keywordOptional': True, 'keywordOptional': True,
'doRange': True, 'doRange': True,
'value': Combine(Word(nums, exact=4) + Suppress('-') + \ 'value': (Word(nums, exact=4) + Suppress('-') + \
Word(nums, exact=2) + Suppress('-') + Word(nums, exact=2) + \ Word(nums, exact=2) + Suppress('-') + Word(nums, exact=2) + \
Optional(Word(nums, exact=2) + Suppress(':') + \ Optional(Word(nums, exact=2) + Suppress(':') + \
Word(nums, exact=2) + Optional(Suppress(':') + \ Word(nums, exact=2) + Optional(Suppress(':') + \
Word(nums, exact=2)))).setParseAction(lambda toks: Word(nums, exact=2)))).setParseAction(lambda toks:
pytz.utc.localize(datetime.datetime(*(map(int, toks))))), pytz.utc.localize(datetime.datetime(*map(int, toks)))),
'parseAction': maybeRange("created"), 'parseAction': maybeRange("created"),
}, },
# test OR category: test # test OR category: test
...@@ -148,6 +153,7 @@ parameter_dicts = { ...@@ -148,6 +153,7 @@ parameter_dicts = {
}, },
} }
# Compile a list of expressions to try to match # Compile a list of expressions to try to match
expr_list = [] expr_list = []
for k,p in parameter_dicts.iteritems(): for k,p in parameter_dicts.iteritems():
......
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