diff roundup/backends/back_anydbm.py @ 6396:75a53956cf13

Multilink expressions with simple "or" .. also when searching for empty multilinks with '-1' as part of the list of IDs.
author Ralf Schlatterbeck <rsc@runtux.com>
date Fri, 07 May 2021 20:50:08 +0200
parents d3a5d0d95869
children f3fcd6628c0c
line wrap: on
line diff
--- a/roundup/backends/back_anydbm.py	Fri May 07 16:01:57 2021 +0200
+++ b/roundup/backends/back_anydbm.py	Fri May 07 20:50:08 2021 +0200
@@ -122,12 +122,17 @@
     def __init__(self, v):
         try:
             opcodes = [int(x) for x in v]
-            if min(opcodes) >= -1: raise ValueError()
+            if min(opcodes) >= -1:
+                raise ValueError()
 
             compiled = compile_expression(opcodes)
             self.evaluate = lambda x: compiled.evaluate([int(y) for y in x])
         except:
-            self.evaluate = lambda x: bool(set(x) & set(v))
+            if '-1' in v:
+                v = [x for x in v if int(x) > 0]
+                self.evaluate = lambda x: bool(set(x) & set(v)) or not x
+            else:
+                self.evaluate = lambda x: bool(set(x) & set(v))
 
 #
 # Now the database
@@ -1908,7 +1913,8 @@
                             # otherwise, make sure this node has each of the
                             # required values
                             expr = Expression(v)
-                            if expr.evaluate(nv): match = 1
+                            if expr.evaluate(nv):
+                                match = 1
                     elif t == STRING:
                         if nv is None:
                             nv = ''

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