1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-14 12:23:52 +03:00
Files
samba-mirror/source/scripting/swig/Tdb.py
2007-10-10 13:59:45 -05:00

108 lines
2.9 KiB
Python

"""Provide a more Pythonic and object-oriented interface to tdb."""
#
# Swig interface to Samba
#
# Copyright (C) Tim Potter 2006
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
import tdb, os
# Open flags
DEFAULT = tdb.TDB_DEFAULT
CLEAR_IF_FIRST = tdb.TDB_CLEAR_IF_FIRST
INTERNAL = tdb.TDB_INTERNAL
NOLOCK = tdb.TDB_NOLOCK
NOMMAP = tdb.TDB_NOMMAP
# Class representing a TDB file
class Tdb:
# Create and destroy Tdb objects
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)
def __del__(self):
if hasattr(self, 'tdb'):
tdb.close(self.tdb)
# Random access to keys, values
def __getitem__(self, key):
result = tdb.fetch(self.tdb, key)
if result is None:
raise KeyError, key
return result
def __setitem__(self, key, item):
tdb.store(self.tdb, key, item)
def __delitem__(self, key):
if not tdb.exists(self.tdb, key):
raise KeyError, key
tdb.delete(self.tdb, key)
def has_key(self, key):
return tdb.exists(self.tdb, key)
# Tdb iterator
class TdbIterator:
def __init__(self, tdb):
self.tdb = tdb
self.key = None
def __iter__(self):
return self
def next(self):
if self.key is None:
self.key = tdb.firstkey(self.tdb)
if self.key is None:
raise StopIteration
return self.key
else:
self.key = tdb.nextkey(self.tdb, self.key)
if self.key is None:
raise StopIteration
return self.key
def __iter__(self):
return Tdb.TdbIterator(self.tdb)
# Implement other dict functions using TdbIterator
def keys(self):
return [k for k in iter(self)]
def values(self):
return [self[k] for k in iter(self)]
def items(self):
return [(k, self[k]) for k in iter(self)]
def __len__(self):
return len(self.keys())
def clear(self):
for k in iter(self):
del(self[k])