Skip to main content

Flask extension for HashFS, a content-addressable file management system.

Project description

version travis coveralls license

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.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Flask-HashFS-0.3.0.tar.gz (16.0 kB view details)

Uploaded Source

Built Distribution

Flask_HashFS-0.3.0-py2.py3-none-any.whl (7.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file Flask-HashFS-0.3.0.tar.gz.

File metadata

File hashes

Hashes for Flask-HashFS-0.3.0.tar.gz
Algorithm Hash digest
SHA256 47514beef005b5895f954c0e6bafcdb0cc6c819c947d6d57a84914fc901d9cfd
MD5 8bac4001bdc86722d062952002425732
BLAKE2b-256 0ec2d69f969e0066ce6adc66682822af62949c72edf24f5341fe0a8023b9afaf

See more details on using hashes here.

File details

Details for the file Flask_HashFS-0.3.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for Flask_HashFS-0.3.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f5e1d77917013e5e94c1010a709c47a8c18602e11a851c9e84b68cfb0c1ac043
MD5 3a87ed68656b58fea0295d7b2835092e
BLAKE2b-256 a4174e615704add3c43355943010ed7c32d95c2e99c6c8a9fce8d07e5a8427d6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page