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_WIDTH': 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.3.0 (2015-06-03)
Replace manual proxy access of HashFS methods with single __getattr__ method.
v0.2.0 (2015-06-02)
Pin hashfs dependency to >=0.3.0. (breaking change)
Rename config key HASHFS_LENGTH to HASHFS_WIDTH to be in alignment with hashfs>=0.3.0. (breaking change)
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
File details
Details for the file Flask-HashFS-0.3.0.tar.gz
.
File metadata
- Download URL: Flask-HashFS-0.3.0.tar.gz
- Upload date:
- Size: 16.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 47514beef005b5895f954c0e6bafcdb0cc6c819c947d6d57a84914fc901d9cfd |
|
MD5 | 8bac4001bdc86722d062952002425732 |
|
BLAKE2b-256 | 0ec2d69f969e0066ce6adc66682822af62949c72edf24f5341fe0a8023b9afaf |
File details
Details for the file Flask_HashFS-0.3.0-py2.py3-none-any.whl
.
File metadata
- Download URL: Flask_HashFS-0.3.0-py2.py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5e1d77917013e5e94c1010a709c47a8c18602e11a851c9e84b68cfb0c1ac043 |
|
MD5 | 3a87ed68656b58fea0295d7b2835092e |
|
BLAKE2b-256 | a4174e615704add3c43355943010ed7c32d95c2e99c6c8a9fce8d07e5a8427d6 |