📄 tdb.py
字号:
"""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 osfrom tdb import *# Open flagsDEFAULT = TDB_DEFAULTCLEAR_IF_FIRST = TDB_CLEAR_IF_FIRSTINTERNAL = TDB_INTERNALNOLOCK = TDB_NOLOCKNOMMAP = TDB_NOMMAP# Class representing a TDB fileclass Tdb: # Create and destroy Tdb objects def __init__(self, name, hash_size = 0, flags = 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): 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, '%s: %s' % (key, tdb_errorstr(self.tdb)) return result def __setitem__(self, 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, '%s: %s' % (key, tdb_errorstr(self.tdb)) 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])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -