From e4f011a697f3b3ca430c57108c9633f9acad5d02 Mon Sep 17 00:00:00 2001 From: Stuart Colville Date: Sun, 29 Apr 2012 10:34:20 +0100 Subject: [PATCH] Refactor generators to aid testing --- pelican/generators.py | 48 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/pelican/generators.py b/pelican/generators.py index 43861b23..99f4bef8 100644 --- a/pelican/generators.py +++ b/pelican/generators.py @@ -162,20 +162,22 @@ class ArticlesGenerator(Generator): writer.write_feed(items, self.context, self.settings['TRANSLATION_FEED'] % lang) - def generate_pages(self, writer): - """Generate the pages on the disk""" - + def generate_articles(self, writer): + """Generate the articles.""" write = partial(writer.write_file, relative_urls=self.settings.get('RELATIVE_URLS')) - # to minimize the number of relative path stuff modification - # in writer, articles pass first article_template = self.get_template('article') for article in chain(self.translations, self.articles): write(article.save_as, article_template, self.context, article=article, category=article.category) + def generate_direct_templates(self, writer): + """Generate direct templates pages""" + write = partial(writer.write_file, + relative_urls=self.settings.get('RELATIVE_URLS')) + PAGINATED_TEMPLATES = self.settings.get('PAGINATED_DIRECT_TEMPLATES') for template in self.settings.get('DIRECT_TEMPLATES'): paginated = {} @@ -194,7 +196,11 @@ class ArticlesGenerator(Generator): self.context, blog=True, paginated=paginated, page_name=template) - # and subfolders after that + def generate_tags(self, writer): + """Generate Tags pages.""" + write = partial(writer.write_file, + relative_urls=self.settings.get('RELATIVE_URLS')) + tag_template = self.get_template('tag') for tag, articles in self.tags.items(): articles.sort(key=attrgetter('date'), reverse=True) @@ -204,6 +210,11 @@ class ArticlesGenerator(Generator): paginated={'articles': articles, 'dates': dates}, page_name=u'tag/%s' % tag) + def generate_categories(self, writer): + """Generate category pages.""" + write = partial(writer.write_file, + relative_urls=self.settings.get('RELATIVE_URLS')) + category_template = self.get_template('category') for cat, articles in self.categories: dates = [article for article in self.dates if article in articles] @@ -212,6 +223,11 @@ class ArticlesGenerator(Generator): paginated={'articles': articles, 'dates': dates}, page_name=u'category/%s' % cat) + def generate_authors(self, writer): + """Generate Author pages.""" + write = partial(writer.write_file, + relative_urls=self.settings.get('RELATIVE_URLS')) + author_template = self.get_template('author') for aut, articles in self.authors: dates = [article for article in self.dates if article in articles] @@ -220,10 +236,30 @@ class ArticlesGenerator(Generator): paginated={'articles': articles, 'dates': dates}, page_name=u'author/%s' % aut) + def generate_drafts(self, writer): + """Generate drafts pages.""" + write = partial(writer.write_file, + relative_urls=self.settings.get('RELATIVE_URLS')) + + article_template = self.get_template('article') for article in self.drafts: write('drafts/%s.html' % article.slug, article_template, self.context, article=article, category=article.category) + def generate_pages(self, writer): + """Generate the pages on the disk""" + + # to minimize the number of relative path stuff modification + # in writer, articles pass first + self.generate_articles(writer) + self.generate_direct_templates(writer) + + # and subfolders after that + self.generate_tags(writer) + self.generate_categories(writer) + self.generate_authors(writer) + self.generate_drafts(writer) + def generate_context(self): """change the context"""