Flask extension for HashFS, a content-addressable file management system.
Project description
Flask extension for HashFS, a content-addressable file management system.
What is HashFS?
HashFS is a content-addressable file management system. What does that mean? Simply, that HashFS manages a directory where files are saved based on the file’s hash.
Typical use cases for this kind of system are ones where:
Files are written once and never change (e.g. image storage).
It’s desirable to have no duplicate files (e.g. user uploads).
File metadata is stored elsewhere (e.g. in a database).
What is Flask-HashFS?
Flask-HashFS is a Flask extension that integrates HashFS into the Flask ecosystem.
Links
Documentation: http://flask-hashfs.readthedocs.org
Quickstart
Install using pip:
pip install Flask-HashFS
Initialization
from flask import Flask
from flask_hashfs import FlaskHashFS
app = Flask(__name__)
fs = FlaskHashFS()
Configure Flask-HashFS to store files in /var/www/data/uploads and give them a route prefix at /uploads.
app.config.update({
'HASHFS_HOST': None,
'HASHFS_PATH_PREFIX': '/uploads',
'HASHFS_ROOT_FOLDER': '/var/www/data/uploads',
'HASHFS_DEPTH': 4,
'HASHFS_LENGTH': 1,
'HASHFS_ALGORITHM': 'sha256'
})
fs.init_app(app)
Usage
Use Flask-HashFS to manage files using HashFS.
with app.app_context():
# Store readable objects or file paths
address = fs.put(io_obj, extension='.jpg')
# Get a file's hash address
assert fs.get(address.id) == address
assert fs.get(address.relpath) == address
assert fs.get(address.abspath) == address
assert fs.get('invalid') is None
# Get a BufferedReader handler
fileio = fs.open(address.id)
# Or using the full path...
fileio = fs.open(address.abspath)
# Or using a path relative to fs.root
fileio = fs.open(address.relpath)
# Delete a file by address ID or path
fs.delete(address.id)
fs.delete(address.abspath)
fs.delete(address.relpath)
For direct access to the HashFS instance, use the client attribute.
fs.client
assert isinstance(fs.client, flask_hashfs.HashFS)
Generate URLs for HashFS content.
with app.test_request_context():
fs.url_for('relative/file/path')
For more details, please see the full documentation at http://flask-hashfs.readthedocs.org and http://hashfs.readthedocs.org.
Changelog
v0.1.0 (2015-06-02)
First release.
Add FlaskHashFS.put.
Add FlaskHashFS.get.
Add FlaskHashFS.open.
Add FlaskHashFS.delete.
Add FlaskHashFS.url_for.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for Flask_HashFS-0.1.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f1608b009bfad3071e0229edda1eb173fef1983bf3f16ddf45a4c5f2115f039d |
|
MD5 | f0bc327b037fc718f85cbfee7ae3f1a6 |
|
BLAKE2b-256 | 499849b84cb527a94c64470e0348151b5f04fe1672b75a3954d73809ff95d943 |