Switching to self-contained binary -
initial commit.
This commit is contained in:
21
config.py
21
config.py
@@ -1,24 +1,7 @@
|
|||||||
import logging, os, sys
|
import os
|
||||||
|
|
||||||
# Main config section
|
# Main config section
|
||||||
class Config:
|
class Config:
|
||||||
APP_NAME = "hydrogen"
|
APP_NAME = "hydrogen"
|
||||||
MAIN_PAGE_TITLE = "Selected poems"
|
MAIN_PAGE_TITLE = "Selected poems"
|
||||||
OUTPUT_DIR = os.environ.get('OUTPUT_DIR') or 'public'
|
OUTPUT_DIR = os.environ.get('OUTPUT_DIR') or 'public'
|
||||||
HEADER_IMAGE = 'static/header.jpg'
|
HEADER_IMAGE = 'static/header.jpg'
|
||||||
LOG_TO = sys.stdout
|
|
||||||
LOG_LEVEL = logging.DEBUG
|
|
||||||
|
|
||||||
# Logging config section
|
|
||||||
logger = logging.getLogger(Config.APP_NAME)
|
|
||||||
logger.setLevel(Config.LOG_LEVEL)
|
|
||||||
stdout_handler = logging.StreamHandler(Config.LOG_TO)
|
|
||||||
stdout_handler.setLevel(Config.LOG_LEVEL)
|
|
||||||
formatter = logging.Formatter(
|
|
||||||
'[%(asctime)s] %(name)s: %(levelname)s: %(message)s',
|
|
||||||
datefmt='%Y-%m-%d %H:%M:%S'
|
|
||||||
)
|
|
||||||
stdout_handler.setFormatter(formatter)
|
|
||||||
if not logger.hasHandlers():
|
|
||||||
logger.addHandler(stdout_handler)
|
|
||||||
logger.propagate = False
|
|
||||||
28
hydrogen.py
28
hydrogen.py
@@ -5,15 +5,15 @@ import frontmatter
|
|||||||
import markdown
|
import markdown
|
||||||
from jinja2 import Environment, FileSystemLoader
|
from jinja2 import Environment, FileSystemLoader
|
||||||
import shutil
|
import shutil
|
||||||
from config import Config, logger
|
from config import Config
|
||||||
|
from logger import logger
|
||||||
|
|
||||||
content_dir = Path('content')
|
content_dir = Path('content')
|
||||||
template_dir = Path('templates')
|
template_dir = Path('templates')
|
||||||
output_dir = Path(Config.OUTPUT_DIR)
|
output_dir = Path(Config.OUTPUT_DIR)
|
||||||
img_dir = Path('public/images')
|
img_dir = Path('public/images')
|
||||||
assets_dir = Path('public/assets')
|
assets_css_dir = Path(output_dir / 'static/css')
|
||||||
assets_css_dir = Path('public/assets/css')
|
assets_js_dir = Path(output_dir / 'static/js')
|
||||||
assets_js_dir = Path('public/assets/js')
|
|
||||||
static_dir = Path('static')
|
static_dir = Path('static')
|
||||||
header_image = Config.HEADER_IMAGE or '/static/header.jpg'
|
header_image = Config.HEADER_IMAGE or '/static/header.jpg'
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ class ContentItemPrototype:
|
|||||||
if self.image_src_file.exists():
|
if self.image_src_file.exists():
|
||||||
shutil.copyfile(self.image_src_file, output_dir / self.image)
|
shutil.copyfile(self.image_src_file, output_dir / self.image)
|
||||||
if self.custom_css_src_file.exists():
|
if self.custom_css_src_file.exists():
|
||||||
shutil.copyfile(self.custom_css_src_file, output_dir / self.custom_css)
|
shutil.copyfile(self.custom_css_src_file,output_dir / self.custom_css)
|
||||||
if self.custom_js_src_file.exists():
|
if self.custom_js_src_file.exists():
|
||||||
shutil.copyfile(self.custom_js_src_file, output_dir / self.custom_js)
|
shutil.copyfile(self.custom_js_src_file, output_dir / self.custom_js)
|
||||||
with self.content_output_path.open("w", encoding="utf-8") as f:
|
with self.content_output_path.open("w", encoding="utf-8") as f:
|
||||||
@@ -40,28 +40,30 @@ class ContentItemPrototype:
|
|||||||
self.image_src_file = Path(f"{content_dir}/{md_file.stem}.jpg")
|
self.image_src_file = Path(f"{content_dir}/{md_file.stem}.jpg")
|
||||||
self.image = f"images/{md_file.stem}.jpg" if self.image_src_file.exists() else None
|
self.image = f"images/{md_file.stem}.jpg" if self.image_src_file.exists() else None
|
||||||
self.custom_css_src_file = Path(f"{content_dir}/{md_file.stem}.css")
|
self.custom_css_src_file = Path(f"{content_dir}/{md_file.stem}.css")
|
||||||
self.custom_css = f"assets/css/{md_file.stem}.css" if self.custom_css_src_file.exists() else None
|
self.custom_css = f"static/css/{md_file.stem}.css" if self.custom_css_src_file.exists() else None
|
||||||
|
logger.debug(f"Custom CSS: {self.slug}: {self.custom_css}")
|
||||||
self.custom_js_src_file = Path(f"{content_dir}/{md_file.stem}.js")
|
self.custom_js_src_file = Path(f"{content_dir}/{md_file.stem}.js")
|
||||||
self.custom_js = f"assets/js/{md_file.stem}.js" if self.custom_js_src_file.exists() else None
|
self.custom_js = f"static/js/{md_file.stem}.js" if self.custom_js_src_file.exists() else None
|
||||||
|
logger.debug(f"Custom JS: {self.slug}: {self.custom_js}")
|
||||||
# Special handling for the 'about' item
|
# Special handling for the 'about' item
|
||||||
if self.slug == 'about':
|
if self.slug == 'about':
|
||||||
self.image = 'static/about.jpg'
|
self.image = 'static/about.jpg'
|
||||||
|
|
||||||
logger.info(f"Building the '{Config.MAIN_PAGE_TITLE}' site.")
|
logger.info(f"Building the '{Config.MAIN_PAGE_TITLE}' site.")
|
||||||
|
|
||||||
# Recreate the output dir if needed
|
# Recreate the output dir if needed
|
||||||
if output_dir.exists():
|
if output_dir.exists():
|
||||||
shutil.rmtree(output_dir)
|
shutil.rmtree(output_dir)
|
||||||
output_dir.mkdir()
|
output_dir.mkdir()
|
||||||
|
|
||||||
# Create public subdirs
|
# Create public subdirs
|
||||||
img_dir.mkdir()
|
subdirs = [img_dir, assets_css_dir, assets_js_dir]
|
||||||
assets_dir.mkdir()
|
for subdir in subdirs:
|
||||||
assets_css_dir.mkdir()
|
subdir.mkdir(parents=True, exist_ok=True)
|
||||||
assets_js_dir.mkdir()
|
|
||||||
|
|
||||||
# Copy static files if exist
|
# Copy static files if exist
|
||||||
if static_dir.exists():
|
if static_dir.exists():
|
||||||
shutil.copytree(static_dir, output_dir / "static")
|
shutil.copytree(static_dir, output_dir / "static", dirs_exist_ok=True)
|
||||||
|
|
||||||
# Prepare template rendering engine
|
# Prepare template rendering engine
|
||||||
env = Environment(loader=FileSystemLoader(str(template_dir)))
|
env = Environment(loader=FileSystemLoader(str(template_dir)))
|
||||||
|
|||||||
20
logger.py
Normal file
20
logger.py
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import logging, sys
|
||||||
|
from config import Config
|
||||||
|
|
||||||
|
# Logging config section
|
||||||
|
|
||||||
|
LOG_TO = sys.stdout
|
||||||
|
LOG_LEVEL = logging.INFO
|
||||||
|
|
||||||
|
logger = logging.getLogger(Config.APP_NAME)
|
||||||
|
logger.setLevel(LOG_LEVEL)
|
||||||
|
stdout_handler = logging.StreamHandler(LOG_TO)
|
||||||
|
stdout_handler.setLevel(LOG_LEVEL)
|
||||||
|
formatter = logging.Formatter(
|
||||||
|
'[%(asctime)s] %(name)s: %(levelname)s: %(message)s',
|
||||||
|
datefmt='%Y-%m-%d %H:%M:%S'
|
||||||
|
)
|
||||||
|
stdout_handler.setFormatter(formatter)
|
||||||
|
if not logger.hasHandlers():
|
||||||
|
logger.addHandler(stdout_handler)
|
||||||
|
logger.propagate = False
|
||||||
Reference in New Issue
Block a user