Initial conversion script
This commit is contained in:
parent
9ebaf810a2
commit
34915b0d7b
3 changed files with 113 additions and 0 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
/build
|
||||
__pycache__
|
||||
*.pyc
|
||||
.venv
|
||||
|
106
generate_site.py
Normal file
106
generate_site.py
Normal file
|
@ -0,0 +1,106 @@
|
|||
import markdown
|
||||
import argparse
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
|
||||
class SiteGenerator():
|
||||
|
||||
def __init__(self, source_dir: Path, build_dir: Path):
|
||||
self.source_dir = source_dir
|
||||
self.build_dir = build_dir
|
||||
|
||||
self.templates = {}
|
||||
self.index_name = "index.html"
|
||||
self.pages_dir_name = "pages"
|
||||
self.static_dir_name = "static"
|
||||
self.image_dir_name = "images"
|
||||
self.template_dir_name = "template"
|
||||
|
||||
def generate(self):
|
||||
logging.info(f"Building sources from {self.source_dir} to {self.build_dir}")
|
||||
|
||||
self.clean_build_dir()
|
||||
|
||||
self.scan_source_dir()
|
||||
|
||||
def process_pages(self, path: Path):
|
||||
for dir_entry in path.iterdir():
|
||||
if dir_entry.is_file() and dir_entry.suffix == ".md":
|
||||
with open(dir_entry, 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
output_content = self.process_page(content)
|
||||
output_path = self.build_dir / Path(str(dir_entry.name) + ".html")
|
||||
logging.info(f"Writing content to {output_path}")
|
||||
with open(output_path, 'w') as f:
|
||||
f.write(output_content)
|
||||
|
||||
def process_page(self, page_md: str):
|
||||
html_content = markdown.markdown(page_md)
|
||||
if "header" in self.templates:
|
||||
html_content = self.templates["header"] + html_content
|
||||
if "footer" in self.templates:
|
||||
html_content += self.templates["footer"]
|
||||
return html_content
|
||||
|
||||
def clean_build_dir(self):
|
||||
if os.path.exists(self.build_dir):
|
||||
os.rmdir(self.build_dir)
|
||||
os.makedirs(self.build_dir)
|
||||
|
||||
def process_images(self, path: Path):
|
||||
static_dir = self.build_dir / self.static_dir_name
|
||||
images_dir = static_dir / self.image_dir_name
|
||||
os.makedirs(images_dir)
|
||||
|
||||
for dir_entry in path.iterdir():
|
||||
if dir_entry.is_file():
|
||||
shutil.copy(dir_entry, images_dir)
|
||||
|
||||
def process_static_dir(self, path: Path):
|
||||
|
||||
static_dir = self.build_dir / self.static_dir_name
|
||||
os.makedirs(static_dir)
|
||||
|
||||
for dir_entry in path.iterdir():
|
||||
if dir_entry.is_file():
|
||||
shutil.copy(dir_entry, static_dir / dir_entry.name)
|
||||
elif dir_entry.is_dir():
|
||||
if dir_entry.name == "images":
|
||||
self.process_images(dir_entry)
|
||||
else:
|
||||
shutil.copytree(dir_entry, static_dir / dir_entry.name)
|
||||
|
||||
def scan_templates(self, path: Path):
|
||||
for dir_entry in path.iterdir():
|
||||
if dir_entry.is_file() and dir_entry.suffix == ".html":
|
||||
with open(dir_entry, 'r') as f:
|
||||
self.templates[dir_entry.stem] = f.read()
|
||||
|
||||
def scan_source_dir(self):
|
||||
for dir_entry in self.source_dir.iterdir():
|
||||
if dir_entry.is_dir():
|
||||
if dir_entry.name == self.pages_dir_name:
|
||||
self.process_pages(dir_entry)
|
||||
elif dir_entry.name == self.static_dir_name:
|
||||
self.process_static_dir(dir_entry)
|
||||
elif dir_entry.name == self.template_dir_name:
|
||||
self.scan_templates(dir_entry)
|
||||
elif dir_entry.is_file():
|
||||
if dir_entry.name == self.index_name:
|
||||
shutil.copy(dir_entry, self.build_dir / dir_entry.name)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("source_dir")
|
||||
parser.add_argument("--build_dir", default = os.getcwd() + "/build")
|
||||
args = parser.parse_args()
|
||||
|
||||
generator = SiteGenerator(Path(args.source_dir), Path(args.build_dir))
|
||||
generator.generate()
|
||||
|
||||
|
||||
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
|||
django
|
||||
markdown
|
Loading…
Reference in a new issue