mirror of
https://github.com/getpelican/pelican.git
synced 2025-10-15 20:28:56 +02:00
Make PagesGenerator more generic
This commit is contained in:
parent
6465a91b65
commit
8e3a7aca82
3 changed files with 69 additions and 22 deletions
|
|
@ -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')
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,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(
|
||||
trim_blocks=True,
|
||||
lstrip_blocks=True,
|
||||
|
|
@ -600,28 +603,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(
|
||||
|
|
@ -651,25 +683,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):
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue