Example application


Install requirements:

$ pip install -e .[all]
$ cd examples
$ ./app-setup.py
$ ./app-fixtures.sh

Run example development server:

$ FLASK_APP=app.py flask run --debugger -p 5000

Run example worker:

$ celery worker -A app.celery -l info --purge


You must have a Redis running on localhost.


Administration interface is available on:


REST API is available on:



Below are some example queries you can make to the REST API. Most queries will be operating on a bucket, so let’s first define a env variable:

$ B=11111111-1111-1111-1111-111111111111

Bucket operations

Create a bucket:

$ curl -X POST http://localhost:5000/files

List objects:

$ curl http://localhost:5000/files/$B

List object versions:

$ curl http://localhost:5000/files/$B?versions

List multipart uploads:

$ curl http://localhost:5000/files/$B?uploads

Check bucket existence:

$ curl -i -X HEAD http://localhost:5000/files/$B

Object operations

Download a file:

$ curl -i http://localhost:5000/files/$B/AUTHORS.rst

Upload a file:

$ curl -i -X PUT --data-binary @../INSTALL.rst \

Delete a file (creates a delete marker):

$ curl -i -X DELETE http://localhost:5000/files/$B/INSTALL.rst

Remove a specific version (removes file from disk):

$ curl -i -X DELETE http://localhost:5000/files/$B/INSTALL.rst?versionId=...

Multipart file upload

Create a multipart upload:

$ curl -i -X POST \

List parts of a multipart upload:

$ curl http://localhost:5000/files/$B/LICENSE?uploadId=...

Upload parts:

$ echo -n "aaaa" | curl -i -X PUT --data-binary @- \
$ echo -n "bbbb" | curl -i -X PUT --data-binary @- \

Complete a multipart upload (Celery must be running):

$ curl -i -X POST http://localhost:5000/files/$B/LICENSE?uploadId=...

Abort a multipart upload (Celery must be running):

$ curl -i -X DELETE http://localhost:5000/files/$B/LICENSE?uploadId=...