all repos — nasg @ 5d3c0b538bfeb21aeec83abcb0504642cfe45aea

replacing template based feed generator with 'real' feed generator
Peter Molnar hello@petermolnar.eu
Thu, 30 Nov 2017 17:01:14 +0000
commit

5d3c0b538bfeb21aeec83abcb0504642cfe45aea

parent

8809548f97b5c58b3ed6683395a12ceec0bc92e2

1 files changed, 69 insertions(+), 14 deletions(-)

jump to
M nasg.pynasg.py

@@ -12,10 +12,12 @@ import asyncio

from math import ceil import csv import frontmatter +import requests import arrow import langdetect import wand.image from emoji import UNICODE_EMOJI +from feedgen.feed import FeedGenerator import shared

@@ -185,7 +187,10 @@ return False

@property def title(self): - return self.name + return ' - '.join([ + self.name, + shared.config.get('common', 'domain') + ]) @property def url(self):

@@ -218,6 +223,64 @@ if not os.path.isdir(x):

os.makedirs(x) return x + def write_feed(self, posttmpls): + dirname = self.path_paged(1, feed=True) + o = os.path.join(dirname, self.feedfile) + logging.info( + "Rendering feed of category %s to %s", + self.name, + o + ) + + flink = "%s%s%s" % ( + shared.config.get('site', 'url'), + self.url, + shared.config.get('site', 'feed') + ) + fg = FeedGenerator() + fg.id(flink) + fg.link( + href=flink, + rel='self' + ) + fg.title(self.title) + fg.author({ + 'name': shared.site.get('author').get('name'), + 'email': shared.site.get('author').get('email') + }) + fg.logo('%s/favicon.png' % shared.site.get('url')) + fg.updated(arrow.get(self.mtime).to('utc').datetime) + + for p in reversed(posttmpls): + link = '%s/%s' % (shared.site.get('url'), p.get('slug')) + dt = arrow.get(p.get('pubtime')).to('utc') + + fe = fg.add_entry() + fe.id(link) + fe.link(href='%s/' % (link)) + fe.title(p.get('title')) + fe.published(dt.datetime) + fe.updated(dt.datetime) + fe.content(content=p.get('html'), type='CDATA') + fe.rights('%s %s %s' % ( + dt.format('YYYY'), + shared.site.get('author').get('name'), + p.get('licence').get('text') + )) + + with open(o, 'wb') as f: + f.write(fg.atom_str(pretty=True)) + + # ping pubsub + r = requests.post( + shared.site.get('websub').get('hub'), + data={ + 'hub.mode': 'publish', + 'hub.url': flink + } + ) + logging.info(r.text) + def write_html(self, path, content): with open(path, 'wt') as out: logging.debug('writing file %s', path)

@@ -240,6 +303,8 @@ reverse=True

))[start:end] ] # define data for template + # TODO move the pagination links here, the one in jinja + # is overcomplicated tmplvars = { 'taxonomy': { 'title': self.title,

@@ -274,19 +339,7 @@ r = shared.j2.get_template(tmplfile).render(tmplvars)

self.write_html(o, r) # render feed if page == 1: - dirname = self.path_paged(page, feed=True) - o = os.path.join(dirname, self.feedfile) - logging.info( - "Rendering feed of category %s to %s", - self.name, - o - ) - tmplfile = "%s_%s.html" % ( - self.__class__.__name__, - self.feeddir - ) - r = shared.j2.get_template(tmplfile).render(tmplvars) - self.write_html(o, r) + self.write_feed(posttmpls) # inc. page counter page = page + 1

@@ -1320,6 +1373,8 @@ # render categories

for name, c in collector_categories: if not c.is_uptodate or shared.config.getboolean('params', 'force'): worker.append(c.render()) + # TODO move ping to separate function and add it as a task + # TODO separate an aiohttpworker? # add magic.php rendering worker.append(magic.render())