changeset 3668:a15c15510e99

hyperdb handling of empty raw values for Multilink and Password [SF#1507814]
author Richard Jones <richard@users.sourceforge.net>
date Fri, 11 Aug 2006 04:50:24 +0000
parents 35811df7c783
children 07d1d8e22271
files CHANGES.txt roundup/hyperdb.py test/test_hyperdbvals.py
diffstat 3 files changed, 21 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES.txt	Fri Aug 11 01:41:25 2006 +0000
+++ b/CHANGES.txt	Fri Aug 11 04:50:24 2006 +0000
@@ -28,6 +28,8 @@
 - dumb bug in cgi templating utils (sf bug 1490176)
 - handle unicode in query names (sf bug 1495702)
 - fix error during mailgw bouncing message (sf bug 1413501)
+- hyperdb handling of empty raw values for Multilink and Password (sf bug
+  1507814)
 
 
 2006-04-27 1.1.2
--- a/roundup/hyperdb.py	Fri Aug 11 01:41:25 2006 +0000
+++ b/roundup/hyperdb.py	Fri Aug 11 04:50:24 2006 +0000
@@ -15,7 +15,7 @@
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 #
-# $Id: hyperdb.py,v 1.122 2006-07-13 10:14:56 schlatterbeck Exp $
+# $Id: hyperdb.py,v 1.123 2006-08-11 04:50:24 richard Exp $
 
 """Hyperdatabase implementation, especially field types.
 """
@@ -48,6 +48,8 @@
         ' more useful for dumps '
         return '<%s>'%self.__class__
     def from_raw(self, value, **kw):
+        if not value:
+            return None
         m = password.Password.pwre.match(value)
         if m:
             # password is being given to us encrypted
@@ -136,6 +138,9 @@
         ' more useful for dumps '
         return '<%s to "%s">'%(self.__class__, self.classname)
     def from_raw(self, value, db, klass, propname, itemid, **kw):
+        if not value:
+            return []
+
         # get the current item value if it's not a new item
         if itemid and not itemid.startswith('-'):
             curvalue = klass.get(itemid, propname)
@@ -905,15 +910,11 @@
     # if we got a string, strip it now
     if isinstance(value, type('')):
         value = value.strip()
+
     # convert the input value to a real property value
-    value = proptype.from_raw \
-        ( value
-        , db = db
-        , klass = klass
-        , propname = propname
-        , itemid = itemid
-        , **kw
-        )
+    value = proptype.from_raw(value, db=db, klass=klass,
+        propname=propname, itemid=itemid, **kw)
+
     return value
 
 class FileClass:
--- a/test/test_hyperdbvals.py	Fri Aug 11 01:41:25 2006 +0000
+++ b/test/test_hyperdbvals.py	Fri Aug 11 04:50:24 2006 +0000
@@ -8,7 +8,7 @@
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 #
-# $Id: test_hyperdbvals.py,v 1.1 2003-11-11 00:35:14 richard Exp $
+# $Id: test_hyperdbvals.py,v 1.2 2006-08-11 04:50:24 richard Exp $
 
 import unittest, os, shutil, errno, sys, difflib, cgi, re, sha
 
@@ -59,16 +59,20 @@
         return hyperdb.rawToHyperdb(TestDatabase(), TestClass(), itemid,
             propname, value)
     def testString(self):
+        self.assertEqual(self._test('password', ''), None)
         self.assertEqual(self._test('string', '  a string '), 'a string')
     def testNumber(self):
+        self.assertEqual(self._test('password', ''), None)
         self.assertEqual(self._test('number', '  10 '), 10)
         self.assertEqual(self._test('number', '  1.5 '), 1.5)
     def testBoolean(self):
+        self.assertEqual(self._test('password', ''), None)
         for true in 'yes true on 1'.split():
             self.assertEqual(self._test('boolean', '  %s '%true), 1)
         for false in 'no false off 0'.split():
             self.assertEqual(self._test('boolean', '  %s '%false), 0)
     def testPassword(self):
+        self.assertEqual(self._test('password', ''), None)
         self.assertEqual(self._test('password', '  a string '), 'a string')
         val = self._test('password', '  a string ')
         self.assert_(isinstance(val, password.Password))
@@ -83,6 +87,7 @@
         self.assertRaises(hyperdb.HyperdbValueError, self._test,
             'password', '{fubar}a string')
     def testDate(self):
+        self.assertEqual(self._test('password', ''), None)
         val = self._test('date', ' 2003-01-01  ')
         self.assert_(isinstance(val, date.Date))
         val = self._test('date', ' 2003/01/01  ')
@@ -94,16 +99,19 @@
         self.assertRaises(hyperdb.HyperdbValueError, self._test, 'date',
             'fubar')
     def testInterval(self):
+        self.assertEqual(self._test('password', ''), None)
         val = self._test('interval', ' +1d  ')
         self.assert_(isinstance(val, date.Interval))
         self.assertRaises(hyperdb.HyperdbValueError, self._test, 'interval',
             'fubar')
     def testLink(self):
+        self.assertEqual(self._test('password', ''), None)
         self.assertEqual(self._test('link', '1'), '1')
         self.assertEqual(self._test('link', 'valid'), '1')
         self.assertRaises(hyperdb.HyperdbValueError, self._test, 'link',
             'invalid')
     def testMultilink(self):
+        self.assertEqual(self._test('password', ''), [])
         self.assertEqual(self._test('multilink', '', '1'), [])
         self.assertEqual(self._test('multilink', '1', '1'), ['1'])
         self.assertEqual(self._test('multilink', 'valid', '1'), ['1'])

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