Mercurial > piecrust2
comparison piecrust/generation/blogarchives.py @ 736:13ec290bfc13
bake: Fix some crashes with new blog archive/taxonomy for incremental bakes.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 01 Jun 2016 22:46:11 -0700 |
parents | e35407c60e00 |
children | 58ebf50235a5 |
comparison
equal
deleted
inserted
replaced
735:6c500fd3194f | 736:13ec290bfc13 |
---|---|
1 import logging | 1 import logging |
2 import datetime | 2 import datetime |
3 from piecrust.chefutil import format_timed_scope | 3 from piecrust.chefutil import format_timed_scope |
4 from piecrust.data.filters import PaginationFilter, IFilterClause | 4 from piecrust.data.filters import PaginationFilter, IFilterClause |
5 from piecrust.data.iterators import PageIterator | 5 from piecrust.data.iterators import PageIterator |
6 from piecrust.generation.base import PageGenerator | 6 from piecrust.generation.base import PageGenerator, InvalidRecordExtraKey |
7 | 7 |
8 | 8 |
9 logger = logging.getLogger(__name__) | 9 logger = logging.getLogger(__name__) |
10 | 10 |
11 | 11 |
61 def _buildDirtyYears(self, ctx): | 61 def _buildDirtyYears(self, ctx): |
62 logger.debug("Gathering dirty post years.") | 62 logger.debug("Gathering dirty post years.") |
63 all_years = set() | 63 all_years = set() |
64 dirty_years = set() | 64 dirty_years = set() |
65 for _, cur_entry in ctx.getAllPageRecords(): | 65 for _, cur_entry in ctx.getAllPageRecords(): |
66 if cur_entry.source_name == self.source_name: | 66 if cur_entry and cur_entry.source_name == self.source_name: |
67 dt = datetime.datetime.fromtimestamp(cur_entry.timestamp) | 67 dt = datetime.datetime.fromtimestamp(cur_entry.timestamp) |
68 all_years.add(dt.year) | 68 all_years.add(dt.year) |
69 if cur_entry.was_any_sub_baked: | 69 if cur_entry.was_any_sub_baked: |
70 dirty_years.add(dt.year) | 70 dirty_years.add(dt.year) |
71 return all_years, dirty_years | 71 return all_years, dirty_years |
88 ctx.runJobQueue() | 88 ctx.runJobQueue() |
89 | 89 |
90 # Create bake entries for the years that were *not* dirty. | 90 # Create bake entries for the years that were *not* dirty. |
91 # Otherwise, when checking for deleted pages, we would not find any | 91 # Otherwise, when checking for deleted pages, we would not find any |
92 # outputs and would delete those files. | 92 # outputs and would delete those files. |
93 all_str_years = [str(y) for y in all_years] | |
93 for prev_entry, cur_entry in ctx.getAllPageRecords(): | 94 for prev_entry, cur_entry in ctx.getAllPageRecords(): |
94 if prev_entry and not cur_entry: | 95 if prev_entry and not cur_entry: |
95 try: | 96 try: |
96 y = ctx.getSeedFromRecordExtraKey(prev_entry.extra_key) | 97 y = ctx.getSeedFromRecordExtraKey(prev_entry.extra_key) |
97 except InvalidRecordExtraKey: | 98 except InvalidRecordExtraKey: |
98 continue | 99 continue |
99 if y in all_years: | 100 if y in all_str_years: |
100 logger.debug("Creating unbaked entry for %d archive." % y) | 101 logger.debug( |
102 "Creating unbaked entry for year %s archive." % y) | |
101 ctx.collapseRecord(prev_entry) | 103 ctx.collapseRecord(prev_entry) |
102 else: | 104 else: |
103 logger.debug("No page references year %d anymore." % y) | 105 logger.debug( |
106 "No page references year %s anymore." % y) | |
104 | 107 |
105 | 108 |
106 class IsFromYearFilterClause(IFilterClause): | 109 class IsFromYearFilterClause(IFilterClause): |
107 def __init__(self, year): | 110 def __init__(self, year): |
108 self.year = year | 111 self.year = year |