Since Python 3.9 zoneinfo is available and datetime also has a timezone
module attribute which can be used. Also refactor the
utcnow/fromutctimestamp usage to according to this excellent blogpost.
https://blog.ganssle.io/articles/2019/11/utcnow.html
When a 301 is returned the callee is expected to update it's database
entry to reflect this change. As subsequent returning requests to the
old url might lead to ip bans.
feedparser's parse method returns an arbitrary dictionary which may or
may not have the HTTP status. Rely on get() to return None if it's
lacking and then return and log a message.
This change introduces a replacment for planet.archlinux.org which uses
a python 2 project to generate static html from multiple RSS feed
sources. For archweb a set of 'static' feeds can be created in the
django admin view for the Arch forums and other static feeds, archweb
users can add their own blog rss feed in their profile which will create
a Feed model.
When running the update_planet command, all Feed models are iterated
over and the rss feed is parsed. The latest FeedItem is queried matching
the current Feed model and every newer entry in the RSS feed is added as
new FeedItem. Since the body is also stored in the FeedItem there is a
limit to the amount of FeedItems per Feed configured in settings.py of
which the default is 25.
When a user is marked as inactive his Feed model and items are
removed automatically to avoid keeping stale data around.
Closes: #261