Skip to content

Commit 14f5a69

Browse files
author
Ralf Schlatterbeck
committed
- unify bool searching (filter method) across backends
1 parent dc809b0 commit 14f5a69

File tree

3 files changed

+52
-5
lines changed

3 files changed

+52
-5
lines changed

roundup/backends/back_anydbm.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1630,12 +1630,14 @@ def _filter(self, search_matches, filterspec, proptree,
16301630
pass
16311631

16321632
elif isinstance(propclass, hyperdb.Boolean):
1633-
if type(v) != type([]):
1633+
if type(v) == type(""):
16341634
v = v.split(',')
1635+
if type(v) != type([]):
1636+
v = [v]
16351637
bv = []
16361638
for val in v:
16371639
if type(val) is type(''):
1638-
bv.append(val.lower() in ('yes', 'true', 'on', '1'))
1640+
bv.append(propclass.from_raw (val))
16391641
else:
16401642
bv.append(val)
16411643
l.append((OTHER, k, bv))

roundup/backends/rdbms_common.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2330,6 +2330,24 @@ def filter(self, search_matches, filterspec, sort=[], group=[]):
23302330
pass
23312331
if p.sort_type > 0:
23322332
oc = ac = '_%s.__%s_int__'%(pln,k)
2333+
elif isinstance(propclass, Boolean) and p.sort_type < 2:
2334+
if type(v) == type(""):
2335+
v = v.split(',')
2336+
if type(v) != type([]):
2337+
v = [v]
2338+
bv = []
2339+
for val in v:
2340+
if type(val) is type(''):
2341+
bv.append(propclass.from_raw (val))
2342+
else:
2343+
bv.append(bool(val))
2344+
if len(bv) == 1:
2345+
where.append('_%s._%s=%s'%(pln, k, a))
2346+
args = args + bv
2347+
else:
2348+
s = ','.join([a for x in v])
2349+
where.append('_%s._%s in (%s)'%(pln, k, s))
2350+
args = args + bv
23332351
elif p.sort_type < 2:
23342352
if isinstance(v, type([])):
23352353
s = ','.join([a for x in v])

test/db_test_base.py

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1086,9 +1086,9 @@ def testStringFind(self):
10861086

10871087
def filteringSetup(self):
10881088
for user in (
1089-
{'username': 'bleep', 'age': 1},
1090-
{'username': 'blop', 'age': 1.5},
1091-
{'username': 'blorp', 'age': 2}):
1089+
{'username': 'bleep', 'age': 1, 'assignable': True},
1090+
{'username': 'blop', 'age': 1.5, 'assignable': True},
1091+
{'username': 'blorp', 'age': 2, 'assignable': False}):
10921092
self.db.user.create(**user)
10931093
iss = self.db.issue
10941094
file_content = ''.join([chr(i) for i in range(255)])
@@ -1116,6 +1116,33 @@ def testFilteringID(self):
11161116
ae(filt(None, {'id': '2'}, ('+','id'), (None,None)), ['2'])
11171117
ae(filt(None, {'id': '100'}, ('+','id'), (None,None)), [])
11181118

1119+
def testFilteringBoolean(self):
1120+
self.filteringSetup()
1121+
ae, filt = self.assertEqual, self.db.user.filter
1122+
a = 'assignable'
1123+
ae(filt(None, {a: '1'}, ('+','id'), (None,None)), ['3','4'])
1124+
ae(filt(None, {a: '0'}, ('+','id'), (None,None)), ['5'])
1125+
ae(filt(None, {a: ['1']}, ('+','id'), (None,None)), ['3','4'])
1126+
ae(filt(None, {a: ['0']}, ('+','id'), (None,None)), ['5'])
1127+
ae(filt(None, {a: ['0','1']}, ('+','id'), (None,None)), ['3','4','5'])
1128+
ae(filt(None, {a: 'True'}, ('+','id'), (None,None)), ['3','4'])
1129+
ae(filt(None, {a: 'False'}, ('+','id'), (None,None)), ['5'])
1130+
ae(filt(None, {a: ['True']}, ('+','id'), (None,None)), ['3','4'])
1131+
ae(filt(None, {a: ['False']}, ('+','id'), (None,None)), ['5'])
1132+
ae(filt(None, {a: ['False','True']}, ('+','id'), (None,None)),
1133+
['3','4','5'])
1134+
ae(filt(None, {a: True}, ('+','id'), (None,None)), ['3','4'])
1135+
ae(filt(None, {a: False}, ('+','id'), (None,None)), ['5'])
1136+
ae(filt(None, {a: 1}, ('+','id'), (None,None)), ['3','4'])
1137+
ae(filt(None, {a: 0}, ('+','id'), (None,None)), ['5'])
1138+
ae(filt(None, {a: [1]}, ('+','id'), (None,None)), ['3','4'])
1139+
ae(filt(None, {a: [0]}, ('+','id'), (None,None)), ['5'])
1140+
ae(filt(None, {a: [0,1]}, ('+','id'), (None,None)), ['3','4','5'])
1141+
ae(filt(None, {a: [True]}, ('+','id'), (None,None)), ['3','4'])
1142+
ae(filt(None, {a: [False]}, ('+','id'), (None,None)), ['5'])
1143+
ae(filt(None, {a: [False,True]}, ('+','id'), (None,None)),
1144+
['3','4','5'])
1145+
11191146
def testFilteringNumber(self):
11201147
self.filteringSetup()
11211148
ae, filt = self.assertEqual, self.db.user.filter

0 commit comments

Comments
 (0)