diff piecrust/generation/blogarchives.py @ 729:e35407c60e00

templating: Make blog archives generator expose more templating data. In addition to pagination data, also expose a non-paginating iterator that lists all posts in a source by chronological order.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 01 Jun 2016 22:09:21 -0700
parents 09115f0900f0
children 13ec290bfc13
line wrap: on
line diff
--- a/piecrust/generation/blogarchives.py	Mon May 30 20:45:27 2016 -0700
+++ b/piecrust/generation/blogarchives.py	Wed Jun 01 22:09:21 2016 -0700
@@ -1,6 +1,8 @@
 import logging
 import datetime
+from piecrust.chefutil import format_timed_scope
 from piecrust.data.filters import PaginationFilter, IFilterClause
+from piecrust.data.iterators import PageIterator
 from piecrust.generation.base import PageGenerator
 
 
@@ -34,6 +36,12 @@
 
         ctx.custom_data['year'] = year
 
+        flt2 = PaginationFilter()
+        flt2.addClause(IsFromYearFilterClause(year))
+        it = PageIterator(self.source, pagination_filter=flt2,
+                          sorter=_date_sorter)
+        ctx.custom_data['archives'] = it
+
     def bake(self, ctx):
         if not self.page_ref.exists:
             logger.debug(
@@ -88,11 +96,11 @@
                     y = ctx.getSeedFromRecordExtraKey(prev_entry.extra_key)
                 except InvalidRecordExtraKey:
                     continue
-            if y in all_years:
-                logger.debug("Creating unbaked entry for %d archive." % y)
-                ctx.collapseRecord(prev_entry)
-            else:
-                logger.debug("No page references year %d anymore." % y)
+                if y in all_years:
+                    logger.debug("Creating unbaked entry for %d archive." % y)
+                    ctx.collapseRecord(prev_entry)
+                else:
+                    logger.debug("No page references year %d anymore." % y)
 
 
 class IsFromYearFilterClause(IFilterClause):
@@ -102,3 +110,7 @@
     def pageMatches(self, fil, page):
         return (page.datetime.year == self.year)
 
+
+def _date_sorter(it):
+    return sorted(it, key=lambda x: x.datetime)
+