from cStringIO import StringIO as _StringIO
import catacomb as _C
-import gdbm as _G
###--------------------------------------------------------------------------
### Text encoding utilities.
me._check_live()
return me._iter_passwds()
-class GDBMStorageBackend (StorageBackend):
- """
- My instances store password data in a GDBM database.
+try: import gdbm as _G
+except ImportError: pass
+else:
+ class GDBMStorageBackend (StorageBackend):
+ """
+ My instances store password data in a GDBM database.
- Metadata and password entries are mixed into the same database. The key
- for a metadata item is simply its name; the key for a password entry is
- the entry's label prefixed by `$', since we're guaranteed that no
- metadata item name begins with `$'.
- """
+ Metadata and password entries are mixed into the same database. The key
+ for a metadata item is simply its name; the key for a password entry is
+ the entry's label prefixed by `$', since we're guaranteed that no
+ metadata item name begins with `$'.
+ """
- NAME = 'gdbm'
+ NAME = 'gdbm'
- def _open(me, file, writep):
- try: me._db = _G.open(file, writep and 'w' or 'r')
- except _G.error, e: raise StorageBackendRefusal, e
+ def _open(me, file, writep):
+ try: me._db = _G.open(file, writep and 'w' or 'r')
+ except _G.error, e: raise StorageBackendRefusal, e
- def _create(me, file):
- me._db = _G.open(file, 'n', 0600)
+ def _create(me, file):
+ me._db = _G.open(file, 'n', 0600)
- def _close(me, abruptp):
- me._db.close()
- me._db = None
+ def _close(me, abruptp):
+ me._db.close()
+ me._db = None
- def _get_meta(me, name, default):
- try: return me._db[name]
- except KeyError: return default
+ def _get_meta(me, name, default):
+ try: return me._db[name]
+ except KeyError: return default
- def _put_meta(me, name, value):
- me._db[name] = value
+ def _put_meta(me, name, value):
+ me._db[name] = value
- def _del_meta(me, name):
- del me._db[name]
+ def _del_meta(me, name):
+ del me._db[name]
- def _iter_meta(me):
- k = me._db.firstkey()
- while k is not None:
- if not k.startswith('$'): yield k, me._db[k]
- k = me._db.nextkey(k)
+ def _iter_meta(me):
+ k = me._db.firstkey()
+ while k is not None:
+ if not k.startswith('$'): yield k, me._db[k]
+ k = me._db.nextkey(k)
- def _get_passwd(me, label):
- return me._db['$' + label]
+ def _get_passwd(me, label):
+ return me._db['$' + label]
- def _put_passwd(me, label, payload):
- me._db['$' + label] = payload
+ def _put_passwd(me, label, payload):
+ me._db['$' + label] = payload
- def _del_passwd(me, label):
- del me._db['$' + label]
+ def _del_passwd(me, label):
+ del me._db['$' + label]
- def _iter_passwds(me):
- k = me._db.firstkey()
- while k is not None:
- if k.startswith('$'): yield k[1:], me._db[k]
- k = me._db.nextkey(k)
+ def _iter_passwds(me):
+ k = me._db.firstkey()
+ while k is not None:
+ if k.startswith('$'): yield k[1:], me._db[k]
+ k = me._db.nextkey(k)
class PlainTextBackend (StorageBackend):
"""