"""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)
