A file-based value store for bytes and strings.


Keywords
Python
License
MIT
Install
pip install keeper==1.1.1

Documentation

keeper

Keeper is a filesystem-based, content-addressable value store for Python 3.

Installation

$ pip install keeper

Using Keeper

Keeper is constructed with a Storage object. This example uses FileStorage:

from keeper import FileStorage, Keeper

Pass a directory path to a FileStorage instance, and then pass the Storage instance to the Keeper:

with FileStorage("/some/directory/") as storage:
     with Keeper(storage) as k:
        ...

Add string or bytes objects, and get a key in return:

key = self.keeper.add("The quick brown fox jumped over the lazy dog")

Use the key to retrieve the string:

value = keeper[key].as_string()

Add another string with some metadata:

key = keeper.add(text, mime="text/plain", filename="foo.txt", author="Joe Bloggs")

Retrieve metadata:

print(keeper[key].meta.mime)

Add a binary stream you can write to:

with keeper.add_stream() as stream:
     stream.write(b'A large number of bytes')

After the stream has closed, retrieve the key:

key = stream.key

Write cacheing

On slow filesystems, such as USB flash drives, it's possible to buffer writes in RAM, using a storage intermediary called WriteCacheStorage. Use it like this:

from keeper import FileStorage, WriteCacheStorage, Keeper

with FileStorage("/some/directory/") as file_storage:
    with WriteCacheStorage(file_storage) as cached_storage:
        with Keeper(cached_storage) as k:
            ...

Closing the WriteCacheStorage instance will block until all pending writes have been committed to the underlying FileStorage.

Deployment

To build and deploy a package to PyPI:

$ bumpversion patch
$ python setup.py sdist bdist_wheel
$ twine upload dist/*