Skip to content

Commit 52a2776

Browse files
author
Richard Jones
committed
hyperdb handling of empty raw values for Multilink and Password [SF#1507814]
1 parent a07c999 commit 52a2776

File tree

3 files changed

+21
-10
lines changed

3 files changed

+21
-10
lines changed

CHANGES.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ Fixed:
2828
- dumb bug in cgi templating utils (sf bug 1490176)
2929
- handle unicode in query names (sf bug 1495702)
3030
- fix error during mailgw bouncing message (sf bug 1413501)
31+
- hyperdb handling of empty raw values for Multilink and Password (sf bug
32+
1507814)
3133

3234

3335
2006-04-27 1.1.2

roundup/hyperdb.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
1616
# SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1717
#
18-
# $Id: hyperdb.py,v 1.122 2006-07-13 10:14:56 schlatterbeck Exp $
18+
# $Id: hyperdb.py,v 1.123 2006-08-11 04:50:24 richard Exp $
1919

2020
"""Hyperdatabase implementation, especially field types.
2121
"""
@@ -48,6 +48,8 @@ def __repr__(self):
4848
' more useful for dumps '
4949
return '<%s>'%self.__class__
5050
def from_raw(self, value, **kw):
51+
if not value:
52+
return None
5153
m = password.Password.pwre.match(value)
5254
if m:
5355
# password is being given to us encrypted
@@ -136,6 +138,9 @@ def __repr__(self):
136138
' more useful for dumps '
137139
return '<%s to "%s">'%(self.__class__, self.classname)
138140
def from_raw(self, value, db, klass, propname, itemid, **kw):
141+
if not value:
142+
return []
143+
139144
# get the current item value if it's not a new item
140145
if itemid and not itemid.startswith('-'):
141146
curvalue = klass.get(itemid, propname)
@@ -905,15 +910,11 @@ def rawToHyperdb(db, klass, itemid, propname, value, **kw):
905910
# if we got a string, strip it now
906911
if isinstance(value, type('')):
907912
value = value.strip()
913+
908914
# convert the input value to a real property value
909-
value = proptype.from_raw \
910-
( value
911-
, db = db
912-
, klass = klass
913-
, propname = propname
914-
, itemid = itemid
915-
, **kw
916-
)
915+
value = proptype.from_raw(value, db=db, klass=klass,
916+
propname=propname, itemid=itemid, **kw)
917+
917918
return value
918919

919920
class FileClass:

test/test_hyperdbvals.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# but WITHOUT ANY WARRANTY; without even the implied warranty of
99
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1010
#
11-
# $Id: test_hyperdbvals.py,v 1.1 2003-11-11 00:35:14 richard Exp $
11+
# $Id: test_hyperdbvals.py,v 1.2 2006-08-11 04:50:24 richard Exp $
1212

1313
import unittest, os, shutil, errno, sys, difflib, cgi, re, sha
1414

@@ -59,16 +59,20 @@ def _test(self, propname, value, itemid=None):
5959
return hyperdb.rawToHyperdb(TestDatabase(), TestClass(), itemid,
6060
propname, value)
6161
def testString(self):
62+
self.assertEqual(self._test('password', ''), None)
6263
self.assertEqual(self._test('string', ' a string '), 'a string')
6364
def testNumber(self):
65+
self.assertEqual(self._test('password', ''), None)
6466
self.assertEqual(self._test('number', ' 10 '), 10)
6567
self.assertEqual(self._test('number', ' 1.5 '), 1.5)
6668
def testBoolean(self):
69+
self.assertEqual(self._test('password', ''), None)
6770
for true in 'yes true on 1'.split():
6871
self.assertEqual(self._test('boolean', ' %s '%true), 1)
6972
for false in 'no false off 0'.split():
7073
self.assertEqual(self._test('boolean', ' %s '%false), 0)
7174
def testPassword(self):
75+
self.assertEqual(self._test('password', ''), None)
7276
self.assertEqual(self._test('password', ' a string '), 'a string')
7377
val = self._test('password', ' a string ')
7478
self.assert_(isinstance(val, password.Password))
@@ -83,6 +87,7 @@ def testPassword(self):
8387
self.assertRaises(hyperdb.HyperdbValueError, self._test,
8488
'password', '{fubar}a string')
8589
def testDate(self):
90+
self.assertEqual(self._test('password', ''), None)
8691
val = self._test('date', ' 2003-01-01 ')
8792
self.assert_(isinstance(val, date.Date))
8893
val = self._test('date', ' 2003/01/01 ')
@@ -94,16 +99,19 @@ def testDate(self):
9499
self.assertRaises(hyperdb.HyperdbValueError, self._test, 'date',
95100
'fubar')
96101
def testInterval(self):
102+
self.assertEqual(self._test('password', ''), None)
97103
val = self._test('interval', ' +1d ')
98104
self.assert_(isinstance(val, date.Interval))
99105
self.assertRaises(hyperdb.HyperdbValueError, self._test, 'interval',
100106
'fubar')
101107
def testLink(self):
108+
self.assertEqual(self._test('password', ''), None)
102109
self.assertEqual(self._test('link', '1'), '1')
103110
self.assertEqual(self._test('link', 'valid'), '1')
104111
self.assertRaises(hyperdb.HyperdbValueError, self._test, 'link',
105112
'invalid')
106113
def testMultilink(self):
114+
self.assertEqual(self._test('password', ''), [])
107115
self.assertEqual(self._test('multilink', '', '1'), [])
108116
self.assertEqual(self._test('multilink', '1', '1'), ['1'])
109117
self.assertEqual(self._test('multilink', 'valid', '1'), ['1'])

0 commit comments

Comments
 (0)