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