Files
hydrogen/hydrogen.py
2025-06-08 20:18:18 +03:00

85 lines
2.3 KiB
Python

#!/usr/bin/env python3
from pathlib import Path
import shutil
from config import Config
from logger import logger
from argparser import argparser
from classes import *
from functions import *
content_dir = Path('content')
template_dir = Path('templates')
output_dir = Path(Config.OUTPUT_DIR)
img_dir = Path('public/images')
assets_css_dir = Path(output_dir / 'static/css')
assets_js_dir = Path(output_dir / 'static/js')
static_dir = Path('static')
header_image = Config.HEADER_IMAGE or '/static/header.jpg'
def build_site_old():
logger.info(f"Building the '{Config.MAIN_PAGE_TITLE}' site.")
# Recreate the output dir if needed
if output_dir.exists():
shutil.rmtree(output_dir)
output_dir.mkdir()
# Create public subdirs
subdirs = [img_dir, assets_css_dir, assets_js_dir]
for subdir in subdirs:
subdir.mkdir(parents=True, exist_ok=True)
# Copy static files if exist
if static_dir.exists():
shutil.copytree(static_dir, output_dir / "static", dirs_exist_ok=True)
# Parse the content files
content_items = []
for md_file in content_dir.glob("*.md"):
current_content_item = ContentItemPrototype(md_file)
current_content_item.render_content()
content_items.append({
"slug": current_content_item.slug,
"title": current_content_item.title,
"date": current_content_item.date,
# "preview": markdown.markdown(current_content_item.preview),
"image": current_content_item.image,
})
# Render the index file
with (output_dir / "index.html").open("w", encoding="utf-8") as f:
f.write(index_template.render(page_title = Config.MAIN_PAGE_TITLE, content_items=content_items))
# Render the about file
about_content = ContentItemPrototype(Path('static/about.md'))
about_content.render_content()
# Move 'robots.txt' into output_dir
shutil.copyfile(static_dir / 'robots.txt', output_dir / 'robots.txt')
logger.info(f"Created {len(content_items)} content items.")
def main():
args = argparser.parse_args()
match args.command:
case "build":
build_site()
case "init":
init_site()
case "new" | "create" | "edit":
edit_content(args.filename)
if __name__ == '__main__':
main()