Simple and easy file storages for Flask
Project description
Simple and easy file storages for Flask.
Compatibility
Flask-FS requires Python >= 3.10 and Flask/Werkzeug >= 2.0.0.
Amazon S3 support requires Boto3.
GridFS support requires PyMongo 3+.
OpenStack Swift support requires python-swift-client.
Installation
You can install Flask-FS with pip:
$ pip install flask-fs2
# or
$ pip install flask-fs2[s3] # For Amazon S3 backend support
$ pip install flask-fs2[swift] # For OpenStack swift backend support
$ pip install flask-fs2[gridfs] # For GridFS backend support
$ pip install flask-fs2[all] # To include all dependencies for all backends
Quick start
from flask import Flask
import flask_fs as fs
app = Flask(__name__)
fs.init_app(app)
images = fs.Storage('images')
if __name__ == '__main__':
app.run(debug=True)
Contributions
All contributions are welcome as long as they respect the C4 contract.
Code must follow the pep8 convention.
Changelog
Current
Swift backend: per-process Connection pool (gevent.queue.Queue with stdlib queue.Queue fallback) so concurrent greenlets and threads no longer share a single swiftclient.Connection. Fixes sporadic 400s, ConnectionReset errors and content corruption observed under gevent workers.
Swift backend: timeout and retries are now passed to every Connection (defaults: 60 s timeout, 5 retries).
Swift backend: write() pre-computes content_length and ETag (when content is bytes or a seekable file-like) and verifies the ETag returned by Swift; mismatched objects are deleted and the call raises ClientException to prevent silent corruption.
Swift backend: read_chunks() releases the borrowed Connection back to the pool when the generator is exhausted or close() is called.
Swift backend: list_files() uses full_listing=True so containers with more than 10 000 objects are fully enumerated.
Swift backend: new optional settings pool_size (default 20), timeout (default 60) and retries (default 5).
0.7.33 (2026-01-14)
Upgrade GitHub Actions
0.7.32 (2026-01-12)
Drop Python 3.9 support
Python 3.12 requirements upgrade
0.7.31 (2025-08-19)
Fix CI
Upgrade requirements
0.7.30 (2025-05-28)
Remove deprecated pkg_resources
Upgrade requirements
0.7.29 (2025-03-09)
Upgrade requirements
Update README
0.7.28 (2025-01-10)
Drop support for Python 3.8, add Python 3.13
Fix Python 3.13 CI
Fix AttributeError: 'GridFS' object has no attribute '_GridFS__collection'
Use main branch in GitHub workflows
Fix docker compose in GitHub Actions CI
Run autoflake and black
Upgrade requirements
0.7.27 (2024-07-12)
Upgrade requirements
0.7.26 (2024-05-27)
Use wheel of flask_mongoengine3 directly from PyPI
Fix MongoDB test errors
Upgrade requirements
0.7.25 (2024-05-07)
Added copy() method to Storage
Upgrade requirements
0.7.24 (2024-03-11)
Upgrade requirements
0.7.23 (2023-10-23)
Allow setting multiple backends, encrypted or not
Added create_container/create_bucket options for Swift and S3
Ensure server does not serve files outside DEBUG mode
Use new pytest-flask version for CI tests
Add .vscode/settings.json for black formatter
Upgrade Pillow and other requirements
0.7.22 (2023-10-13)
Swift backend refactoring
Upgrade boto3
Launch CI build on pull requests and every branch
0.7.21 (2023-10-09)
Allow Flask v3 and newer boto3
Add Python 3.12 to classifiers and CI matrix
Use a pytest-flask branch fixing test issues
Release script exits immediately on non-zero status
0.7.20 (2023-09-28)
Upgrade boto3
0.7.19 (2023-09-18)
Upgrade actions/checkout to v4
Disable fail-fast in CI so jobs finish even on failure
Cache pip in CI
Add pre-commit configuration
Upgrade requirements
Update README
0.7.18 (2023-09-12)
Switch CI from Travis to GitHub Actions (ci.yml + release.yml)
Add release script integrated with new workflow
Add coverage report
Test against pypy3.10
Upgrade requirements
0.7.17 (2023-07-25)
Stop encrypting files in memory (stream encryption)
Upgrade boto3, pymongo and sphinx
0.7.16 (2023-07-13)
Fix tests
Remove GitHub dependency, add python-keystoneclient
0.7.15 (2023-07-13)
Allow Flask 2.3 in setup.cfg
Fix Swift tests
Add tests for crypto.py and encrypted files in storage
Upgrade libraries
0.7.14 (2023-05-31)
Fix tests on Flask 2.3
Fix KeyError when FS_AES256_ENCRYPTED is not set
Fix Travis build
0.7.13 (2023-05-26)
Fix Flask issue with tests
0.7.12 (2023-05-26)
Upgrade libraries
0.7.11 (2023-05-26)
Added file encryption/decryption on put/get (AES256)
Allow cryptography from 39.0.2
Add license_file in setup
Add launch.json for VSCode debugging
Add issue templates
0.7.10 (2023-03-13)
Create Swift container only if missing
Fix pip install command for development
0.7.9 (2023-03-03)
Added read_chunks() method on Storage
Add test test_read_chunks
0.7.8 (2023-03-03)
Use Swift auth_version 3 by default
0.7.7 (2023-02-24)
Change options for Swift
0.7.6 (2023-02-09)
Use app_context() when using current_app
0.7.5 (2023-02-06)
Fix LocalBackend.delete: use self.path for destination
0.7.4 (2022-01-24)
CGWire will maintain this fork
Flask-FS2 requires Python 3.7+ and Flask/Werkzeug 2.0.0+
Remove all code related to Python 2
Added read_chunks() operations
Add region configuration for Swift and S3
0.6.1 (2018-04-19)
Fix a race condition on local backend directory creation
Proper content type handling on GridFS (thanks to @rclement)
0.6.0 (2018-03-27)
Added copy() and move() operations
delete() now supports directories (or prefixes for key/value stores)
Improve metadata() mime handling
Added explicit ImageField.full(external=False)
0.5.1 (2018-03-12)
Fix local backend list_files() nested directories handling
0.5.0 (2018-03-12)
Added metadata method to Storage to retrieve file metadata
Force boto3 >= 1.4.5 because of API change (lifecycle)
Drop Python 3.3 support
Create parent directories when opening a local file in write mode
0.4.1 (2017-06-24)
Fix broken packaging for Python 2.7
0.4.0 (2017-06-24)
Added backend level configuration FS_{BACKEND_NAME}_{KEY}
Improved backend documentation
Use setuptools entry points to register backends.
Added NONE extensions specification
Added list_files to Storage to list the current bucket files
Image optimization preserve file type as much as possible
Ensure images are not overwritted before rerendering
0.3.0 (2017-03-05)
Switch to pytest
ImageField optimization/compression. Resized images are now compressed. Default image can also be optimized on upload with FS_IMAGES_OPTIMIZE = True or by specifying optimize=True as field parameter.
ImageField has now the ability to rerender images with the rerender() method.
0.2.1 (2017-01-17)
Expose Python 3 compatibility
0.2.0 (2016-10-11)
Proper github publication
Initial S3, GridFS and Swift backend implementations
Python 3 fixes
0.1 (2015-04-07)
Initial release
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 Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flask_fs2-0.8.1-py2.py3-none-any.whl.
File metadata
- Download URL: flask_fs2-0.8.1-py2.py3-none-any.whl
- Upload date:
- Size: 44.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c501fb7f933a26844829b29a4403dd2809388edcb711c19b2f58c12bd972665
|
|
| MD5 |
5d8522eb75b01474d1e6278d515f9b61
|
|
| BLAKE2b-256 |
c922a3f0f564036a30881b034aead149d9864c0a3956d76e8f4cc597fb2d4703
|
Provenance
The following attestation bundles were made for flask_fs2-0.8.1-py2.py3-none-any.whl:
Publisher:
release.yml on cgwire/flask-fs2
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
flask_fs2-0.8.1-py2.py3-none-any.whl -
Subject digest:
3c501fb7f933a26844829b29a4403dd2809388edcb711c19b2f58c12bd972665 - Sigstore transparency entry: 1591104885
- Sigstore integration time:
-
Permalink:
cgwire/flask-fs2@c95996110cffca882b285125fe6b14065d1c192f -
Branch / Tag:
refs/tags/v0.8.1 - Owner: https://github.com/cgwire
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c95996110cffca882b285125fe6b14065d1c192f -
Trigger Event:
push
-
Statement type: