Mercurial > piecrust2
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) +