Files
blog-src/blog/blog.py
2025-06-03 17:30:03 +02:00

68 lines
2.1 KiB
Python

import glob
import shutil
from pathlib import Path
from blog.page import Page
from blog.config import Config
from jinja2 import Environment, FileSystemLoader, Template
class Blog:
def __init__(self, conf: Config):
""" """
self.conf = conf
self.pages = dict()
def load_pages(self):
"""Charge tous les fichiers .md dans le dossier inbox"""
files_list = glob.glob(f"{self.conf.inbox}/*.md")
self.pages = dict()
for file in files_list:
self.pages[Path(file).stem] = Page(Path(file))
def make(self):
"""Convertit les pages en un site html"""
if not self.pages:
self.load_pages()
env = Environment(loader=FileSystemLoader(self.conf.theme))
page_template = env.get_template("page.html.j2")
index_template = env.get_template("index.html.j2")
self._copy_css()
self._build_all_pages(page_template)
self._build_index(index_template)
def _build_all_pages(self, template: Template):
"""Convertit les pages markdown dans conf.inbox en html dans conf.outbox"""
outbox_path = Path(f"{self.conf.outbox}/pages")
if not outbox_path.is_dir():
outbox_path.mkdir()
for filename in self.pages:
html_content = self.pages[filename].html(template)
with open(f"{self.conf.outbox}/pages/{filename}.html", "w+") as html_file:
html_file.write(html_content)
def _build_index(self, template: Template):
"""Crée l'index du blog."""
html_content = template.render(
pages=self.pages, title=self.conf.title, presentation=self.conf.presentation
)
with open(f"{self.conf.outbox}/index.html", "w+") as html_file:
html_file.write(html_content)
def _copy_css(self):
css_path = Path(self.conf.theme) / 'css'
dest_path = Path(self.conf.outbox) / 'css'
if not dest_path.exists():
dest_path.mkdir()
for css_file in css_path.glob('*.css'):
dest_file = dest_path / css_file.name
shutil.copy(css_file, dest_file)