67 lines
2.6 KiB
Python
67 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals
|
|
from pelican import signals
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def patch_subparts(generator):
|
|
generator.subparts = []
|
|
slugs = {}
|
|
for article in generator.articles:
|
|
slugs[article.slug] = article
|
|
if '--' in article.slug:
|
|
generator.subparts.append(article)
|
|
for article in generator.subparts:
|
|
logger.info('sub_part: Detected %s', article.slug)
|
|
(pslug, _) = article.slug.rsplit('--', 1)
|
|
if pslug in slugs:
|
|
parent = slugs[pslug]
|
|
if not hasattr(parent, 'subparts'):
|
|
parent.subparts = []
|
|
parent.subparts.append(article)
|
|
article.subpart_of = parent
|
|
article.subtitle = article.title
|
|
article.title = article.title + ", " + parent.title
|
|
generator.dates.remove(article)
|
|
generator.articles.remove(article)
|
|
if article.category:
|
|
for cat, arts in generator.categories:
|
|
if cat.name == article.category.name:
|
|
arts.remove(article)
|
|
break
|
|
else:
|
|
logger.error(
|
|
'sub_part: Cannot remove sub-part from category %s',
|
|
article.category)
|
|
if (hasattr(article, 'subphotos') or
|
|
hasattr(article, 'photo_gallery')):
|
|
parent.subphotos = (
|
|
getattr(parent, 'subphotos',
|
|
len(getattr(parent, 'photo_gallery', []))) +
|
|
getattr(article, 'subphotos', 0) +
|
|
len(getattr(article, 'photo_gallery', [])))
|
|
else:
|
|
logger.error('sub_part: No parent for %s', pslug)
|
|
generator._update_context(('articles', 'dates', 'subparts'))
|
|
|
|
|
|
def write_subparts(generator, writer):
|
|
for article in generator.subparts:
|
|
signals.article_generator_write_article.send(generator,
|
|
content=article)
|
|
writer.write_file(
|
|
article.save_as, generator.get_template(article.template),
|
|
generator.context, article=article, category=article.category,
|
|
override_output=hasattr(article, 'override_save_as'),
|
|
relative_urls=generator.settings['RELATIVE_URLS'])
|
|
if len(generator.subparts) > 0:
|
|
print('sub_part: processed {} sub-parts.'.format(
|
|
len(generator.subparts)))
|
|
|
|
|
|
def register():
|
|
signals.article_generator_finalized.connect(patch_subparts)
|
|
signals.article_writer_finalized.connect(write_subparts)
|