Add RSS feed (no link yet)

This commit is contained in:
Griatch 2021-11-20 14:15:37 +01:00
parent f5688d37e2
commit 7b3f0f2a7f
2 changed files with 61 additions and 6 deletions

View file

@ -27,6 +27,7 @@ from datetime import datetime
from os import symlink, remove, chdir
from os.path import abspath, dirname, join as pathjoin, sep
import jinja2
import rfeed
import mistletoe
from mistletoe import HTMLRenderer, BaseRenderer
@ -53,7 +54,9 @@ START_PAGE = "index.html"
BLOG_TEMPLATE = "blog.html"
POST_TEMPLATE = "post.html"
CURRENT_YEAR = datetime.now().year
RSS_FEED = "feed.rss"
CURRENT_YEAR = datetime.utcnow().year
@dataclass
@ -106,6 +109,41 @@ class PygmentsRenderer(HTMLRenderer):
return highlight(code, lexer, self.formatter)
def build_rss_feed(blogposts):
"""
Create a rss feed with all blog posts.
Args:
blogposts: A list of `BlogPost` entries.
"""
print("Rebuilding RSS feed ...")
feeditems = []
for blogpost in blogposts:
feeditems.append(
rfeed.Item(
title=blogpost.title,
link=blogpost.permalink,
description=blogpost.blurb,
author="Griatch",
guid=rfeed.Guid(blogpost.permalink),
pubDate=datetime.fromordinal(blogpost.date_sort),
)
)
return rfeed.Feed(
title="Evennia Devblog RSS Feed",
link="https://www.evennia.com/devblog/feed.rss",
description="""Evennia is a modern Python library and server for creating text-based
multi-player games and virtual worlds (also known as MUD, MUSH, MU,
MUX, MUCK, etc). While Evennia handles all the necessary things every
online game needs, like database and networking, you create the game of
your dreams by writing normal Python modules.""",
language="en-US",
lastBuildDate=datetime.utcnow(),
items=feeditems,
).rss()
def md2html():
"""
Generate all blog pages, with one page per year.
@ -192,18 +230,24 @@ def md2html():
calendar[date.year].append(blogpost)
# make sure to sort all entries by date
blogpostlist = []
blogpages = []
for year in sorted(calendar, reverse=True):
blogposts = list(sorted(calendar[year], key=lambda post: -post.date_sort))
blogpostlist.extend(blogposts)
blogpages.append(
BlogPage(
year=year,
permalink=OUTFILE_TEMPLATE.format(year=year),
posts=list(sorted(calendar[year], key=lambda post: -post.date_sort)),
posts=blogposts,
calendar=calendar
)
)
# build the blog pages, per year
# generate the rss feed
rss_feed = build_rss_feed(blogpostlist)
# build the html blog pages, one per year
latest_post = blogpages[0].posts[0]
latest_title = latest_post.title
latest_blurb = latest_post.blurb
@ -224,8 +268,7 @@ def md2html():
html_pages[blogpage.year] = html_page
return html_pages
return html_pages, rss_feed
def build_pages(blog_pages):
"""
@ -244,8 +287,9 @@ def build_pages(blog_pages):
except FileNotFoundError:
pass
html_pages = md2html()
html_pages, rss_feed = md2html()
# build html files
latest_year = -1
latest_page = None
for year, html_page in html_pages.items():
@ -256,6 +300,11 @@ def build_pages(blog_pages):
with open(filename, 'w') as fil:
fil.write(html_page)
# build rss file
with open(pathjoin(OUTDIR, RSS_FEED), 'w') as fil:
fil.write(rss_feed)
# link static resources and the start page
chdir(OUTDIR)
symlink(IMG_REL_LINK, IMG_DIR_NAME)
symlink(latest_page, START_PAGE)

6
devblog/feed.rss Normal file

File diff suppressed because one or more lines are too long