Mercurial > p > roundup > code
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'])
