class StashBackend(Backend): def __init__(self, archive, algorithm='lru:///', serializer='none:///'): self.stash = Stash(archive, algorithm, serializer, key_transform=(self.key_encode, self.key_decode)) @property def archive(self): return self.stash.archive @property def cache(self): return self.stash.cache def delete(self, keys): return self.stash.delete(keys) def flush(self): return self.stash.flush() def items(self): return self.stash.items() def iteritems(self): return self.stash.iteritems() def iterkeys(self): return self.stash.iterkeys() def itervalues(self): return self.stash.itervalues() def save(self): return self.stash.save() def __delitem__(self, key): return self.stash.__delitem__(key) def __getitem__(self, key): return self.stash.__getitem__(key) def __iter__(self): return self.stash.__iter__() def __len__(self): return self.stash.__len__() def __setitem__(self, key, value): return self.stash.__setitem__(key, value) def __getstate__(self): return {} def __setstate__(self, state): pass @staticmethod def key_encode(key): if type(key) is tuple: return '/'.join(key) return key @staticmethod def key_decode(key): key = str(key).split('/') if len(key) == 1: return key[0] return tuple(key)