comparison piecrust/sources/blogarchives.py @ 1136:5f97b5b59dfe

bake: Optimize cache handling for the baking process. - Get rid of the 2-level pipeline runs... handle a single set of passes. - Go back to load/render segments/layout passes for pages. - Add descriptions of what each job batch does. - Improve the taxonomy pipeline so it doesn't re-bake terms that don't need to be re-baked. - Simplify some of the code.
author Ludovic Chabant <ludovic@chabant.com>
date Mon, 23 Apr 2018 21:47:49 -0700
parents ba809c221a27
children 9f3e702a8a69
comparison
equal deleted inserted replaced
1135:6350ee084273 1136:5f97b5b59dfe
5 from piecrust.data.filters import PaginationFilter, IFilterClause 5 from piecrust.data.filters import PaginationFilter, IFilterClause
6 from piecrust.dataproviders.pageiterator import ( 6 from piecrust.dataproviders.pageiterator import (
7 PageIterator, HardCodedFilterIterator, DateSortIterator) 7 PageIterator, HardCodedFilterIterator, DateSortIterator)
8 from piecrust.page import Page 8 from piecrust.page import Page
9 from piecrust.pipelines._pagebaker import PageBaker 9 from piecrust.pipelines._pagebaker import PageBaker
10 from piecrust.pipelines._pagerecords import ( 10 from piecrust.pipelines._pagerecords import PagePipelineRecordEntry
11 PagePipelineRecordEntry,
12 add_page_job_result, merge_job_result_into_record_entry)
13 from piecrust.pipelines.base import ( 11 from piecrust.pipelines.base import (
14 ContentPipeline, 12 ContentPipeline,
15 create_job, get_record_name_for_source, content_item_from_job) 13 create_job, get_record_name_for_source)
16 from piecrust.routing import RouteParameter 14 from piecrust.routing import RouteParameter
17 from piecrust.sources.base import ContentItem 15 from piecrust.sources.base import ContentItem
18 from piecrust.sources.generator import GeneratorSourceBase 16 from piecrust.sources.generator import GeneratorSourceBase
19 from piecrust.sources.list import ListSource 17 from piecrust.sources.list import ListSource
20 18
191 189
192 entry = rec_fac(record_entry_spec) 190 entry = rec_fac(record_entry_spec)
193 current_record.addEntry(entry) 191 current_record.addEntry(entry)
194 192
195 if len(jobs) > 0: 193 if len(jobs) > 0:
196 return jobs 194 return jobs, "archive"
197 return None 195 return None, None
198 196
199 def run(self, job, ctx, result): 197 def run(self, job, ctx, result):
200 year = job['year'] 198 year = job['year']
201 content_item = ContentItem('_index', 199 content_item = ContentItem('_index',
202 {'year': year, 200 {'year': year,
204 page = Page(self.source, content_item) 202 page = Page(self.source, content_item)
205 203
206 prev_entry = ctx.previous_entry 204 prev_entry = ctx.previous_entry
207 rdr_subs = self._pagebaker.bake(page, prev_entry) 205 rdr_subs = self._pagebaker.bake(page, prev_entry)
208 206
209 add_page_job_result(result)
210 result['subs'] = rdr_subs 207 result['subs'] = rdr_subs
211 result['year'] = page.source_metadata['year'] 208 result['year'] = page.source_metadata['year']
212 209
213 def handleJobResult(self, result, ctx): 210 def handleJobResult(self, result, ctx):
214 existing = ctx.record_entry 211 existing = ctx.record_entry
215 merge_job_result_into_record_entry(existing, result) 212 existing.subs = result['subs']
216 existing.year = result['year'] 213 existing.year = result['year']
217 214
218 def postJobRun(self, ctx): 215 def postJobRun(self, ctx):
219 # Create bake entries for the years that were *not* dirty. 216 # Create bake entries for the years that were *not* dirty.
220 # Otherwise, when checking for deleted pages, we would not find any 217 # Otherwise, when checking for deleted pages, we would not find any
241 current_records = ctx.record_histories.current 238 current_records = ctx.record_histories.current
242 cur_rec = current_records.getRecord(record_name) 239 cur_rec = current_records.getRecord(record_name)
243 for cur_entry in cur_rec.getEntries(): 240 for cur_entry in cur_rec.getEntries():
244 dt = datetime.datetime.fromtimestamp(cur_entry.timestamp) 241 dt = datetime.datetime.fromtimestamp(cur_entry.timestamp)
245 all_years.add(dt.year) 242 all_years.add(dt.year)
246 if cur_entry.was_any_sub_baked: 243 if cur_entry.hasFlag(
244 PagePipelineRecordEntry.FLAG_SEGMENTS_RENDERED):
247 dirty_years.add(dt.year) 245 dirty_years.add(dt.year)
248 246
249 self._all_years = all_years 247 self._all_years = all_years
250 self._dirty_years = dirty_years 248 self._dirty_years = dirty_years
251 249