This commit is contained in:
SG
2025-06-17 16:22:47 +03:00
parent 4ea54eaa91
commit 326e5c5edd
7 changed files with 77 additions and 51 deletions

View File

@@ -5,16 +5,15 @@ import shutil
from collections import defaultdict
import markdown
import frontmatter
from bs4 import BeautifulSoup
from pathlib import Path
from logger import logger
from config import Config
from config import config
#from jinja_env import env, content_item_template, index_template
from jinja2 import Environment, FileSystemLoader
# get the scrip directory
if Path(f'themes/{Config.THEME}/templates').exists():
# Get the script base_dir and check for templates dir
if Path(f'themes/{config.theme}/templates').exists():
base_dir = "."
elif getattr(sys, 'frozen', False):
# Running fron Pyinstaller-packed binary
@@ -24,9 +23,9 @@ else:
base_dir = Path(__file__).resolve().parent
# Prepare template rendering engine
if Path(f"themes/{Config.THEME}/templates").exists():
if Path(f"themes/{config.theme}/templates").exists():
# Use the templates from the initialized site instance and the installed theme
jinja_env_dir = f"themes/{Config.THEME}/templates"
jinja_env_dir = f"themes/{config.theme}/templates"
print("USING LOCALLY INITIALIZED THEMES")
else:
# Use default templates from the default theme shipped with the app
@@ -34,7 +33,7 @@ else:
print("USING DEFAULT THEMES")
jinja_env_dir = f"{base_dir}/themes/default/templates"
env = Environment(loader=FileSystemLoader(f"{jinja_env_dir}"))
env.globals['header_image'] = f"{base_dir}/themes/{Config.THEME}/static/images/header.jpg"
env.globals['header_image'] = f"{base_dir}/themes/{config.theme}/static/images/header.jpg"
index_template = env.get_template("index.html")
content_item_template = env.get_template("content_item.html")
print(env.loader.searchpath)
@@ -46,20 +45,20 @@ class ContentItem:
logger.debug(f"Rendering {self.source_file} to {self.target_file}")
try:
if self.image_file and self.image_file.exists():
image_targetfile = Path(f"{Config.OUTPUT_DIR}/{Config.STATIC_DIR}/images/{self.image_file.name}")
image_targetfile = Path(f"{config.output_dir}/{config.static_dir}/images/{self.image_file.name}")
logger.debug(f"Copying {self.image_file} to {image_targetfile}")
shutil.copyfile(self.image_file, image_targetfile)
self.image_file = f"{self.image_file.stem}.jpg"
if self.css_file and self.css_file.exists():
css_targetfile = Path(f"{Config.OUTPUT_DIR}/{Config.STATIC_DIR}/css/{self.css_file.name}")
css_targetfile = Path(f"{config.output_dir}/{config.static_dir}/css/{self.css_file.name}")
logger.debug(f"Copying {self.css_file} to {css_targetfile}")
shutil.copyfile(self.css_file, css_targetfile)
if self.js_file and self.js_file.exists():
js_targetfile = Path(f"{Config.OUTPUT_DIR}/{Config.STATIC_DIR}/js/{self.js_file.name}")
js_targetfile = Path(f"{config.output_dir}/{config.static_dir}/js/{self.js_file.name}")
logger.debug(f"Copying {self.js_file} to {js_targetfile}")
shutil.copyfile(self.js_file, js_targetfile)
with self.target_file.open("w", encoding="utf-8") as f:
f.write(content_item_template.render(content_item = self, page_title = f"{Config.MAIN_PAGE_TITLE}: {self.title}", parent_path = '../', categories = categories))
f.write(content_item_template.render(content_item = self, page_title = f"{config.site_name}: {self.title}", parent_path = '../', categories = categories))
except Exception as e:
logger.error(f"Renderer: {e}")
@@ -69,7 +68,7 @@ class ContentItem:
self.source_file = Path(self.source_file)
self.parent_dir = self.source_file.parent
self.slug = self.source_file.stem
self.target_file = Path(f"{Config.OUTPUT_DIR}/{self.source_file.parent}/{self.source_file.stem}.html")
self.target_file = Path(f"{config.output_dir}/{self.source_file.parent}/{self.source_file.stem}.html")
self.data = frontmatter.load(self.source_file)
self.preview = self.data.content.replace('\n', '<br>')[:300]
self.title = self.data.get("title", self.slug)
@@ -109,14 +108,14 @@ class ContentItem:
class Site:
def __init__(self):
self.output_dir = Path(Config.OUTPUT_DIR)
self.content_dir = Path(Config.CONTENT_DIR)
self.static_dir = Path(Config.STATIC_DIR)
self.templates_dir = Path(Config.TEMPLATES_DIR)
self.images_dir = Path(f"{Config.STATIC_DIR}/images")
self.css_dir = Path(f"{Config.STATIC_DIR}/css")
self.js_dir = Path(f"{Config.STATIC_DIR}/js")
self.output_dir = Path(Config.OUTPUT_DIR)
self.output_dir = Path(config.output_dir)
self.content_dir = Path(config.content_dir)
self.static_dir = Path(config.static_dir)
self.templates_dir = Path(config.templates_dir)
self.images_dir = Path(f"{config.static_dir}/images")
self.css_dir = Path(f"{config.static_dir}/css")
self.js_dir = Path(f"{config.static_dir}/js")
self.output_dir = Path(config.output_dir)
self.content_items = []
self.categories = defaultdict(list)
@@ -132,8 +131,8 @@ class Site:
def get_content_items(self):
logger.debug("Getting content items")
self.get_content_items = []
logger.debug(f"Scanning {Path(Config.CONTENT_DIR)}")
for md_file in Path(Config.CONTENT_DIR).glob("*.md"):
logger.debug(f"Scanning {Path(config.content_dir)}")
for md_file in Path(config.content_dir).glob("*.md"):
content_item = ContentItem(md_file)
content_item.parse_content()
self.content_items.append(content_item)
@@ -159,7 +158,7 @@ class Site:
subdir.mkdir(parents=True, exist_ok=True)
# Copy theme's static dir to 'public/static
shutil.copytree(f"{base_dir}/themes/{Config.THEME}/static", f"{self.output_dir}/static", dirs_exist_ok=True)
shutil.copytree(f"{base_dir}/themes/{config.theme}/static", f"{self.output_dir}/static", dirs_exist_ok=True)
# Get content items
self.get_content_items()
@@ -172,14 +171,14 @@ class Site:
content_item.render_content(categories = self.categories)
# Render the about file
about_content = ContentItem(Path(f'themes/{Config.THEME}/content/about.md'))
about_content = ContentItem(Path(f'themes/{config.theme}/content/about.md'))
about_content.parse_content()
about_content.render_content(categories = self.categories, target_file='public/static/about.html')
# Render the index file
visible_content_items = [c for c in self.content_items if c.data.get("hidden") != True]
with (self.output_dir / "index.html").open("w", encoding="utf-8") as f:
f.write(index_template.render(page_title = Config.MAIN_PAGE_TITLE, content_items=visible_content_items, categories = self.categories))
f.write(index_template.render(page_title = config.site_name, content_items=visible_content_items, categories = self.categories))
# Render the categories indices
visible_content_items = [c for c in self.content_items if c.data.get("hidden") != True]
@@ -187,7 +186,7 @@ class Site:
category_index = Path(f"{self.output_dir}/categories/{category}.html")
category_items = [i for i in visible_content_items if category in i.data.get("categories")]
with (category_index).open(mode="w", encoding="utf-8") as f:
f.write(index_template.render(page_title=f"{Config.MAIN_PAGE_TITLE}: {category}", content_items=category_items, categories = self.categories, parent_path = '../'))
f.write(index_template.render(page_title=f"{config.site_name}: {category}", content_items=category_items, categories = self.categories, parent_path = '../'))
logger.info(f"Created {len(self.content_items)} content items.")