diff --git a/incorporealcms/__init__.py b/incorporealcms/__init__.py index 1dff697..ec5cac1 100644 --- a/incorporealcms/__init__.py +++ b/incorporealcms/__init__.py @@ -8,10 +8,16 @@ import logging import os from logging.config import dictConfig +from jinja2 import Environment, PackageLoader, select_autoescape from termcolor import cprint from incorporealcms.config import Config +jinja_env = Environment( + loader=PackageLoader('incorporealcms'), + autoescape=select_autoescape(), +) + # dynamically generate version number try: # packaged/pip install -e . value diff --git a/incorporealcms/error_pages.py b/incorporealcms/error_pages.py new file mode 100644 index 0000000..9f67f02 --- /dev/null +++ b/incorporealcms/error_pages.py @@ -0,0 +1,21 @@ +"""Process the error page templates. + +SPDX-FileCopyrightText: © 2025 Brian S. Stephan +SPDX-License-Identifier: GPL-3.0-only +""" +import os + +from incorporealcms import jinja_env +from incorporealcms.config import Config + + +def generate_error_pages(dest_dir: str) -> None: + """Process the error pages and place them in the output dir. + + Args: + dest_dir: the directory to place the error pages in, for a web server to serve + """ + for template_name in ['400.html', '404.html', '500.html']: + template = jinja_env.get_template(template_name) + with open(os.path.join(dest_dir, template_name), 'w') as error_page: + error_page.write(template.render(config=Config)) diff --git a/incorporealcms/markdown.py b/incorporealcms/markdown.py index db63ee5..68479b4 100644 --- a/incorporealcms/markdown.py +++ b/incorporealcms/markdown.py @@ -13,18 +13,13 @@ import os import re import markdown -from jinja2 import Environment, PackageLoader, select_autoescape from markupsafe import Markup +from incorporealcms import jinja_env from incorporealcms.config import Config logger = logging.getLogger(__name__) -jinja_env = Environment( - loader=PackageLoader('incorporealcms'), - autoescape=select_autoescape(), -) - def get_meta_str(md, key): """Provide the page's (parsed in Markup obj md) metadata for the specified key, or '' if unset.""" diff --git a/incorporealcms/ssg.py b/incorporealcms/ssg.py index 6d6f3d5..f253a7a 100644 --- a/incorporealcms/ssg.py +++ b/incorporealcms/ssg.py @@ -12,6 +12,7 @@ import tempfile from termcolor import cprint from incorporealcms import __version__, init_instance +from incorporealcms.error_pages import generate_error_pages from incorporealcms.feed import generate_feed from incorporealcms.markdown import handle_markdown_file_path @@ -61,8 +62,12 @@ class StaticSiteGenerator(object): # generate the feeds cprint("generating feeds", 'green') - generate_feed('atom', self.instance_dir, self.output_dir) - generate_feed('rss', self.instance_dir, self.output_dir) + generate_feed('atom', self.instance_dir, tmp_output_dir) + generate_feed('rss', self.instance_dir, tmp_output_dir) + + # generate the error pages + cprint("generating error pages", 'green') + generate_error_pages(tmp_output_dir) # move temporary dir to the destination old_output_dir = f'{self.output_dir}-old-{os.path.basename(tmp_output_dir)}' diff --git a/incorporealcms/templates/404.html b/incorporealcms/templates/404.html index 38ef4ff..0cd2c3f 100644 --- a/incorporealcms/templates/404.html +++ b/incorporealcms/templates/404.html @@ -13,7 +13,7 @@ SPDX-License-Identifier: GPL-3.0-only {% block body %}

NOT FOUND

-

Sorry, {{ request.path }} does not seem to exist, at least not anymore.

+

Sorry, the file you requested does not seem to exist, at least not anymore.

It's possible you followed a dead link on this site, in which case I would appreciate it if you could email me at {{ config.CONTACT_EMAIL }} and I can take a look. I make an effort to symlink old content to its new location, so old links and URLs should, generally speaking, work.