| """Generic interface to all dbm clones. |
| |
| Instead of |
| |
| import dbm |
| d = dbm.open(file, 'w', 0666) |
| |
| use |
| |
| import anydbm |
| d = anydbm.open(file) |
| |
| The returned object is a dbhash, gdbm, dbm or dumbdbm object, |
| dependent on availability of the modules (tested in this order). |
| |
| It has the following interface (key and data are strings): |
| |
| d[key] = data # store data at key (may override data at |
| # existing key) |
| data = d[key] # retrieve data at key (raise KeyError if no |
| # such key) |
| del d[key] # delete data stored at key (raises KeyError |
| # if no such key) |
| flag = d.has_key(key) # true if the key exists |
| list = d.keys() # return a list of all existing keys (slow!) |
| |
| Future versions may change the order in which implementations are |
| tested for existence, add interfaces to other dbm-like |
| implementations, and (in the presence of multiple implementations) |
| decide which module to use based upon the extension or contents of an |
| existing database file. |
| |
| The open function has an optional second argument. This can be set to |
| 'r' to open the database for reading only. The default is 'r', like |
| the dbm default. |
| |
| """ |
| |
| _names = ['dbhash', 'gdbm', 'dbm', 'dumbdbm'] |
| |
| for _name in _names: |
| try: |
| exec "import %s; _mod = %s" % (_name, _name) |
| except ImportError: |
| continue |
| else: |
| break |
| else: |
| raise ImportError, "no dbm clone found; tried %s" % _names |
| |
| error = _mod.error |
| |
| def open(file, flag = 'r', mode = 0666): |
| return _mod.open(file, flag, mode) |