From 6705f888d5a8a540e341ad782fa84036c400b753 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 3 Apr 2006 22:04:33 +0000 Subject: r14897: 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. (This used to be commit a40d6c792257315d1eac955718db5ec1df7e07bb) --- source4/scripting/swig/Tdb.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/source4/scripting/swig/Tdb.py b/source4/scripting/swig/Tdb.py index 0de43688b3..ef0165ed8b 100644 --- a/source4/scripting/swig/Tdb.py +++ b/source4/scripting/swig/Tdb.py @@ -39,25 +39,33 @@ class Tdb: 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): -- cgit