This commit is contained in:
SG
2025-06-10 20:50:21 +03:00
parent 26c4b9c1e1
commit 7c7dedcfa5
6 changed files with 76 additions and 109 deletions

View File

@@ -10,13 +10,15 @@ from jinja_env import env, content_item_template, index_template
class ContentItem:
def render_content(self):
logger.debug(f"Rendering {self.source_filename} to {Config.OUTPUT_DIR}/{self.target_filename}")
if self.image_file.exists():
shutil.copyfile(self.image_src_file, Path(Config.OUTPUT_DIR) / self.image)
if self.css_file.exists():
shutil.copyfile(self.custom_css_src_file,Path(Config.OUTPUT_DIR) / self.custom_css)
if self.js_file.exists():
shutil.copyfile(self.custom_js_src_file, Path(Config.OUTPUT_DIR) / self.custom_js)
logger.debug(f"Rendering {self.source_filename} to {self.target_filename}")
if self.image_file and self.image_file.exists():
logger.debug(f"Copying {self.image_file} to {Path(Config.OUTPUT_DIR) / self.image_file}")
shutil.copyfile(self.image_file, Path(Config.OUTPUT_DIR) / self.image_file)
self.image_file = f"{self.image_file.stem}.jpg"
if self.css_file and self.css_file.exists():
shutil.copyfile(self.css_file,Path(Config.OUTPUT_DIR) / self.css_file)
if self.js_file and self.js_file.exists():
shutil.copyfile(self.js_file, Path(Config.OUTPUT_DIR) / self.js_file)
with self.target_filename.open("w", encoding="utf-8") as f:
f.write(content_item_template.render(content_item = self, page_title = self.title))
@@ -36,9 +38,10 @@ class ContentItem:
self.date = self.data.get("date", "2000-01-01T00:00:00+03:00")
self.categories = self.data.get("categories", str([]))
self.hidden = self.data.get("hidden", str(False))
self.image_file = Path(self.source_filename.stem + ".jpg")
self.css_file = Path(self.source_filename.stem + ".css")
self.js_file = Path(self.source_filename.stem + ".js")
cover_image_path = Path(self.source_filename.parent) / Path(self.source_filename.stem + ".jpg")
self.image_file = cover_image_path if cover_image_path.exists() else None
self.css_file = Path(self.source_filename.stem + ".css") if Path(self.source_filename.stem + ".css").exists() else None
self.js_file = Path(self.source_filename.stem + ".js") if Path(self.source_filename.stem + ".js").exists else None
except Exception as e:
logger.error(e)
@@ -61,68 +64,65 @@ class ContentItem:
self.source_filename = filename
class Site:
def init_site():
def __init__(self):
self.output_dir = Path(Config.OUTPUT_DIR)
logger.info("Initializing new site")
content_dir = Path(Config.CONTENT_DIR)
static_dir = Path(Config.STATIC_DIR)
templates_dir = Path(Config.TEMPLATES_DIR)
images_dir = Path(f"{Config.STATIC_DIR}/images")
css_dir = Path(f"{Config.STATIC_DIR}/css")
js_dir = Path(f"{Config.STATIC_DIR}/js")
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)
def init_site(self):
# Create directories
for subdir in [content_dir, static_dir, templates_dir, images_dir, css_dir, js_dir]:
for subdir in [self.content_dir, self.static_dir, self.templates_dir,
self.images_dir, self.css_dir, self.js_dir]:
os.makedirs(subdir, exist_ok=True)
# Create templates from literals
import templates
template_names = [t for t in dir(templates) if not t.startswith('_')]
for template_name in template_names:
template_content = getattr(templates, template_name)
with open(templates_dir / f"{template_name}.html", "w", encoding="utf8") as f:
with open(self.templates_dir / f"{template_name}.html", "w", encoding="utf8") as f:
f.write(template_content)
# Create static/about.md
def build_site(self):
def build(self):
# Recreate the output dir if needed
if output_dir.exists():
shutil.rmtree(output_dir)
output_dir.mkdir()
if self.output_dir.exists():
shutil.rmtree(self.output_dir)
self.output_dir.mkdir()
# Create public subdirs
subdirs = [img_dir, css_dir, js_dir]
subdirs = [self.images_dir, self.css_dir, self.js_dir, self.content_dir]
for subdir in subdirs:
subdir.mkdir(arents=True, exist_ok=True)
subdir = self.output_dir / subdir
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)
if self.static_dir.exists():
shutil.copytree(self.static_dir, self.output_dir / self.static_dir, dirs_exist_ok=True)
# Parse the content files
content_items = []
for md_file in content_dir.glob("*.md"):
current_content_item = ContentItemPrototype(md_file)
for md_file in self.content_dir.glob("*.md"):
current_content_item = ContentItem(md_file)
current_content_item.parse_content()
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,
})
content_items.append(current_content_item)
# Render the index file
with (output_dir / "index.html").open("w", encoding="utf-8") as f:
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=content_items))
# Render the about file
about_content = ContentItemPrototype(Path('static/about.md'))
about_content = ContentItem(Path('static/about.md'))
about_content.parse_content()
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 __init__(self):
self.output_dir = Path(Config.OUTPUT_DIR)