from json import loads from os import walk from os.path import isdir, join, exists from shutil import copytree from typing import Dict from article import Article, Site from template import TemplateEnvironment def compile(work_directory: str, template_directory: str=None, target_directory: str=None, force: bool=False): if not isdir(work_directory): raise FileNotFoundError("One or more of the directories you specified do not exist") if template_directory is None: template_directory = join(work_directory, 'template') if not isdir(template_directory): raise FileNotFoundError("Template doesn't exist. Add one to your project or specify one with -t") if target_directory is None: target_directory = join(work_directory, 'generated_out') if exists(target_directory) and not force: raise FileExistsError(target_directory + " already exists. Delete it, specify a different one with -o, or pass the -f flag to merge") copytree(join(template_directory, 'static'), join(target_directory, 'static'), dirs_exist_ok=True) copytree(join(work_directory, 'posts'), join(target_directory, 'post'), dirs_exist_ok=True) file = open(join(work_directory, 'config.json')) site = Site.from_open_file(file) file.close() template = TemplateEnvironment(template_directory, site) articles = [] for root, dirs, files in walk(join(target_directory, 'post')): for fn in files: if fn.endswith('.html'): file = open(join(root, fn), 'r+') article = Article.from_open_file(file) content = template.process_article(article) file.seek(0) file.write(content) file.close() articles += [article] content = template.process_index(*articles) file = open(join(target_directory, 'index.html'), 'w') file.write(content) file.close()