diff roundup/backends/back_anydbm.py @ 6151:ff059afae50a

Make 'find' work for rev_multilink properties
author Ralf Schlatterbeck <rsc@runtux.com>
date Fri, 01 May 2020 16:34:35 +0200
parents 8497bf3f23a1
children a701c9c81597
line wrap: on
line diff
--- a/roundup/backends/back_anydbm.py	Fri May 01 16:33:05 2020 +0200
+++ b/roundup/backends/back_anydbm.py	Fri May 01 16:34:35 2020 +0200
@@ -1581,6 +1581,7 @@
         # ok, now do the find
         cldb = self.db.getclassdb(self.classname)
         l = []
+        rev_multilinks = []
         try:
             for id in self.getnodeids(db=cldb):
                 item = self.db.getnode(self.classname, id, db=cldb)
@@ -1607,6 +1608,9 @@
                         l.append(id)
                         break
                     elif isinstance(prop, hyperdb.Multilink):
+                        if prop.rev_property:
+                            rev_multilinks.append ((prop, itemids))
+                            continue
                         hit = 0
                         for v in value:
                             if v in itemids:
@@ -1615,6 +1619,15 @@
                                 break
                         if hit:
                             break
+            for prop, itemids in rev_multilinks:
+                rprop = prop.rev_property
+                fun = l.append
+                if isinstance (rprop, hyperdb.Multilink):
+                    fun = l.extend
+                for id in itemids:
+                    fun(rprop.cls.get(id, rprop.name))
+            if rev_multilinks:
+                l = list(sorted(set(l)))
         finally:
             cldb.close()
         return l

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