This commit is contained in:
Aurélien Matouillot 2017-05-11 08:58:37 +00:00 committed by GitHub
commit df92b62fb9
3 changed files with 69 additions and 22 deletions

View file

@ -182,8 +182,17 @@ class Pelican(object):
articles_generator = next(g for g in generators
if isinstance(g, ArticlesGenerator))
pages_generator = next(g for g in generators
if isinstance(g, PagesGenerator))
page_length = 0
translation_length = 0
hidden_page_length = 0
hidden_translation_length = 0
for g in generators:
if isinstance(g, PagesGenerator):
page_length += len(g.pages)
translation_length += len(g.translations)
hidden_page_length += len(g.hidden_pages)
hidden_translation_length += len(g.hidden_translations)
pluralized_articles = maybe_pluralize(
(len(articles_generator.articles) +
@ -196,13 +205,11 @@ class Pelican(object):
'draft',
'drafts')
pluralized_pages = maybe_pluralize(
(len(pages_generator.pages) +
len(pages_generator.translations)),
(page_length + translation_length),
'page',
'pages')
pluralized_hidden_pages = maybe_pluralize(
(len(pages_generator.hidden_pages) +
len(pages_generator.hidden_translations)),
(hidden_page_length + hidden_translation_length),
'hidden page',
'hidden pages')

View file

@ -11,6 +11,8 @@ from functools import partial
from itertools import chain, groupby
from operator import attrgetter
from blinker import signal
from jinja2 import (BaseLoader, ChoiceLoader, Environment, FileSystemLoader,
PrefixLoader, TemplateNotFound)
@ -60,6 +62,7 @@ class Generator(object):
simple_loader = FileSystemLoader(os.path.join(theme_path,
"themes", "simple", "templates"))
self.env = Environment(
loader=ChoiceLoader([
FileSystemLoader(self._templates_path),
@ -604,28 +607,57 @@ class ArticlesGenerator(CachingGenerator):
class PagesGenerator(CachingGenerator):
"""Generate pages"""
content_class = Page
def __init__(self, *args, **kwargs):
self.pages = []
self.hidden_pages = []
self.hidden_translations = []
self._init_signals()
super(PagesGenerator, self).__init__(*args, **kwargs)
signals.page_generator_init.send(self)
def _get_settings(self, key):
key = ('%s_%s' % (self.content_class.__name__, key)).upper()
return self.settings[key]
def _get_signal_name(self, method, key):
return '%s_%s_%s' % (
self.content_class.__name__.lower(),
method,
key
)
def _get_signal(self, *args, **kw):
signal_name = self._get_signal_name(*args, **kw)
return getattr(signals, signal_name)
def _init_signals(self):
for name in ['init', 'preread', 'context', 'finalized']:
signal_name = self._get_signal_name('generator', name)
setattr(signals, signal_name, signal(signal_name))
signal_name = self._get_signal_name('writer', 'finalized')
setattr(signals, signal_name, signal(signal_name))
def generate_context(self):
all_pages = []
hidden_pages = []
for f in self.get_files(
self.settings['PAGE_PATHS'],
exclude=self.settings['PAGE_EXCLUDES']):
self._get_settings('paths'),
exclude=self._get_settings('excludes')):
page = self.get_cached_data(f, None)
if page is None:
try:
page = self.readers.read_file(
base_path=self.path, path=f, content_class=Page,
base_path=self.path, path=f,
content_class=self.content_class,
context=self.context,
preread_signal=signals.page_generator_preread,
preread_signal=self._get_signal('generator',
'preread'),
preread_sender=self,
context_signal=signals.page_generator_context,
context_signal=self._get_signal('generator',
'context'),
context_sender=self)
except Exception as e:
logger.error(
@ -655,25 +687,31 @@ class PagesGenerator(CachingGenerator):
self.pages, self.translations = process_translations(
all_pages,
order_by=self.settings['PAGE_ORDER_BY'])
order_by=self._get_settings('order_by'))
self.hidden_pages, self.hidden_translations = \
process_translations(hidden_pages)
self._update_context(('pages', 'hidden_pages'))
plurial_name = '%ss' % self.content_class.__name__.lower()
# Set aliases to access to the objects in the templates
setattr(self, plurial_name, self.pages)
setattr(self, 'hidden_%s' % plurial_name, self.hidden_pages)
self._update_context((plurial_name, 'hidden_%s' % plurial_name))
self.save_cache()
self.readers.save_cache()
signals.page_generator_finalized.send(self)
self._get_signal('generator', 'finalized').send(self)
def generate_output(self, writer):
for page in chain(self.translations, self.pages,
self.hidden_translations, self.hidden_pages):
writer.write_file(
page.save_as, self.get_template(page.template),
self.context, page=page,
self.context,
relative_urls=self.settings['RELATIVE_URLS'],
override_output=hasattr(page, 'override_save_as'))
signals.page_writer_finalized.send(self, writer=writer)
override_output=hasattr(page, 'override_save_as'),
**{self.content_class.__name__.lower(): page}
)
self._get_signal('writer', 'finalized').send(self, writer=writer)
class StaticGenerator(Generator):

View file

@ -25,9 +25,10 @@ article_generator_finalized = signal('article_generator_finalized')
article_generator_write_article = signal('article_generator_write_article')
article_writer_finalized = signal('article_writer_finalized')
page_generator_init = signal('page_generator_init')
page_generator_finalized = signal('page_generator_finalized')
page_writer_finalized = signal('page_writer_finalized')
# Generated in PagesGenerator
# page_generator_init = signal('page_generator_init')
# page_generator_finalized = signal('page_generator_finalized')
# page_writer_finalized = signal('page_writer_finalized')
static_generator_init = signal('static_generator_init')
static_generator_finalized = signal('static_generator_finalized')
@ -37,8 +38,9 @@ static_generator_finalized = signal('static_generator_finalized')
article_generator_preread = signal('article_generator_preread')
article_generator_context = signal('article_generator_context')
page_generator_preread = signal('page_generator_preread')
page_generator_context = signal('page_generator_context')
# Generated in PagesGenerator
# page_generator_preread = signal('page_generator_preread')
# page_generator_context = signal('page_generator_context')
static_generator_preread = signal('static_generator_preread')
static_generator_context = signal('static_generator_context')