summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Potter <tpot@samba.org>2006-04-03 22:04:33 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:00:13 -0500
commit6705f888d5a8a540e341ad782fa84036c400b753 (patch)
treecb4e2fab999242cb96b32056b9cb874e62df7f23
parent1ac990ddcf8501ce551c87e70cb3722ae9f4f34b (diff)
downloadsamba-6705f888d5a8a540e341ad782fa84036c400b753.tar.gz
samba-6705f888d5a8a540e341ad782fa84036c400b753.tar.bz2
samba-6705f888d5a8a540e341ad782fa84036c400b753.zip
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)
-rw-r--r--source4/scripting/swig/Tdb.py20
1 files 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):