#!/usr/bin/env python # -*- coding: utf-8 -*- ## launch with python web2py.py -S myapp -R scripts/zip_static_files.py import os import gzip def zip_static(filelist=[]): tsave = 0 for fi in filelist: extension = os.path.splitext(fi) extension = len(extension) > 1 and extension[1] or None if not extension or extension not in ALLOWED_EXTS: print('skipping %s' % os.path.basename(fi)) continue fstats = os.stat(fi) atime, mtime = fstats.st_atime, fstats.st_mtime gfi = fi + '.gz' if os.path.isfile(gfi): zstats = os.stat(gfi) zatime, zmtime = zstats.st_atime, zstats.st_mtime if zatime == atime and zmtime == mtime: print('skipping %s, already gzipped to the latest version' % os.path.basename(fi)) continue print('gzipping %s to %s' % ( os.path.basename(fi), os.path.basename(gfi))) f_in = open(fi, 'rb') f_out = gzip.open(gfi, 'wb') f_out.writelines(f_in) f_out.close() f_in.close() os.utime(gfi, (atime, mtime)) saved = fstats.st_size - os.stat(gfi).st_size tsave += saved print('saved %s KB' % (int(tsave) / 1000.0)) if __name__ == '__main__': ALLOWED_EXTS = ['.css', '.js'] static_path = os.path.abspath(os.path.join(request.folder, 'static')) filelist = [] for root, dir, files in os.walk(static_path): for file in files: filelist.append(os.path.join(root, file)) zip_static(filelist)