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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 2 Python 3

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