'
for post in posts:
disp_date = datetime.datetime.fromisoformat(post.get("date")).strftime(
"%Y-%m-%d"
)
out += post_tpl.format(
href=post.get("destpath"),
title=post.get("title"),
date=post.get("date"),
disp_date=disp_date,
)
return out + "
"
def render_template(tpl_fname, out_fname, subs):
with open(tpl_fname, "r", encoding="utf-8") as inf:
tmpl = Template(inf.read())
out = tmpl.substitute(subs)
out_fname = os.path.join("public/", out_fname)
with open(out_fname, "w", encoding="utf-8") as outf:
outf.write(out)
def render_index(posts):
content_html = posts_list_html(posts)
render_template(
"index.html.tmpl", "index.html", {"content": content_html, "more_title": ""}
)
def rss_post_xml(post):
tpl = """
{title}
{link}
{pubdate}{link}{description}
"""
link = "https://cfebs.com/" + post["destpath"]
with open(post["fpath"], "r", encoding="utf-8") as inf:
text = inf.read()
converted, _ = convert(text)
pubdate = email.utils.format_datetime(datetime.datetime.fromisoformat(post["date"]))
subs = {
"title": post["title"],
"link": link,
"pubdate": pubdate,
"description": converted,
}
for k, v in subs.items():
subs[k] = html.escape(v)
return tpl.format(**subs)
def render_rss_index(posts):
items = ""
for post in posts[:5]:
items += rss_post_xml(post)
subs = {
"site_title": "cfebs.com",
"site_link": "https://cfebs.com",
"self_full_link": "https://cfebs.com/index.xml",
"description": "Recent content from cfebs.com",
"last_build_date": email.utils.format_datetime(datetime.datetime.now()),
}
for k, v in subs.items():
subs[k] = html.escape(v)
subs["items"] = items
render_template("index.xml.tmpl", "index.xml", subs)
def main():
os.makedirs("public/posts/", exist_ok=True)
posts = render_posts()
logging.info("rendered posts: %s", posts)
posts = filter(lambda p: not p["draft"], posts)
sorted_posts = sorted(
posts, key=lambda p: datetime.datetime.fromisoformat(p["date"]), reverse=True
)
render_index(sorted_posts)
render_rss_index(sorted_posts)
if __name__ == "__main__":
main()