SP/web2py/scripts/zip_static_files.py

50 lines
1.5 KiB
Python
Raw Permalink Normal View History

2018-10-25 15:33:07 +00:00
#!/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)