29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from bs4 import BeautifulSoup
|
|
from flask import current_app as app
|
|
import re
|
|
|
|
from . import main
|
|
|
|
@main.after_request
|
|
def prettify_or_minify_html_response(response):
|
|
if response.content_type.startswith("text/html"):
|
|
try:
|
|
html = response.get_data(as_text=True)
|
|
soup = BeautifulSoup(html, 'html5lib')
|
|
|
|
if app.debug:
|
|
pretty_html = soup.prettify()
|
|
response.set_data(pretty_html.encode("utf-8")) # type: ignore
|
|
#else:
|
|
# # Minify by stripping extra whitespace between tags and inside text
|
|
# minified_html = re.sub(r">\s+<", "><", str(soup)) # collapse whitespace between tags
|
|
# minified_html = re.sub(r"\s{2,}", " ", minified_html) # collapse multi-spaces to one
|
|
# minified_html = re.sub(r"\n+", "", minified_html) # remove newlines
|
|
|
|
# response.set_data(minified_html.encode("utf-8")) # type: ignore
|
|
|
|
response.headers['Content-Type'] = 'text/html; charset=utf-8'
|
|
except Exception as e:
|
|
print(f"⚠️ Prettifying/Minifying failed: {e}")
|
|
|
|
return response
|