Files
blog-src/blog/blog.py
2025-06-01 12:21:49 +02:00

77 lines
2.3 KiB
Python

import glob
import shutil
from pathlib import Path
from blog.page import Page
from blog.config import Config
from blog.theme import Theme
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._build_all_pages(page_template)
self._build_index(index_template)
self._copy_css()
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)
# dest = Path(str(dest_path) + '/' + Path(css_file).stem() + '.css')
# dest.write_text(Path(css_file).read_text)