Mercurial > p > roundup > code
diff roundup/backends/back_anydbm.py @ 880:de3da99a7c02
Add Number and Boolean types to hyperdb.
Add conversion cases to web, mail & admin interfaces.
Add storage/serialization cases to back_anydbm & back_metakit.
| author | Gordon B. McMillan <gmcm@users.sourceforge.net> |
|---|---|
| date | Thu, 18 Jul 2002 11:17:31 +0000 |
| parents | 6d98bec4e52e |
| children | 816b593c755f |
line wrap: on
line diff
--- a/roundup/backends/back_anydbm.py Thu Jul 18 07:01:54 2002 +0000 +++ b/roundup/backends/back_anydbm.py Thu Jul 18 11:17:31 2002 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -#$Id: back_anydbm.py,v 1.47 2002-07-14 23:18:20 richard Exp $ +#$Id: back_anydbm.py,v 1.48 2002-07-18 11:17:31 gmcm Exp $ ''' This module defines a backend that saves the hyperdatabase in a database chosen by anydbm. It is guaranteed to always be available in python @@ -29,7 +29,7 @@ from roundup.indexer import Indexer from locking import acquire_lock, release_lock from roundup.hyperdb import String, Password, Date, Interval, Link, \ - Multilink, DatabaseError + Multilink, DatabaseError, Boolean, Number # # Now the database @@ -730,6 +730,18 @@ if value is not None and not isinstance(value, date.Interval): raise TypeError, 'new property "%s" not an Interval'%key + elif isinstance(prop, Number): + try: + int(value) + except TypeError: + raise TypeError, 'new property "%s" not numeric' % propname + + elif isinstance(prop, Boolean): + try: + int(value) + except TypeError: + raise TypeError, 'new property "%s" is not boolean' % propname + # make sure there's data where there needs to be for key, prop in self.properties.items(): if propvalues.has_key(key): @@ -1011,6 +1023,18 @@ 'Interval'%propname propvalues[propname] = value + elif value is not None and isinstance(prop, Number): + try: + int(value) + except TypeError: + raise TypeError, 'new property "%s" not numeric' % propname + + elif value is not None and isinstance(prop, Boolean): + try: + int(value) + except TypeError: + raise TypeError, 'new property "%s" not boolean' % propname + node[propname] = value # nothing to do? @@ -1291,6 +1315,14 @@ v = v.replace('?', '.') v = v.replace('*', '.*?') l.append((2, k, re.compile(v, re.I))) + elif isinstance(propclass, Boolean): + if type(v) is type(''): + bv = v.lower() in ('yes', 'true', 'on', '1') + else: + bv = v + l.append((6, k, bv)) + elif isinstance(propclass, Number): + l.append((6, k, int(v))) else: l.append((6, k, v)) filterspec = l @@ -1456,6 +1488,12 @@ elif dir == '-': r = cmp(len(bv), len(av)) if r != 0: return r + elif isinstance(propclass, Number) or isinstance(propclass, Boolean): + if dir == '+': + r = cmp(av, bv) + elif dir == '-': + r = cmp(bv, av) + # end for dir, prop in list: # end for list in sort, group: # if all else fails, compare the ids @@ -1638,6 +1676,10 @@ # #$Log: not supported by cvs2svn $ +#Revision 1.47 2002/07/14 23:18:20 richard +#. fixed the journal bloat from multilink changes - we just log the add or +# remove operations, not the whole list +# #Revision 1.46 2002/07/14 06:06:34 richard #Did some old TODOs #
