Mercurial > p > roundup > code
diff roundup/backends/back_anydbm.py @ 6118:e6073c2291c6
Better Date filtering
Allow filtering by multiple date ranges or empty date.
Date ranges are separated by comma, an empty date is represented by '-'.
| author | Ralf Schlatterbeck <rsc@runtux.com> |
|---|---|
| date | Mon, 02 Mar 2020 19:02:16 +0100 |
| parents | 3175bb92ca28 |
| children | 8497bf3f23a1 |
line wrap: on
line diff
--- a/roundup/backends/back_anydbm.py Sat Feb 29 12:30:42 2020 -0500 +++ b/roundup/backends/back_anydbm.py Mon Mar 02 19:02:16 2020 +0100 @@ -1764,8 +1764,14 @@ l.append((STRING, k, re.compile(x, re.I))) elif isinstance(propclass, hyperdb.Date): try: - date_rng = propclass.range_from_raw(v, self.db) - l.append((DATE, k, date_rng)) + ranges = [] + for d in v.split(','): + if d == '-': + ranges.append(None) + continue + date_rng = propclass.range_from_raw(d, self.db) + ranges.append(date_rng) + l.append((DATE, k, ranges)) except ValueError: # If range creation fails - ignore that search parameter pass @@ -1862,7 +1868,22 @@ else: # RE search match = v.search(nv) - elif t == DATE or t == INTERVAL: + elif t == DATE: + for x in v: + if x is None or nv is None: + if nv is None and x is None: + match = 1 + break + continue + elif x.to_value: + if x.from_value <= nv <= x.to_value: + match = 1 + break + else: + if x.from_value <= nv: + match = 1 + break + elif t == INTERVAL: if nv is None: match = v is None else:
