Mercurial > p > roundup > code
diff roundup/backends/back_anydbm.py @ 1523:63aa7be52d2c
checked to make sure that the restored item doesn't clash...
...with a new item using the same key value
| author | Andrey Lebedev <kedder@users.sourceforge.net> |
|---|---|
| date | Mon, 17 Mar 2003 22:03:08 +0000 |
| parents | 6fede2aa6a12 |
| children | 948c7764d46c |
line wrap: on
line diff
--- a/roundup/backends/back_anydbm.py Mon Mar 17 04:48:41 2003 +0000 +++ b/roundup/backends/back_anydbm.py Mon Mar 17 22:03:08 2003 +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.112 2003-03-16 22:24:54 kedder Exp $ +#$Id: back_anydbm.py,v 1.113 2003-03-17 22:03:04 kedder 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 @@ -1328,9 +1328,18 @@ if self.db.journaltag is None: raise DatabaseError, 'Database open read-only' + node = self.db.getnode(self.classname, nodeid) + # check if key property was overrided + key = self.getkey() + try: + id = self.lookup(node[key]) + except KeyError: + pass + else: + raise KeyError, "Key property (%s) of retired node clashes with \ + existing one (%s)" % (key, node[key]) + # Now we can safely restore node self.fireAuditors('restore', nodeid, None) - - node = self.db.getnode(self.classname, nodeid) del node[self.db.RETIRED_FLAG] self.db.setnode(self.classname, nodeid, node) if self.do_journal:
