Mercurial > piecrust2
comparison 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 |
comparison
equal
deleted
inserted
replaced
728:e7481bbbb29f | 729:e35407c60e00 |
---|---|
1 import logging | 1 import logging |
2 import datetime | 2 import datetime |
3 from piecrust.chefutil import format_timed_scope | |
3 from piecrust.data.filters import PaginationFilter, IFilterClause | 4 from piecrust.data.filters import PaginationFilter, IFilterClause |
5 from piecrust.data.iterators import PageIterator | |
4 from piecrust.generation.base import PageGenerator | 6 from piecrust.generation.base import PageGenerator |
5 | 7 |
6 | 8 |
7 logger = logging.getLogger(__name__) | 9 logger = logging.getLogger(__name__) |
8 | 10 |
31 flt = PaginationFilter() | 33 flt = PaginationFilter() |
32 flt.addClause(IsFromYearFilterClause(year)) | 34 flt.addClause(IsFromYearFilterClause(year)) |
33 ctx.pagination_filter = flt | 35 ctx.pagination_filter = flt |
34 | 36 |
35 ctx.custom_data['year'] = year | 37 ctx.custom_data['year'] = year |
38 | |
39 flt2 = PaginationFilter() | |
40 flt2.addClause(IsFromYearFilterClause(year)) | |
41 it = PageIterator(self.source, pagination_filter=flt2, | |
42 sorter=_date_sorter) | |
43 ctx.custom_data['archives'] = it | |
36 | 44 |
37 def bake(self, ctx): | 45 def bake(self, ctx): |
38 if not self.page_ref.exists: | 46 if not self.page_ref.exists: |
39 logger.debug( | 47 logger.debug( |
40 "No page found at '%s', skipping %s archives." % | 48 "No page found at '%s', skipping %s archives." % |
86 if prev_entry and not cur_entry: | 94 if prev_entry and not cur_entry: |
87 try: | 95 try: |
88 y = ctx.getSeedFromRecordExtraKey(prev_entry.extra_key) | 96 y = ctx.getSeedFromRecordExtraKey(prev_entry.extra_key) |
89 except InvalidRecordExtraKey: | 97 except InvalidRecordExtraKey: |
90 continue | 98 continue |
91 if y in all_years: | 99 if y in all_years: |
92 logger.debug("Creating unbaked entry for %d archive." % y) | 100 logger.debug("Creating unbaked entry for %d archive." % y) |
93 ctx.collapseRecord(prev_entry) | 101 ctx.collapseRecord(prev_entry) |
94 else: | 102 else: |
95 logger.debug("No page references year %d anymore." % y) | 103 logger.debug("No page references year %d anymore." % y) |
96 | 104 |
97 | 105 |
98 class IsFromYearFilterClause(IFilterClause): | 106 class IsFromYearFilterClause(IFilterClause): |
99 def __init__(self, year): | 107 def __init__(self, year): |
100 self.year = year | 108 self.year = year |
101 | 109 |
102 def pageMatches(self, fil, page): | 110 def pageMatches(self, fil, page): |
103 return (page.datetime.year == self.year) | 111 return (page.datetime.year == self.year) |
104 | 112 |
113 | |
114 def _date_sorter(it): | |
115 return sorted(it, key=lambda x: x.datetime) | |
116 |