#!/usr/bin/env python3 import codecs import os from pathlib import Path from time import perf_counter import markdown import minicli from jinja2 import Environment as Env from jinja2 import FileSystemLoader from usine import connect, run HERE = Path(".") FAMILLE = HERE / "famille" environment = Env(loader=FileSystemLoader(str(FAMILLE / "templates"))) def parse_markdown(file_path): """Extract content including footnotes from a markdown file.""" parser = markdown.Markdown(extensions=["footnotes"]) with codecs.open(file_path, "r") as source: return parser.convert(source.read()) def collection(): """Retrieve famille's chapters from markdown files.""" SRC_PATH = FAMILLE / "sources" for chapter in sorted(os.listdir(SRC_PATH)): if chapter.endswith(".md"): content = parse_markdown(SRC_PATH / chapter) yield ( """
{content}
""".format( id=chapter[:-3], content=content.replace("'", "’") ) ) @minicli.cli def generate(): template = environment.get_template("histoire.html") page = template.render(chapters=collection()) open(FAMILLE / "histoire" / "index.html", "w").write(page) @minicli.cli def deploy(): repository = "gitea-repositories/davidbgk/larlet-fr-famille.git" run(f"git archive --remote={repository} master | tar -x -C larlet-fr") print("Deployment done.") @minicli.wrap def perf_wrapper(): start = perf_counter() yield elapsed = perf_counter() - start print(f"Done in {elapsed:.5f} seconds.") if __name__ == "__main__": with connect(hostname="larlet@ssh-larlet.alwaysdata.net"): minicli.run()