Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mkrd/Flask-Squeeze
Automatically minify JS/CSS and compress all responses with brotli, defalte or gzip, with caching for static assets
https://github.com/mkrd/Flask-Squeeze
Last synced: 3 months ago
JSON representation
Automatically minify JS/CSS and compress all responses with brotli, defalte or gzip, with caching for static assets
- Host: GitHub
- URL: https://github.com/mkrd/Flask-Squeeze
- Owner: mkrd
- License: mit
- Created: 2019-11-27T10:17:05.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-06-18T07:54:01.000Z (5 months ago)
- Last Synced: 2024-07-22T06:23:37.423Z (4 months ago)
- Language: CSS
- Homepage:
- Size: 783 KB
- Stars: 10
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- jimsghstars - mkrd/Flask-Squeeze - Automatically minify JS/CSS and compress all responses with brotli, defalte or gzip, with caching for static assets (CSS)
README
![Logo](https://github.com/mkrd/Flask-Squeeze/blob/master/assets/logo.png?raw=true)
[![Downloads](https://pepy.tech/badge/flask-squeeze)](https://pepy.tech/project/flask-squeeze)
![Tests](https://github.com/mkrd/Flask-Squeeze/actions/workflows/test.yml/badge.svg)
![Coverage](https://github.com/mkrd/Flask-Squeeze/blob/master/assets/coverage.svg?raw=1)Flask-Squeeze is a Flask extension that automatically:
- **Minifies** repsonses with the mimetypes javascript and css
- **Compresses** all responses with brotli if the browser supports it, or gzip if the browser supports it!
- **Protects** against the BREACH exploit
- **Caches** static files so that they don't have to be re-compressed. The cache will be cleared each time Flask restarts. Files are considered static if the the substring "/static/" is in their request path.## Compatibility
- Tested with Python 3.7, 3.8, 3.9, 3.10, 3.11 and 3.12## Installation
```
pip install Flask-Squeeze
```## Usage
Initialize Flask-Squeeze **BEFORE** all other extensions and after_request handlers! Flask executes after_request handlers in reverse order of declaration, and the compression should be the last step before sending the response.
```python
from flask_squeeze import Squeeze
squeeze = Squeeze()def create_app():
app = Flask(__name__)# Init Flask-Squeeze
squeeze.init_app(app)# Init all other extensions
# AFTER Flask-Squeezereturn app
```Thats it! The responses of your Flask app will now get minified and compressed, if the browser supports it.
To control how Flask-Squeeze behaves, the following options exist:### General options
You can configure Flask-Squeeze with the following options in your [Flask config](https://flask.palletsprojects.com/en/latest/config/):| Option | Default | Description |
| --- | --- | --- |
| `SQUEEZE_COMPRESS` | `True` | Enables or disables compression |
| `SQUEEZE_MIN_SIZE` | `500` | Defines the minimum file size in bytes to activate the compression |
| `SQUEEZE_VERBOSE_LOGGING` | `False` | Enable or disable verbose logging. If enabled, Flask-Squeeze will print what it does into the terminal in a highlighted color |
| `SQUEEZE_ADD_DEBUG_HEADERS` | `False` | Add debug infos into the response headers, like call durations and cache hit infos. ONLY USE THIS IN DEVELOPMENT.### Minification options
| Option | Default | Description |
| --- | --- | --- |
| `SQUEEZE_MINIFY_CSS` | `True` | Enable or disable css minification using rcssmin |
| `SQUEEZE_MINIFY_JS` | `True` | Enable or disable js minification using rjsmin |### Compression level options
> Static files are chached, so they only have to be compressed once.
> Dynamic files like generated HTML files will not be cached, so they will be compressed for each response.| Option | Default | Description |
| --- | --- | --- |
| `SQUEEZE_LEVEL_BROTLI_STATIC` | `default=11, min=0 , max=11` | Defines the compression level of brotli for static files |
| `SQUEEZE_LEVEL_BROTLI_DYNAMIC` | `default=1, min=0, max=11` | Defines the compression level of brotli for dynamic files |
| `SQUEEZE_LEVEL_DEFLATE_STATIC` | `default=9, min=-1 , max=9` | Defines the compression level of deflate for static files |
| `SQUEEZE_LEVEL_DEFLATE_DYNAMIC` | `default=1, min=-1, max=9` | Defines the compression level of deflate for dynamic files |
| `SQUEEZE_LEVEL_GZIP_STATIC` | `default=9, min=0 , max=9` | Defines the compression level of gzip for static files |
| `SQUEEZE_LEVEL_GZIP_DYNAMIC` | `default=1, min=0, max=9` | Defines the compression level of gzip for dynamic files |