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:

Roundup Issue Tracker: http://roundup-tracker.org/