uwat.cc/build.py

66 lines
1.6 KiB
Python
Raw Normal View History

2018-12-05 23:10:18 -05:00
import errno
import os
from hashlib import sha256
from rcssmin import cssmin
DIR = os.path.dirname(__file__)
SRC_DIR = os.path.join(DIR, 'src')
DIST_DIR = os.path.join(DIR, 'dist')
ASSETS_SRC = os.path.join(SRC_DIR, 'assets')
ASSETS_DIST = os.path.join(DIST_DIR, 'assets')
bytes = type(b'')
def build_assets():
name_map = []
for asset in os.listdir(ASSETS_SRC):
name, ext = os.path.splitext(asset)
if not ext:
continue
with open(os.path.join(ASSETS_SRC, asset), 'rb') as f:
content = f.read()
hash = sha256(content).hexdigest()[:20]
dist_name = '%s-%s%s' % (name, hash, ext)
if ext == '.css':
content = cssmin(content)
with open(os.path.join(ASSETS_DIST, dist_name), 'wb') as f:
f.write(content)
name_map.append((bytes(asset), bytes(dist_name)))
return name_map
def build_files(html_replace):
for name in os.listdir(SRC_DIR):
src_path = os.path.join(SRC_DIR, name)
if not os.path.isfile(src_path):
continue
with open(os.path.join(SRC_DIR, name), 'rb') as f:
content = f.read()
if name.endswith('.html'):
for old, new in html_replace:
content = content.replace(old, new)
with open(os.path.join(DIST_DIR, name), 'wb') as f:
f.write(content)
def main():
try:
os.makedirs(ASSETS_DIST)
except OSError as e:
if e.errno != errno.EEXIST:
raise
name_map = build_assets()
build_files(name_map)
if __name__ == '__main__':
main()