[neighbors] Fix iter3() error on Python 3.7 and pass flake8

From PR: https://github.com/getpelican/pelican-plugins/pull/1186/files
This commit is contained in:
Jesús 2019-09-23 23:03:38 -05:00
parent 877d7e5c4d
commit d81f06b3f8
No known key found for this signature in database
GPG Key ID: F6EE7BC59A315766

View File

@ -8,15 +8,20 @@ variables to the article's context
""" """
from pelican import signals from pelican import signals
def iter3(seq): def iter3(seq):
it = iter(seq) """Generate one triplet per element in 'seq' following PEP-479."""
nxt = None nxt, cur = None, None
cur = next(it) for prv in seq:
for prv in it: if cur:
yield nxt, cur, prv yield nxt, cur, prv
nxt, cur = cur, prv nxt, cur = cur, prv
# Don't yield anything if empty seq
if cur:
# Yield last element in seq (also if len(seq) == 1)
yield nxt, cur, None yield nxt, cur, None
def get_translation(article, prefered_language): def get_translation(article, prefered_language):
if not article: if not article:
return None return None
@ -25,6 +30,7 @@ def get_translation(article, prefered_language):
return translation return translation
return article return article
def set_neighbors(articles, next_name, prev_name): def set_neighbors(articles, next_name, prev_name):
for nxt, cur, prv in iter3(articles): for nxt, cur, prv in iter3(articles):
exec("cur.{} = nxt".format(next_name)) exec("cur.{} = nxt".format(next_name))
@ -32,27 +38,29 @@ def set_neighbors(articles, next_name, prev_name):
for translation in cur.translations: for translation in cur.translations:
exec( exec(
"translation.{} = get_translation(nxt, translation.lang)".format( "translation.{} = get_translation(nxt, translation.lang)"
next_name)) .format(next_name))
exec( exec(
"translation.{} = get_translation(prv, translation.lang)".format( "translation.{} = get_translation(prv, translation.lang)"
prev_name)) .format(prev_name))
def neighbors(generator): def neighbors(generator):
set_neighbors(generator.articles, 'next_article', 'prev_article') set_neighbors(generator.articles, 'next_article', 'prev_article')
for category, articles in generator.categories: for category, articles in generator.categories:
articles.sort(key=(lambda x: x.date), reverse=(True)) articles.sort(key=lambda x: x.date, reverse=True)
set_neighbors( set_neighbors(
articles, 'next_article_in_category', 'prev_article_in_category') articles, 'next_article_in_category', 'prev_article_in_category')
if hasattr(generator, 'subcategories'): if hasattr(generator, 'subcategories'):
for subcategory, articles in generator.subcategories: for subcategory, articles in generator.subcategories:
articles.sort(key=(lambda x: x.date), reverse=(True)) articles.sort(key=lambda x: x.date, reverse=True)
index = subcategory.name.count('/') index = subcategory.name.count('/')
next_name = 'next_article_in_subcategory{}'.format(index) next_name = 'next_article_in_subcategory{}'.format(index)
prev_name = 'prev_article_in_subcategory{}'.format(index) prev_name = 'prev_article_in_subcategory{}'.format(index)
set_neighbors(articles, next_name, prev_name) set_neighbors(articles, next_name, prev_name)
def register(): def register():
signals.article_generator_finalized.connect(neighbors) signals.article_generator_finalized.connect(neighbors)