Merge pull request #1330 from smartass101/unify-run-get_-signals

Add get_writer signal and unify with get_generators
This commit is contained in:
Justin Mayer 2014-04-27 11:25:06 -07:00
commit b4f6df2fb6
3 changed files with 21 additions and 5 deletions

View file

@ -83,9 +83,11 @@ article_generator_finalized article_generator invoked at th
article_generator_write_article article_generator, content invoked before writing each article, the article is passed as content
article_writer_finalized article_generator, writer invoked after all articles and related pages have been written, but before
the article generator is closed.
get_generators generators invoked in Pelican.get_generator_classes,
get_generators pelican object invoked in Pelican.get_generator_classes,
can return a Generator, or several
generator in a tuple or in a list.
generators in a tuple or in a list.
get_writer pelican object invoked in Pelican.get_writer,
can return a custom Writer.
page_generator_context page_generator, metadata
page_generator_preread page_generator invoked before a page is read in PageGenerator.generate_context;
use if code needs to do something before every page is parsed.
@ -200,8 +202,8 @@ Adding a new generator is also really easy. You might want to have a look at
::
def get_generators(generators):
def get_generators(pelican_object):
# define a new generator here if you need to
return generators
return MyGenerator
signals.get_generators.connect(get_generators)

View file

@ -209,7 +209,20 @@ class Pelican(object):
return generators
def get_writer(self):
return Writer(self.output_path, settings=self.settings)
writers = [ w for w in signals.get_writer.send(self)
if isinstance(w, type) ]
writers_found = len(writers)
if writers_found == 0:
return Writer(self.output_path, settings=self.settings)
else:
_, writer = writers[0]
if writers_found == 1:
logger.debug('Found writer: {}'.format(writer))
else:
logger.warning(
'{} writers found, using only first one: {}'.format(
writers_found, writer))
return writer(self.output_path, settings=self.settings)
def parse_arguments():

View file

@ -6,6 +6,7 @@ from blinker import signal
initialized = signal('pelican_initialized')
get_generators = signal('get_generators')
get_writer = signal('get_writer')
finalized = signal('pelican_finalized')
# Reader-level signals