Skip to main content

HTML Whitespace remover for Flask

Pepy.tech Badge PyPi Version Badge PyPI - Python Version PyPI - License Code Style

Introduction :

A powerful tool to optimize Flask rendered templates

Why use “flask_stip_whitespace” ?

  • Adds line break to InlineJS.

  • It can automagically minify inline CSS, JS.

  • Removes <!–prettier-ignore–> from HTML.

  • It speeds up website by reducing the HTML size.

  • It compiles regex at runtime. So it’s blazing fast.

  • Its mostly based on C ( gzip ) and Rust ( minify-html ) libraries.

  • Significantly lower bytes transferred when working with frameworks like AlpineJs ( Almost fully working & Please open a issue in the Issue Tracker if you encounter any bug) & Petite Vue.

  • Is very customizable. ( You can configure lower level minify-html rust bindings and also the lower level python bindings from flask’s configuration )

Why shouldn’t you use “flask_stip_whitespace” ?

  • You don’t like having unnecessary ‘;;’ in your HTML. ( If you know any regex to fix this please put a pull request )

  • Although I tried my best to use Compiled Language for Optimizations. It can still be sub miliseconds ( > 0.001 ) slower compared to normal Flask Rendering. ( If you know any way to improve performance, please put a pull request )

Requirements :

  • python-strip-whitespace

  • Flask

  • Python 3 ( Should work with all version? )

  • Brotli ( or BrotliPy; pypy ) | ( Optional )

  • ZSTD ( Optional )

User guide :

Installation :

Install with pip from pypi (No extra dependencies):

$ python -m pip install flask_strip_whitespace

Install with pip with Brotli support:

$ python -m pip install flask_strip_whitespace[brotli]

Same but with Zstandard support:

$ python -m pip install flask_strip_whitespace[zstd]

Install with pip from github ( Development | Not Recommended for Production ):

$ python -m pip install https://codeload.github.com/baseplate-admin/flask_strip_whitespace/zip/refs/heads/main

Then include it in your flask project:

from flask_strip_whitespace.middlewares import HTMLStripWhiteSpaceMiddleware

# Declare a dictionary to store config.
# Note that this dictionary must be called before adding wsgi middleware.
STRIP_WHITESPACE_CONFIG : dict = {}

app = Flask(__name__)
app.wsgi_app = HTMLStripWhiteSpaceMiddleware(app.wsgi_app, config=STRIP_WHITESPACE_CONFIG) # Note that config is a python dictionary

Customization :

Change Lower Level Bindings :

Rust :

The module allows rust minifier options to be changed from Flask’s environ variables. If you would like to change any settings, refer to minify-html’s source code.

The bindings are ( by default set to True ):

STRIP_WHITESPACE_RUST_DO_NOT_MINIFY_DOCTYPE, # passes do_not_minify_doctype to minify-html
STRIP_WHITESPACE_RUST_ENSURE_SPEC_CONPLIANT_UNQUOTED_ATTRIBUTE_VALUES, # passes ensure_spec_compliant_unquoted_attribute_values to minify-html
STRIP_WHITESPACE_RUST_KEEP_CLOSING_TAGS, # passes keep_closing_tags to minify-html
STRIP_WHITESPACE_RUST_KEEP_COMMENTS, # passes keep_comments to minify-html
STRIP_WHITESPACE_RUST_KEEP_HTML_AND_HEAD_OPENING_TAGS, # passes keep_html_and_head_opening_tags to minify-html
STRIP_WHITESPACE_RUST_KEEP_SPACES_BETWEEN_ATTRIBUTES, # passes keep_spaces_between_attributes to minify-html
STRIP_WHITESPACE_RUST_MINIFY_CSS, # passes minify_css to minify-html
STRIP_WHITESPACE_RUST_MINIFY_JS, # passes minify_js to minify-html
STRIP_WHITESPACE_RUST_REMOVE_BANGS, # passes remove_bangs to minify-html
STRIP_WHITESPACE_RUST_REMOVE_PROCESSING_INSTRUCTIONS, # passes remove_processing_instructions to minify-html

If you would like to change any of the above variables, simply put them in STRIP_WHITESPACE_CONFIG ( Please note that every variable here is a python boolean ).

For example:

STRIP_WHITESPACE_CONFIG['STRIP_WHITESPACE_RUST_DO_NOT_MINIFY_DOCTYPE'] = False

Python :

The module allows python minifier options to be changed from Flasks’s environ variables. If you would like to change any settings, refer to python-module’s source code.

The bindings are ( by default set to a sane value ):

STRIP_WHITESPACE_PYTHON_REMOVE_COMMENTS, # False | removes comments from HTML using python ( not recommended cause rust can do that just fine and fast )
STRIP_WHITESPACE_PYTHON_CONDENSE_STYLE_FROM_HTML, # True | replaces '<style text/css>' -> '<style>'
STRIP_WHITESPACE_PYTHON_CONDENSE_SCRIPT_FROM_HTML, # True | replaces '<script text/javascript>' -> '<script>'
STRIP_WHITESPACE_PYTHON_CLEAN_UNNEEDED_HTML_TAGS, # True | removes some unnecessary tags
STRIP_WHITESPACE_PYTHON_CONDENSE_HTML_WHITESPACE, # True | This is where the magic happens.
STRIP_WHITESPACE_PYTHON_UNQUOTE_HTML_ATTRIBUTES, # True | This is also a magic module.

If you would like to change any of the above variables, simply put them in STRIP_WHITESPACE_CONFIG ( Please note that every variable here is a python boolean )

For example:

STRIP_WHITESPACE_CONFIG['STRIP_WHITESPACE_PYTHON_REMOVE_COMMENTS'] = True

Change Ignored Paths :

This module allows dynamic ignored path allocation. So for example if your sitemap.xml is at url ‘/sitemap.xml’ and you want to avoid minifying it ( Because this module in lower level is meant to minify HTML not XML ). Then you can add it to ignored path. ( By default it ignores ‘/sitemap.xml’ )

To customize ignored path:

STRIP_WHITESPACE_CONFIG['STRIP_WHITESPACE_MINIFY_IGNORED_PATHS'].append("/robots.txt") # Note that STRIP_WHITESPACE_MINIFY_IGNORED_PATHS is a Python List

Change NBSP Mangle Character :

This module first replaces the &nbsp; character from html with a character. For example &nbsp; becomes ‘অ’ ( I picked ‘অ’ because its a foreign character and not many sites use the character like this ‘অ’ ). If for some reason this character is causing problem in your HTML. You can change this from STRIP_WHITESPACE_CONFIG .

To change &nbsp; mangle character:

# Keep the string as  short as possible.
# If you make it long,
# the python str.replace() method will use more CPU and RAM thus slowing your site down.

STRIP_WHITESPACE_CONFIG["STRIP_WHITESPACE_NBSP_MANGLE_CHARACTER"] = 'ga' # Note that STRIP_WHITESPACE_NBSP_MANGLE_CHARACTER is a python string

Change Compression Settings :

This module can do the work of compressing response to gzip. ( It can also do brotli, zstd 👀 )

To change the compression algorithm ( by default using ‘gzip’ because it’s a python stdlib):

# envrion

STRIP_WHITESPACE_CONFIG["STRIP_WHITESPACE_COMPRESSION_ALGORITHM"] = "gzip" or "br" or "zstd" or "plain"

Contributing :

If you like this project add a star. If you have problems or suggestions please put them in the Issue Tracker. If you like to add features. Fork this repo and submit a Pull Request. 😛

Updates ?? :

This repository is freezed. It will automatically install latest python-strip-whitespace

Metadata

Release files for flask-strip-whitespace 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for flask-strip-whitespace 0.1.0
File Size Uploaded
flask_strip_whitespace-0.1.0.tar.gz 19.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for flask-strip-whitespace 0.1.0
File Interpreter ABI Platform
flask_strip_whitespace-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 37.4 kB

Release files / flask_strip_whitespace-0.1.0.tar.gz

Download URL flask_strip_whitespace-0.1.0.tar.gz
Size 19.2 kB
Tags Source
SHA-256 checksum
How to use checksums
394628753576e62e921887bec8d8c237a60a7a1c3577691a50891989e8e38e4f
BLAKE2b-256 checksum
How to use checksums
51513c7c088ffaa57b9ce31e8d14cc7ae9ed74d393a66b6dba50334b5ec3e89d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.11.1 Windows/10

Release files / flask_strip_whitespace-0.1.0-py3-none-any.whl

Download URL flask_strip_whitespace-0.1.0-py3-none-any.whl
Size 18.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
39b82fec1420ab43f4fcbfc67e13bd199e379373de590496d6ce2de1da3ac4d0
BLAKE2b-256 checksum
How to use checksums
06d937eef7e0fd87428203b0b435ab00b09c4e490022a34eaf00f72f822370e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.3.2 CPython/3.11.1 Windows/10

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.2

1 release file

0.0.1

1 release file

0.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page