Author: tpot Date: 2006-04-03 22:04:33 +0000 (Mon, 03 Apr 2006) New Revision: 14897
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=14897 Log: Do more error checking of tdb function returns and raise IOError or KeyError exceptions as appropriate. Add a close() function to the wrapper as we can't rely on the Python garbage collector destroying the object and closing the tdb file at any particular time. Modified: branches/SAMBA_4_0/source/scripting/swig/Tdb.py Changeset: Modified: branches/SAMBA_4_0/source/scripting/swig/Tdb.py =================================================================== --- branches/SAMBA_4_0/source/scripting/swig/Tdb.py 2006-04-03 19:14:12 UTC (rev 14896) +++ branches/SAMBA_4_0/source/scripting/swig/Tdb.py 2006-04-03 22:04:33 UTC (rev 14897) @@ -39,25 +39,33 @@ def __init__(self, name, hash_size = 0, flags = tdb.TDB_DEFAULT, open_flags = os.O_RDWR | os.O_CREAT, mode = 0600): self.tdb = tdb.open(name, hash_size, flags, open_flags, mode) - + if self.tdb is None: + raise IOError, tdb.errorstr(self.tdb) + def __del__(self): - if hasattr(self, 'tdb'): - tdb.close(self.tdb) + self.close() + def close(self): + if hasattr(self, 'tdb') and self.tdb is not None: + if tdb.close(self.tdb) == -1: + raise IOError, tdb.errorstr(self.tdb) + self.tdb = None + # Random access to keys, values def __getitem__(self, key): result = tdb.fetch(self.tdb, key) if result is None: - raise KeyError, key + raise KeyError, '%s: %s' % (key, tdb.errorstr(self.tdb)) return result def __setitem__(self, key, item): - tdb.store(self.tdb, key, item) + if tdb.store(self.tdb, key, item) == -1: + raise IOError, tdb.errorstr(self.tdb) def __delitem__(self, key): if not tdb.exists(self.tdb, key): - raise KeyError, key + raise KeyError, '%s: %s' % (key, tdb.errorstr(self.tdb)) tdb.delete(self.tdb, key) def has_key(self, key):