From be0d907de78c4689708573c03105059e04d2419f Mon Sep 17 00:00:00 2001 From: Kévin Le Gouguec Date: Mon, 28 Sep 2020 22:10:56 +0200 Subject: Factor some code out To make it easier to add a pre-processing step for Org files. --- repo/www/generate-index.py | 21 ++++++++++----------- repo/www/generate-page.py | 9 ++++++--- repo/www/helpers.py | 44 +++++++++++++++++++++++++++----------------- 3 files changed, 43 insertions(+), 31 deletions(-) (limited to 'repo/www') diff --git a/repo/www/generate-index.py b/repo/www/generate-index.py index 16d1874..3fe1212 100755 --- a/repo/www/generate-index.py +++ b/repo/www/generate-index.py @@ -10,7 +10,7 @@ from tempfile import NamedTemporaryFile from git import Repo -from helpers import deserialize_directories, generate_crumbs, pandoc +from helpers import deserialize_directories, generate_crumbs, PandocRunner def parse_arguments(): @@ -103,6 +103,11 @@ def main(arguments): if arguments.site_title is not None: metadata['sitetitle'] = arguments.site_title + pandoc = PandocRunner( + arguments.output, arguments.template, arguments.filters, + stylesheets, variables + ) + if readme is not None: repo_top = Repo(search_parent_directories=True).working_dir readme_path = Path(repo_top, target, readme) @@ -117,11 +122,8 @@ def main(arguments): toc.write(html_toc) toc.flush() - pandoc( - readme_path, arguments.output, - arguments.template, arguments.filters, stylesheets, - include_after=(toc.name,), - variables=variables, metadata=metadata + pandoc.run( + readme_path, include_after=(toc.name,), metadata=metadata ) return @@ -133,11 +135,8 @@ def main(arguments): metadata['pagetitle'] = toc_title metadata['title'] = 'Index' - pandoc( - dummy_readme.name, arguments.output, - arguments.template, arguments.filters, stylesheets, - include_after=(toc.name,), - variables=variables, metadata=metadata + pandoc.run( + dummy_readme.name, include_after=(toc.name,), metadata=metadata ) diff --git a/repo/www/generate-page.py b/repo/www/generate-page.py index cb2317b..bbe1288 100755 --- a/repo/www/generate-page.py +++ b/repo/www/generate-page.py @@ -6,7 +6,7 @@ from pathlib import Path from git import Repo -from helpers import generate_crumbs, pandoc +from helpers import generate_crumbs, PandocRunner def parse_arguments(): @@ -44,13 +44,16 @@ def main(arguments): page_path = Path(arguments.page).resolve().relative_to(repo_top) - pandoc( - arguments.page, + pandoc = PandocRunner( arguments.output, arguments.template, arguments.filters, stylesheets, variables={'crumbs': generate_crumbs(page_path)}, + ) + + pandoc.run( + arguments.page, metadata={'pagetitle': arguments.title, 'sitetitle': arguments.site_title} ) diff --git a/repo/www/helpers.py b/repo/www/helpers.py index 48ebccf..dbab622 100644 --- a/repo/www/helpers.py +++ b/repo/www/helpers.py @@ -2,8 +2,9 @@ from collections import defaultdict from dataclasses import dataclass, field from itertools import chain from os import environ, path +from pathlib import Path from subprocess import run -from typing import Iterator +from typing import Dict, Iterator, Union @dataclass @@ -56,26 +57,35 @@ def deserialize_directories(directories): } -def pandoc(page, output, template, filters, stylesheets, include_after=(), - variables=None, metadata=None): - cmd = ( - 'pandoc', '-s', page, '-o', output, '--template', template, - *chain(*(('--lua-filter', f) for f in filters)), - *chain(*(('--css', s) for s in stylesheets)), - *chain(*(('--include-after-body', f) for f in include_after)) - ) +_PathArg = Union[Path, str, bytes] + +@dataclass +class PandocRunner: + output: _PathArg + template: _PathArg + filters: Iterator[_PathArg] + stylesheets: Iterator[_PathArg] + variables: Dict[str, str] = field(default_factory=dict) + + def run(self, page, include_after=(), metadata=None): + cmd = ( + 'pandoc', '-s', page, '-o', self.output, + '--template', self.template, + *chain(*(('--lua-filter', f) for f in self.filters)), + *chain(*(('--css', s) for s in self.stylesheets)), + *chain(*(('--include-after-body', f) for f in include_after)) + ) - if variables is not None: - cmd += tuple(chain( - *(('-V', f'{k}={v}') for k, v in variables.items()) - )) - if metadata is not None: cmd += tuple(chain( - *(('-M', f'{k}={v}') for k, v in metadata.items()) + *(('-V', f'{k}={v}') for k, v in self.variables.items()) )) + if metadata is not None: + cmd += tuple(chain( + *(('-M', f'{k}={v}') for k, v in metadata.items()) + )) - environ['LUA_PATH'] = '.cache/?.lua;;' - run(cmd, check=True) + environ['LUA_PATH'] = '.cache/?.lua;;' + run(cmd, check=True) def generate_crumbs(target): -- cgit v1.2.3