diff options
author | Leonardo Giordani <giordani.leonardo@gmail.com> | 2020-11-22 16:13:51 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-22 17:13:51 +0100 |
commit | afdf0fb3cf6cd376a6f241e2d5bbf99cf0e348c2 (patch) | |
tree | b0e8055c47d51d5c90f28655b47d6a0fb4091c1b | |
parent | a9d9ccb58300c467d0b2aa721f5189706583a0b4 (diff) | |
download | pelican-afdf0fb3cf6cd376a6f241e2d5bbf99cf0e348c2.tar.gz |
Improve logging of generators and writer loaders (#2821)
-rw-r--r-- | RELEASE.md | 3 | ||||
-rw-r--r-- | pelican/__init__.py | 73 | ||||
-rw-r--r-- | pelican/tests/test_pelican.py | 4 |
3 files changed, 47 insertions, 33 deletions
diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 00000000..384c99f0 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,3 @@ +Release type: patch + +Improve logging of generators and writer loaders diff --git a/pelican/__init__.py b/pelican/__init__.py index 82366117..b6ebb762 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -93,7 +93,7 @@ class Pelican: path=self.path, theme=self.theme, output_path=self.output_path, - ) for cls in self.get_generator_classes() + ) for cls in self._get_generator_classes() ] # Delete the output directory if (1) the appropriate setting is True @@ -114,7 +114,7 @@ class Pelican: signals.all_generators_finalized.send(generators) - writer = self.get_writer() + writer = self._get_writer() for p in generators: if hasattr(p, 'generate_output'): @@ -162,46 +162,57 @@ class Pelican: pluralized_draft_pages, time.time() - start_time)) - def get_generator_classes(self): - generators = [ArticlesGenerator, PagesGenerator] + def _get_generator_classes(self): + discovered_generators = [ + (ArticlesGenerator, "internal"), + (PagesGenerator, "internal") + ] - if self.settings['TEMPLATE_PAGES']: - generators.append(TemplatePagesGenerator) - if self.settings['OUTPUT_SOURCES']: - generators.append(SourceFileGenerator) + if self.settings["TEMPLATE_PAGES"]: + discovered_generators.append((TemplatePagesGenerator, "internal")) - for pair in signals.get_generators.send(self): - (funct, value) = pair + if self.settings["OUTPUT_SOURCES"]: + discovered_generators.append((SourceFileGenerator, "internal")) - if not isinstance(value, Iterable): - value = (value, ) + for receiver, values in signals.get_generators.send(self): + if not isinstance(values, Iterable): + values = (values,) - for v in value: - if isinstance(v, type): - logger.debug('Found generator: %s', v) - generators.append(v) + discovered_generators.extend( + [(generator, receiver.__module__) for generator in values] + ) # StaticGenerator must run last, so it can identify files that # were skipped by the other generators, and so static files can # have their output paths overridden by the {attach} link syntax. - generators.append(StaticGenerator) + discovered_generators.append((StaticGenerator, "internal")) + + generators = [] + + for generator, origin in discovered_generators: + if not isinstance(generator, type): + logger.error("Generator %s (%s) cannot be loaded", generator, origin) + continue + + logger.debug("Found generator: %s (%s)", generator.__name__, origin) + generators.append(generator) + return generators - def get_writer(self): - writers = [w for (_, w) in signals.get_writer.send(self) - if isinstance(w, type)] - writers_found = len(writers) - if writers_found == 0: + def _get_writer(self): + writers = [w for _, w in signals.get_writer.send(self) if isinstance(w, type)] + num_writers = len(writers) + + if num_writers == 0: return Writer(self.output_path, settings=self.settings) - else: - writer = writers[0] - if writers_found == 1: - logger.debug('Found writer: %s', writer) - else: - logger.warning( - '%s writers found, using only first one: %s', - writers_found, writer) - return writer(self.output_path, settings=self.settings) + + if num_writers > 1: + logger.warning("%s writers found, using only first one", num_writers) + + writer = writers[0] + + logger.debug("Found writer: %s", writer) + return writer(self.output_path, settings=self.settings) class PrintSettings(argparse.Action): diff --git a/pelican/tests/test_pelican.py b/pelican/tests/test_pelican.py index 219377ae..cacc65c1 100644 --- a/pelican/tests/test_pelican.py +++ b/pelican/tests/test_pelican.py @@ -84,14 +84,14 @@ class TestPelican(LoggedTestCase): # have their output paths overridden by the {attach} link syntax. pelican = Pelican(settings=read_settings(path=None)) - generator_classes = pelican.get_generator_classes() + generator_classes = pelican._get_generator_classes() self.assertTrue( generator_classes[-1] is StaticGenerator, "StaticGenerator must be the last generator, but it isn't!") self.assertIsInstance( generator_classes, Sequence, - "get_generator_classes() must return a Sequence to preserve order") + "_get_generator_classes() must return a Sequence to preserve order") def test_basic_generation_works(self): # when running pelican without settings, it should pick up the default |