<h1 align='center'> flask_minify </h1>
<p align='center'>
<a href='https://pypi.org/project/Flask-Minify/'>
<img src='https://img.shields.io/github/v/tag/mrf345/flask_minify' alt='Latest Release' />
</a>
<a href='https://github.com/mrf345/flask_minify/actions/workflows/ci.yml'>
<img src='https://github.com/mrf345/flask_minify/actions/workflows/ci.yml/badge.svg'>
</a>
<br />
<img src='https://img.shields.io/pypi/pyversions/flask_minify' alt='Supported versions' />
<br />
<a href='https://github.com/mrf345/flask_minify/actions/workflows/ci.yml'>
<img src='https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/mrf345/bc746d7bfe356b54fbb93b2ea5d0d2a4/raw/flask_minify__heads_master.json' alt='Coverage Percentage' />
</a>
<a href='https://github.com/PyCQA/bandit'>
<img src='https://img.shields.io/badge/security-bandit-yellow.svg' alt='security: bandit' />
</a>
<a href='https://github.com/psf/black'>
<img src='https://img.shields.io/badge/style-black-000000.svg' alt='Code Style Black' />
</a>
<br />
</p>
<h3 align='center'>Flask extension to parse and minify html, javascript, css and less.</h3>
## Install:
With **pip**
- `pip install Flask-Minify`
for better performance (almost two times) you can use the optional [go dependency](https://pypi.org/project/tdewolff-minify/) [only Linux supported]
- `pip install Flask-Minify[go]`
With **setup-tools**
- `git clone https://github.com/mrf345/flask_minify.git`
- `cd flask_minify`
- `python setup.py install`
## Setup:
In this example the extension will minify every HTML request, unless it's explicitly bypassed.
```python
from flask import Flask
from flask_minify import Minify
app = Flask(__name__)
Minify(app=app, html=True, js=True, cssless=True)
```
Another approach is using **decorators**, you can set the extension to be `passive` so will only minify the decorated routes
```python
from flask import Flask
from flask_minify import Minify, decorators as minify_decorators
app = Flask(__name__)
Minify(app=app, passive=True)
@app.route('/')
@minify_decorators.minify(html=True, js=True, cssless=True)
def example():
return '<h1>Example...</h1>'
```
## Options:
Option | type | Description
-------------------|----------|-------------
app | `object` | `Flask` app instance to be passed (default: `None`)
html | `bool` | minify HTML (default: `True`)
js | `bool` | minify JavaScript output (default: `True`)
cssless | `bool` | minify CSS or Less. (default: `True`)
fail_safe | `bool` | avoid raising error while minifying (default: `True`)
bypass | `list` | endpoints to bypass minifying for, supports `Regex` (default: `[]`)
bypass_caching | `list` | endpoints to bypass caching for, supports `Regex` (default: `[]`)
caching_limit | `int` | limit the number of cached response variations (default: `2`).
passive | `bool` | disable active minifying, to use *decorators* instead (default: `False`)
static | `bool` | enable minifying static files css, less and js (default: `True`)
script_types | `list` | script types to limit js minification to (default: `[]`)
parsers | `dict` | parsers to handle minifying specific tags, mainly for advanced customization (default: `{}`)
go | `bool` | prefer go minifier, if optional go dependency is installed (default: `True`)
#### - `bypass` and `bypass_caching`
`endpoint` in this context is the name of the function decorated with `@app.route`
so in the following example the endpoint will be `root`:
```python
@app.route('/root/<id>')
def root(id):
return id
```
both options can handle regex patterns as input so for example, if you want to bypass all routes on a certain blueprint
you can just pass the pattern as such:
```python
Minify(app, bypass=['blueprint_name.*'])
```
#### - `caching_limit`
if the option is set to `0`, we'll not cache any response, so if you want to **disable caching** just do that.
#### - `script_types`
when using the option include `''` (empty string) in the list to include script blocks which are missing the `type` attribute.
#### - `parsers`
allows passing tag specific options to the module responsible for the minification, as well as replacing the default parser with another included option or your own custom one.
In the following example will replace the default `style` (handles CSS) parser `rcssmin` with `lesscpy`:
```python
from flask_minify import Minify, parsers as minify_parsers
parsers = {'style': minify_parsers.Lesscpy}
Minify(app=app, parsers=parsers)
```
you can override the default parser runtime options as well, as shown in the following example:
```python
from flask_minify import Minify, parsers as minify_parsers
class CustomCssParser(minify_parsers.Lesscpy):
runtime_options = {
**minify_parsers.Lesscpy.runtime_options,
"xminify": False,
}
parsers = {'style': CustomCssParser}
Minify(app=app, parsers=parsers)
```
the **default** parsers are set to `{"html": Html, "script": Jsmin, "style": Rcssmin}` check out [the code](https://github.com/mrf345/flask_minify/blob/master/flask_minify/parsers.py) for more insight.
## Development:
- *Tests*: `make test`
- *Style check*: `make lint`
- *Format code*: `make format`
## Breaking changes
#### `0.44`
Introduced more performant parsers that will be enabled by default, if you're running Linux and the optional `Go` dependency is installed [tdewolff-minify](https://pypi.org/project/tdewolff-minify/). You can disable that behavior using `minify(go=False)`.
#### `0.40`
Due to a future deprecation in Flask 2.3, the extension is no longer going to fallback to `Flask._app_ctx_stack`, it will raise an exception instead (`flask_minify.exceptions.MissingApp`)
#### `0.33`
introduces a breaking change to the expected output, in this release `lesscpy` will be replaced by `cssmin` as
the default css minifier so no more `less` compiling by default. in case you don't want that, follow [this example](https://github.com/mrf345/flask_minify#--parsers).
Raw data
{
"_id": null,
"home_page": "https://github.com/mrf345/flask_minify/",
"name": "Flask-Minify",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "flask, extension, minifer, htmlmin, lesscpy, jsmin, html, js, less, css",
"author": "Mohamed Feddad",
"author_email": "mrf345@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/c2/eb/1cf5673e4c73a57e5f910d30d842dcc1d57f70f4995c93f914151acecccf/Flask-Minify-0.48.tar.gz",
"platform": "any",
"description": "<h1 align='center'> flask_minify </h1>\n<p align='center'>\n<a href='https://pypi.org/project/Flask-Minify/'>\n <img src='https://img.shields.io/github/v/tag/mrf345/flask_minify' alt='Latest Release' />\n</a>\n<a href='https://github.com/mrf345/flask_minify/actions/workflows/ci.yml'>\n <img src='https://github.com/mrf345/flask_minify/actions/workflows/ci.yml/badge.svg'>\n</a>\n<br />\n<img src='https://img.shields.io/pypi/pyversions/flask_minify' alt='Supported versions' />\n<br />\n<a href='https://github.com/mrf345/flask_minify/actions/workflows/ci.yml'>\n <img src='https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/mrf345/bc746d7bfe356b54fbb93b2ea5d0d2a4/raw/flask_minify__heads_master.json' alt='Coverage Percentage' />\n</a>\n<a href='https://github.com/PyCQA/bandit'>\n <img src='https://img.shields.io/badge/security-bandit-yellow.svg' alt='security: bandit' />\n</a>\n<a href='https://github.com/psf/black'>\n <img src='https://img.shields.io/badge/style-black-000000.svg' alt='Code Style Black' />\n</a>\n<br />\n</p>\n\n<h3 align='center'>Flask extension to parse and minify html, javascript, css and less.</h3>\n\n## Install:\n\nWith **pip**\n\n- `pip install Flask-Minify`\n\nfor better performance (almost two times) you can use the optional [go dependency](https://pypi.org/project/tdewolff-minify/) [only Linux supported]\n\n- `pip install Flask-Minify[go]`\n\nWith **setup-tools**\n\n- `git clone https://github.com/mrf345/flask_minify.git`\n- `cd flask_minify`\n- `python setup.py install`\n\n## Setup:\n\nIn this example the extension will minify every HTML request, unless it's explicitly bypassed.\n\n```python\nfrom flask import Flask\nfrom flask_minify import Minify\n\napp = Flask(__name__)\nMinify(app=app, html=True, js=True, cssless=True)\n```\n\nAnother approach is using **decorators**, you can set the extension to be `passive` so will only minify the decorated routes\n\n```python\nfrom flask import Flask\nfrom flask_minify import Minify, decorators as minify_decorators\n\napp = Flask(__name__)\nMinify(app=app, passive=True)\n\n@app.route('/')\n@minify_decorators.minify(html=True, js=True, cssless=True)\ndef example():\n return '<h1>Example...</h1>'\n```\n\n## Options:\n\n\nOption | type | Description\n-------------------|----------|-------------\n app | `object` | `Flask` app instance to be passed (default: `None`)\n html | `bool` | minify HTML (default: `True`)\n js | `bool` | minify JavaScript output (default: `True`)\n cssless | `bool` | minify CSS or Less. (default: `True`)\n fail_safe | `bool` | avoid raising error while minifying (default: `True`)\n bypass | `list` | endpoints to bypass minifying for, supports `Regex` (default: `[]`)\n bypass_caching | `list` | endpoints to bypass caching for, supports `Regex` (default: `[]`)\n caching_limit | `int` | limit the number of cached response variations (default: `2`).\n passive | `bool` | disable active minifying, to use *decorators* instead (default: `False`)\n static | `bool` | enable minifying static files css, less and js (default: `True`)\n script_types | `list` | script types to limit js minification to (default: `[]`)\n parsers | `dict` | parsers to handle minifying specific tags, mainly for advanced customization (default: `{}`)\n go | `bool` | prefer go minifier, if optional go dependency is installed (default: `True`)\n\n\n#### - `bypass` and `bypass_caching`\n\n`endpoint` in this context is the name of the function decorated with `@app.route`\nso in the following example the endpoint will be `root`:\n\n```python\n@app.route('/root/<id>')\ndef root(id):\n return id\n```\n\nboth options can handle regex patterns as input so for example, if you want to bypass all routes on a certain blueprint\nyou can just pass the pattern as such:\n\n```python\nMinify(app, bypass=['blueprint_name.*'])\n```\n\n#### - `caching_limit`\n\nif the option is set to `0`, we'll not cache any response, so if you want to **disable caching** just do that.\n\n\n#### - `script_types`\n\nwhen using the option include `''` (empty string) in the list to include script blocks which are missing the `type` attribute.\n\n#### - `parsers`\n\nallows passing tag specific options to the module responsible for the minification, as well as replacing the default parser with another included option or your own custom one.\n\nIn the following example will replace the default `style` (handles CSS) parser `rcssmin` with `lesscpy`:\n\n```python\nfrom flask_minify import Minify, parsers as minify_parsers\n\nparsers = {'style': minify_parsers.Lesscpy}\n\nMinify(app=app, parsers=parsers)\n```\n\nyou can override the default parser runtime options as well, as shown in the following example:\n\n```python\nfrom flask_minify import Minify, parsers as minify_parsers\n\nclass CustomCssParser(minify_parsers.Lesscpy):\n runtime_options = {\n **minify_parsers.Lesscpy.runtime_options,\n \"xminify\": False,\n }\n\nparsers = {'style': CustomCssParser}\n\nMinify(app=app, parsers=parsers)\n```\n\nthe **default** parsers are set to `{\"html\": Html, \"script\": Jsmin, \"style\": Rcssmin}` check out [the code](https://github.com/mrf345/flask_minify/blob/master/flask_minify/parsers.py) for more insight.\n\n\n## Development:\n\n- *Tests*: `make test`\n- *Style check*: `make lint`\n- *Format code*: `make format`\n\n## Breaking changes\n\n#### `0.44`\nIntroduced more performant parsers that will be enabled by default, if you're running Linux and the optional `Go` dependency is installed [tdewolff-minify](https://pypi.org/project/tdewolff-minify/). You can disable that behavior using `minify(go=False)`.\n\n#### `0.40`\n\nDue to a future deprecation in Flask 2.3, the extension is no longer going to fallback to `Flask._app_ctx_stack`, it will raise an exception instead (`flask_minify.exceptions.MissingApp`)\n\n#### `0.33`\n\nintroduces a breaking change to the expected output, in this release `lesscpy` will be replaced by `cssmin` as\nthe default css minifier so no more `less` compiling by default. in case you don't want that, follow [this example](https://github.com/mrf345/flask_minify#--parsers). \n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Flask extension to minify html, css, js and less.",
"version": "0.48",
"project_urls": {
"Download": "https://github.com/mrf345/flask_minify/archive/0.48.tar.gz",
"Homepage": "https://github.com/mrf345/flask_minify/"
},
"split_keywords": [
"flask",
" extension",
" minifer",
" htmlmin",
" lesscpy",
" jsmin",
" html",
" js",
" less",
" css"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "77a11b1c2ee985386e90738a8c8a8690f71ae56c32221e10a885a384f7669ad6",
"md5": "e7103495aedbdcf2d68bd8a5bfeff29f",
"sha256": "db1c86efc1b405703cf147f253fb974790d954a82c26e350eb893afa800010b9"
},
"downloads": -1,
"filename": "Flask_Minify-0.48-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e7103495aedbdcf2d68bd8a5bfeff29f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 11776,
"upload_time": "2024-07-14T20:15:11",
"upload_time_iso_8601": "2024-07-14T20:15:11.396185Z",
"url": "https://files.pythonhosted.org/packages/77/a1/1b1c2ee985386e90738a8c8a8690f71ae56c32221e10a885a384f7669ad6/Flask_Minify-0.48-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c2eb1cf5673e4c73a57e5f910d30d842dcc1d57f70f4995c93f914151acecccf",
"md5": "cd75a5188abebf61214c6cf0c10c9e04",
"sha256": "0c2e5d6526e6db02d7a05dcdb16da19c21b0cc82f952b0a91adbfca5e4269098"
},
"downloads": -1,
"filename": "Flask-Minify-0.48.tar.gz",
"has_sig": false,
"md5_digest": "cd75a5188abebf61214c6cf0c10c9e04",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10282,
"upload_time": "2024-07-14T20:15:19",
"upload_time_iso_8601": "2024-07-14T20:15:19.393111Z",
"url": "https://files.pythonhosted.org/packages/c2/eb/1cf5673e4c73a57e5f910d30d842dcc1d57f70f4995c93f914151acecccf/Flask-Minify-0.48.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-14 20:15:19",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "mrf345",
"github_project": "flask_minify",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "flask-minify"
}