Source code for posty.renderer.feed

import abc
from datetime import datetime, time

from feedgen.feed import FeedGenerator
import pytz

from .base import Renderer
from .util import markdown


[docs]class FeedRenderer(Renderer): """ Base class for all feed Renderers (RSS, Atom) """
[docs] def render_site(self): config = self.site.config self.feed = FeedGenerator() self.feed.id(config['base_url']) self.feed.title(config['title']) self.feed.author({'name': config['author']}) self.feed.copyright(self.site.copyright) self.feed.link(href=config['base_url'], rel='alternate') self.feed.link(href=self.url(), rel='self') if config['description']: self.feed.description(config['description']) else: self.feed.description(config['title']) # Set pubDate to the last post's date pub_date = datetime.combine( self.site.payload['posts'][0]['date'], time(tzinfo=pytz.utc), ) self.feed.pubDate(pub_date) self.render_posts() self.output()
[docs] def render_posts(self): """ Add each post to the feed """ for post in reversed(self.site.payload['posts']): entry = self.feed.add_entry() entry.id(post.url()) entry.link(href=post.url()) entry.title(post['title']) pub_date = datetime.combine( post['date'], time(tzinfo=pytz.utc), ) entry.published(pub_date) entry.summary(markdown(post['blurb'])) entry.content(markdown(post['body']))
[docs] @abc.abstractmethod def output(self): """ This method must be implemented by child classes. It gets called during render_site to output the specific file, such as the RSS file or Atom file """ raise NotImplementedError
[docs] @abc.abstractmethod def url(self): """ Return the URL to this feed file """ raise NotImplementedError