Import('env', 'projenv') import os import gzip import shutil try: import minify_html except ImportError: env.Execute("$PYTHONEXE -m pip install minify-html") try: from jsmin import jsmin except ImportError: env.Execute("$PYTHONEXE -m pip install jsmin") data_dir = env.get('PROJECT_DATA_DIR') data_src_dir = os.path.join(env.get('PROJECT_DIR'), 'data_src') def gzip_file(src, dst, delete_source = False): with open(src, 'rb') as f_in, gzip.open(dst + '.gz', 'wb') as f_out: f_out.writelines(f_in) if delete_source: os.remove(src) def minify_file(filename): file_src = os.path.join(data_src_dir, filename) file_dst = os.path.join(data_dir, filename) with open(file_src , 'r', encoding="utf-8") as f_in: if filename.split(".")[-1] == "html": minified = minify_html.minify(f_in.read(), minify_js=True, do_not_minify_doctype=True, keep_html_and_head_opening_tags=True, minify_css=True, remove_processing_instructions=True) elif filename.split(".")[-1] == "js": minified = jsmin(f_in.read()) with open(file_dst, "w", encoding="utf-8") as f_out: f_out.write(minified) gzip_file(file_dst, file_dst, True) def minify_data(source, target, env): if(os.path.exists(data_dir) and not os.path.exists(data_src_dir) ): print(' "data" dir exists, "data_src" not found.') print(' renaming "' + data_dir + '" to "' + data_src_dir + '"') os.rename(data_dir, data_src_dir) if(os.path.exists(data_dir)): print(' Deleting data dir ' + data_dir) shutil.rmtree(data_dir) print(' Re-creating empty data dir ' + data_dir) os.mkdir(data_dir) minify_file('index.html') minify_file('main.js') gzip_file(os.path.join(data_src_dir, 'favicon.ico'), os.path.join(data_dir, 'favicon.ico')) env.AddPreAction('$BUILD_DIR/littlefs.bin', minify_data)