12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # -*- 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)
|