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