Compare commits

..

No commits in common. "e3772d63a3143d9bbbb3af56f11f77e3de82a202" and "6913498941ea13c901dadc1f1d292bfd5cb74bfd" have entirely different histories.

3 changed files with 56 additions and 81 deletions

View file

@ -1,35 +1,30 @@
import json
class DataRange:
class DataRange():
def __init__(self):
self.start = ""
self.end = ""
class Address:
class Address():
def __init__(self):
self.region = ""
self.country = ""
class Organisation:
class Organisation():
def __init__(self):
self.name = ""
self.address = Address()
class CvPosition:
class CvPosition():
def __init__(self):
self.role = ""
self.organisation = Organisation()
self.date_range = DateRange()
class AcademicEnrolement(CvPosition):
def __init__(self):
@ -37,8 +32,7 @@ class AcademicEnrolement(CvPosition):
self.program = ""
self.grade = ""
class Award:
class Award():
def __init__(self):
self.year = ""
@ -46,21 +40,18 @@ class Award:
self.title = ""
self.event = ""
class CvSection:
class CvSection():
def __init__():
self.title = ""
class CvRoles(CvSection):
def __init__(self):
super().__init__()
self.roles = []
class Author:
class Author():
def __init__(self):
self.first_name = ""
@ -69,31 +60,27 @@ class Author:
self.orcid = ""
self.website = ""
class Event:
class Event():
def __init__(self):
self.title = ""
self.address = Address()
self.date = ""
class BibliographicItem:
class BibliographicItem():
def __init__(self):
self.authors = []
self.title = []
class TeachingRole:
class TeachingRole():
def __init__(self):
self.title = ""
self.course = ""
self.institute = Organisation()
class Cv:
class Cv():
def __init__(self):
self.sections: list[CvSection] = []

View file

@ -3,17 +3,14 @@ import argparse
import logging
from pathlib import Path
from .site_generator import generate, Config
from .site_generator import SiteGenerator
logger = logging.getLogger(__name__)
def generate(source_dir:Path, build_dir: Path):
def cli_generate(source_dir: Path, build_dir: Path):
config = Config(source_dir.resolve(), build_dir.resolve())
generate(config)
generator = SiteGenerator(source_dir, build_dir)
generator.run()
def main_cli():
parser = argparse.ArgumentParser()
@ -23,12 +20,11 @@ def main_cli():
help="Path to the build output",
)
parser.add_argument(
"--source_dir", type=Path, default=Path(), help="Site source directory"
)
"--source_dir", type=Path, default=Path(),
help="Site source directory")
args = parser.parse_args()
cli_generate(args.source_dir, args.build_dir)
generate(args.source_dir, args.build_dir)
if __name__ == "__main__":
main_cli()

View file

@ -1,59 +1,51 @@
from pathlib import Path
import os
import shutil
from dataclasses import dataclass
from markdown_it import MarkdownIt
class SiteGenerator():
@dataclass(frozen=True)
class Config:
source_dir: Path
build_dir: Path
def __init__(self, source_dir: Path,
build_dir: Path):
self.source_dir = source_dir.resolve()
self.build_dir = build_dir.resolve()
self.parser = MarkdownIt()
def run(self):
header_src = ""
footer_src = ""
header_path = self.source_dir / "templates/header.html"
footer_path = self.source_dir / "templates/footer.html"
if header_path.exists():
with open(header_path, 'r', encoding='utf-8') as f:
header_src = f.read()
if footer_path.exists():
with open(footer_path, 'r', encoding='utf-8') as f:
footer_src = f.read()
static_dir = self.source_dir / "static"
build_static_dir = self.build_dir / "static"
if static_dir.exists():
if build_static_dir.exists():
shutil.rmtree(build_static_dir)
shutil.copytree(static_dir, self.build_dir / "static")
for md_file in self.source_dir.glob('**/*.md'):
with open(md_file, 'r', encoding='utf-8') as f:
md_src = f.read()
md_dir = md_file.parent.relative_to(self.source_dir)
html_path = self.build_dir / md_dir / (str(md_file.stem) + ".html")
os.makedirs(html_path.parent, exist_ok=True)
html_src = self.parser.render(md_src)
with open(html_path, 'w', encoding='utf-8') as f:
f.write(header_src + html_src + footer_src)
def _read_if_exists(path: Path) -> str:
if path.exists():
with open(path, "r", encoding="utf-8") as f:
return f.read()
return ""
def _replace_content(src: Path, dst: Path):
if src.exists():
if dst.exists():
shutil.rmtree(dst)
shutil.copytree(src, dst)
def _write_file(path: Path, content: str):
os.makedirs(path.parent, exist_ok=True)
with open(path, "w", encoding="utf-8") as f:
f.write(content)
def _read_file(path: Path) -> str:
with open(path, "r", encoding="utf-8") as f:
return f.read()
def generate(config: Config):
static_dir = config.source_dir / "static"
build_static_dir = config.build_dir / "static"
_replace_content(static_dir, build_static_dir)
template_dir = config.source_dir / "templates"
header = _read_if_exists(template_dir / "header.html")
footer = _read_if_exists(template_dir / "footer.html")
parser = MarkdownIt()
sources = config.source_dir.glob("**/*.md")
for source in sources:
source_dir = source.parent.relative_to(config.source_dir)
output_path = config.build_dir / source_dir / (str(source.stem) + ".html")
content = _read_file(source)
output = parser.render(content)
_write_file(output_path, header + output + footer)