From 7772f47773c4b6ae23873364582fe9419523a152 Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Thu, 29 Sep 2022 19:15:50 +0300 Subject: [PATCH] Support datetime ranges in field queries --- apiserver/database/model/base.py | 33 ++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/apiserver/database/model/base.py b/apiserver/database/model/base.py index 74d9ecb..71cbaf8 100644 --- a/apiserver/database/model/base.py +++ b/apiserver/database/model/base.py @@ -368,18 +368,27 @@ class GetMixin(PropsMixin): if data is not None: if not isinstance(data, list): data = [data] - for d in data: # type: str - m = ACCESS_REGEX.match(d) - if not m: - continue - try: - value = parse_datetime(m.group("value")) - prefix = m.group("prefix") - modifier = ACCESS_MODIFIER.get(prefix) - f = field if not modifier else "__".join((field, modifier)) - dict_query[f] = value - except (ValueError, OverflowError): - pass + # date time fields also support simplified range queries. Check if this is the case + if len(data) == 2 and not any( + d.startswith(mod) + for d in data + if d is not None + for mod in ACCESS_MODIFIER + ): + query &= cls.get_range_field_query(field, data) + else: + for d in data: # type: str + m = ACCESS_REGEX.match(d) + if not m: + continue + try: + value = parse_datetime(m.group("value")) + prefix = m.group("prefix") + modifier = ACCESS_MODIFIER.get(prefix) + f = field if not modifier else "__".join((field, modifier)) + dict_query[f] = value + except (ValueError, OverflowError): + pass for field, value in parameters.items(): for keys, func in cls._multi_field_param_prefix.items():