Mercurial > p > roundup > code
diff roundup/backends/back_anydbm.py @ 3486:34ada15b9936
all backends implement the retired check in getnodeids [SF#1290560]
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Mon, 23 Jan 2006 05:24:33 +0000 |
| parents | 1142dafe0d7f |
| children | 87e512f87bae |
line wrap: on
line diff
--- a/roundup/backends/back_anydbm.py Mon Jan 23 04:58:21 2006 +0000 +++ b/roundup/backends/back_anydbm.py Mon Jan 23 05:24:33 2006 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -#$Id: back_anydbm.py,v 1.192 2006-01-20 02:40:56 richard Exp $ +#$Id: back_anydbm.py,v 1.193 2006-01-23 05:24:33 richard Exp $ '''This module defines a backend that saves the hyperdatabase in a database chosen by anydbm. It is guaranteed to always be available in python versions >2.1.1 (the dumbdbm fallback in 2.1.1 and earlier has several @@ -1515,8 +1515,11 @@ l.sort() return l - def getnodeids(self, db=None): + def getnodeids(self, db=None, retired=None): ''' Return a list of ALL nodeids + + Set retired=None to get all nodes. Otherwise it'll get all the + retired or non-retired nodes, depending on the flag. ''' res = [] @@ -1524,16 +1527,31 @@ if self.db.newnodes.has_key(self.classname): res += self.db.newnodes[self.classname].keys() + must_close = False if db is None: db = self.db.getclassdb(self.classname) - res = res + db.keys() + must_close = True + try: + res = res + db.keys() + + # remove the uncommitted, destroyed nodes + if self.db.destroyednodes.has_key(self.classname): + for nodeid in self.db.destroyednodes[self.classname].keys(): + if db.has_key(nodeid): + res.remove(nodeid) - # remove the uncommitted, destroyed nodes - if self.db.destroyednodes.has_key(self.classname): - for nodeid in self.db.destroyednodes[self.classname].keys(): - if db.has_key(nodeid): - res.remove(nodeid) - + # check retired flag + if retired is False or retired is True: + l = [] + for nodeid in res: + node = self.db.getnode(self.classname, nodeid, db) + is_ret = node.has_key(self.db.RETIRED_FLAG) + if retired == is_ret: + l.append(nodeid) + res = l + finally: + if must_close: + db.close() return res def filter(self, search_matches, filterspec, sort=(None,None),
