#!/usr/bin/env python import os import json from config import PATH_PARTIAL, PATH_SRC, PATH_THEME, PATH_THEME_DEST, \ PATH_DEST, FILE_SITE, THEME from chevron import render from typing import Dict from shutil import copytree, rmtree DEF_THEME = 'shop' def read_json(json_file:str) -> Dict: """ read site.json """ with open(json_file, "rt") as fh: return json.loads(fh.read()) return {} def build_file(hash, file:str) -> str: """ @file: str filename of mustache @return: str html populated. """ with open(file, "rt") as fh: return render(template=fh, data=hash, partials_path=PATH_PARTIAL) def build_all(): # theme global THEME if not THEME: THEME = DEF_THEME theme_src_dir = os.path.join(PATH_THEME, THEME) theme_dest_dir = PATH_THEME_DEST # remote old theme try: rmtree(theme_dest_dir) except Exception: pass # copy theme try: copytree(theme_src_dir, theme_dest_dir) except Exception as e: print('ERROR: theme error:', e) exit(-1) hash = read_json(FILE_SITE) for r, _, fl in os.walk(PATH_SRC): for f in fl: rpath = os.path.join(r, f) fn, _ = os.path.splitext(f) hash[fn] = f html_str = build_file(hash, rpath) if not html_str: print('WARNING: empty output:', rpath) del(hash[fn]) rhtml = os.path.join(PATH_DEST, '{}.html'.format(fn)) with open(rhtml, 'wt') as fh: fh.write(html_str) if __name__ == '__main__': build_all()