diff roundup/backends/back_metakit.py @ 1596:33a0d94c7658

searching on ranges of intervals is implemented
author Andrey Lebedev <kedder@users.sourceforge.net>
date Sun, 20 Apr 2003 11:58:45 +0000
parents e2a8ce4d2317
children 8a908bbad1ef
line wrap: on
line diff
--- a/roundup/backends/back_metakit.py	Sat Apr 19 09:57:27 2003 +0000
+++ b/roundup/backends/back_metakit.py	Sun Apr 20 11:58:45 2003 +0000
@@ -1,4 +1,4 @@
-# $Id: back_metakit.py,v 1.45 2003-03-26 10:44:00 richard Exp $
+# $Id: back_metakit.py,v 1.46 2003-04-20 11:58:45 kedder Exp $
 '''
    Metakit backend for Roundup, originally by Gordon McMillan.
 
@@ -603,10 +603,11 @@
                 if value is None:
                     setattr(row, key, '')
                 else:
-                    setattr(row, key, str(value))
+                    # kedder: we should store interval values serialized
+                    setattr(row, key, value.serialise())
                 changes[key] = str(oldvalue)
                 propvalues[key] = str(value)
-                
+ 
             elif isinstance(prop, hyperdb.Number):
                 if value is None:
                     value = 0
@@ -963,6 +964,10 @@
                     if date_rng.from_value:
                         t = date_rng.from_value.get_tuple()
                         where[propname] = int(calendar.timegm(t))
+                    else:
+                        # use minimum possible value to exclude items without
+                        # 'prop' property
+                        where[propname] = 0
                     if date_rng.to_value:
                         t = date_rng.to_value.get_tuple()
                         wherehigh[propname] = int(calendar.timegm(t))
@@ -972,7 +977,24 @@
                     # If range creation fails - ignore that search parameter
                     pass                        
             elif isinstance(prop, hyperdb.Interval):
-                where[propname] = str(date.Interval(value))
+                try:
+                    # Try to filter on range of intervals
+                    date_rng = Range(value, date.Interval)
+                    if date_rng.from_value:
+                        #t = date_rng.from_value.get_tuple()
+                        where[propname] = date_rng.from_value.serialise()
+                    else:
+                        # use minimum possible value to exclude items without
+                        # 'prop' property
+                        where[propname] = '-99999999999999'
+                    if date_rng.to_value:
+                        #t = date_rng.to_value.get_tuple()
+                        wherehigh[propname] = date_rng.to_value.serialise()
+                    else:
+                        wherehigh[propname] = None
+                except ValueError:
+                    # If range creation fails - ignore that search parameter
+                    pass                        
             elif isinstance(prop, hyperdb.Number):
                 where[propname] = int(value)
             else:
@@ -1187,7 +1209,7 @@
             if isinstance(prop, hyperdb.Date):
                 value = int(calendar.timegm(value))
             elif isinstance(prop, hyperdb.Interval):
-                value = str(date.Interval(value))
+                value = date.Interval(value).serialise()
             elif isinstance(prop, hyperdb.Number):
                 value = int(value)
             elif isinstance(prop, hyperdb.Boolean):

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