class AnguisSqlite(AnguisBase): def __init__(self, path): self.sd = SqliteDict(path, autocommit=True) def __del__(self): super(AnguisSqlite, self).__del__() def __getitem__(self, key): return self.unserialize(self.sd.__getitem__(key)) def __setitem__(self, key, obj): self.sd.__setitem__(key, self.serialize(obj)) def __delitem__(self, key): self.sd.__delitem__(key) def __iter__(self): return self.sd.__iter__() def __len__(self): return len(self.sd)
class Cache(object): def __init__(self, **kwargs): self.name = kwargs.get('name', DEFAULT_DATABASE_NAME) self._db = SqliteDict('./%s.sqlite' % self.name, encode=cache_encode, decode=cache_decode, autocommit=True) logger.info('name=%s size=%s', self.name, len(self._db)) def close(self): self._db.close() def __del__(self): pass # self.close() def __iter__(self): return self._db.__iter__() def iteritems(self): return self._db.iteritems() def iterkeys(self): return self._db.iterkeys() def itervalues(self): return self._db.itervalues() def items(self): return self.iteritems() def __getitem__(self, key): return self._db.__getitem__(key) def get(self, key, default=None): try: return self.__getitem__(key) except KeyError: return default def __setitem__(self, key, value): return self._db.__setitem__(key, value) def set(self, key, value): return self.__setitem__(key, value) def __len__(self): return len(self._db) def __contains__(self, key): return key in self._db def __delitem__(self, key): if key in self._db: del self._db[key] def list(self, limit=None): logger.info('list') keys = [] for key in self: keys.append(key) if limit is not None and len(keys) == limit: break return keys