diff --git a/pelican/__init__.py b/pelican/__init__.py index b6ebb762..a31daded 100644 --- a/pelican/__init__.py +++ b/pelican/__init__.py @@ -25,7 +25,7 @@ from pelican.readers import Readers from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer from pelican.settings import coerce_overrides, read_settings from pelican.utils import (FileSystemWatcher, clean_output_dir, maybe_pluralize) -from pelican.writers import Writer +from pelican.writers import Writer, CollectionRSSWriter try: __version__ = __import__('pkg_resources') \ @@ -37,6 +37,12 @@ DEFAULT_CONFIG_NAME = 'pelicanconf.py' logger = logging.getLogger(__name__) +class DataType: + ALL = 1 + CONTENT = 2 + COLLECTION = 3 + + class Pelican: def __init__(self, settings): @@ -116,6 +122,8 @@ class Pelican: writer = self._get_writer() + writers = self._get_writers() + for p in generators: if hasattr(p, 'generate_output'): p.generate_output(writer) @@ -153,6 +161,24 @@ class Pelican: 'draft page', 'draft pages') + generated_data = { + DataType.ALL: [], + DataType.CONTENT: [], + DataType.COLLECTION: [], + } + + for p in generators: + if hasattr(p, "generate_data"): + generated_data[getattr(p, "data_type", DataType.ALL)] = ( + p.__name__, + p.generate_data(), + ) + + for data_type, data_list in generated_data.items(): + for w in writers[data_type]: + for generator, data in data_list: + w.write(generator, data) + print('Done: Processed {}, {}, {}, {} and {} in {:.2f} seconds.' .format( pluralized_articles, @@ -214,6 +240,15 @@ class Pelican: logger.debug("Found writer: %s", writer) return writer(self.output_path, settings=self.settings) + def _get_writers(self): + return { + DataType.ALL: [self._get_writer()], + DataType.CONTENT: [], + DataType.COLLECTION: [ + CollectionRSSWriter(self.output_path, settings=self.settings) + ], + } + class PrintSettings(argparse.Action): def __call__(self, parser, namespace, values, option_string): diff --git a/pelican/writers.py b/pelican/writers.py index 9b27a748..e4fe1728 100644 --- a/pelican/writers.py +++ b/pelican/writers.py @@ -268,3 +268,7 @@ class Writer: context, name, kwargs, relative_urls) _write_file(template, localcontext, self.output_path, name, override_output) + + +class CollectionRSSWriter(Writer): + pass