comparison piecrust/pipelines/page.py @ 1018:3c6e6e7b9639

bake: Fix totally broken page baking caused by previous commit.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 29 Nov 2017 21:35:49 -0800
parents fa489c5e829e
children 298b07a899b5
comparison
equal deleted inserted replaced
1017:3c669bb9498e 1018:3c6e6e7b9639
62 used_paths = _get_used_paths_from_records( 62 used_paths = _get_used_paths_from_records(
63 ctx.record_histories.current.records) 63 ctx.record_histories.current.records)
64 history = ctx.record_histories.getHistory(ctx.record_name).copy() 64 history = ctx.record_histories.getHistory(ctx.record_name).copy()
65 history.build() 65 history.build()
66 66
67 pass_num = ctx.pass_num
67 record = ctx.current_record 68 record = ctx.current_record
68 record.user_data['dirty_source_names'] = set() 69 record.user_data['dirty_source_names'] = set()
69 70
70 for prev, cur in history.diffs: 71 for prev, cur in history.diffs:
71 # Ignore pages that disappeared since last bake. 72 # Ignore pages that disappeared since last bake.
96 if override_source.config['realm'] == \ 97 if override_source.config['realm'] == \
97 self.source.config['realm']: 98 self.source.config['realm']:
98 logger.error( 99 logger.error(
99 "Page '%s' would get baked to '%s' " 100 "Page '%s' would get baked to '%s' "
100 "but is overriden by '%s'." % 101 "but is overriden by '%s'." %
101 (enrty.item_spec, path, override_entry.item_spec)) 102 (cur.item_spec, path, override_entry.item_spec))
102 else: 103 else:
103 logger.debug( 104 logger.debug(
104 "Page '%s' would get baked to '%s' " 105 "Page '%s' would get baked to '%s' "
105 "but is overriden by '%s'." % 106 "but is overriden by '%s'." %
106 (cur.item_spec, path, override_entry.item_spec)) 107 (cur.item_spec, path, override_entry.item_spec))
107 108
108 cur.flags |= PagePipelineRecordEntry.FLAG_OVERRIDEN 109 cur.flags |= PagePipelineRecordEntry.FLAG_OVERRIDEN
109 continue 110 continue
110 111
111 # Nope, all good, let's create a job for this item. 112 # Nope, all good, let's create a job for this item.
112 jobs.append(create_job(self, cur.item_spec)) 113 jobs.append(create_job(self, cur.item_spec,
114 pass_num=pass_num))
113 115
114 if len(jobs) > 0: 116 if len(jobs) > 0:
115 return jobs 117 return jobs
116 return None 118 return None
117 119
159 if len(jobs) > 0: 161 if len(jobs) > 0:
160 return jobs 162 return jobs
161 return None 163 return None
162 164
163 def handleJobResult(self, result, ctx): 165 def handleJobResult(self, result, ctx):
166 pass_num = ctx.pass_num
164 step_num = ctx.step_num 167 step_num = ctx.step_num
165 168
166 if step_num == 0: 169 if pass_num == 0:
167 print(result)
168 new_entry = self.createRecordEntry(result['item_spec']) 170 new_entry = self.createRecordEntry(result['item_spec'])
171 new_entry.flags = result['flags']
169 new_entry.config = result['config'] 172 new_entry.config = result['config']
170 new_entry.route_params = result['route_params'] 173 new_entry.route_params = result['route_params']
171 new_entry.timestamp = result['timestamp'] 174 new_entry.timestamp = result['timestamp']
172 ctx.record.addEntry(new_entry) 175 ctx.record.addEntry(new_entry)
173 else: 176 else:
178 ctx.record.user_data['dirty_source_names'].add(self.source.name) 181 ctx.record.user_data['dirty_source_names'].add(self.source.name)
179 182
180 def run(self, job, ctx, result): 183 def run(self, job, ctx, result):
181 pass_num = job.get('pass_num', 0) 184 pass_num = job.get('pass_num', 0)
182 step_num = job.get('step_num', 0) 185 step_num = job.get('step_num', 0)
186
183 if pass_num == 0: 187 if pass_num == 0:
184 if step_num == 0: 188 if step_num == 0:
185 self._loadPage(job, ctx, result) 189 return self._loadPage(job, ctx, result)
190
191 elif pass_num == 1:
192 if step_num == 0:
193 return self._renderOrPostpone(job, ctx, result)
186 elif step_num == 1: 194 elif step_num == 1:
187 self._renderOrPostpone(job, ctx, result) 195 return self._renderAlways(job, ctx, result)
188 elif step_num == 2: 196
189 self._renderAlways(job, ctx, result) 197 elif pass_num == 2:
190 else: 198 if step_num == 0:
191 raise Exception("Unexpected pipeline step: %d" % step_num) 199 return self._renderAlways(job, ctx, result)
192 elif pass_num == 1: 200
193 self._renderAlways(job, ctx, result) 201 raise Exception("Unexpected pipeline pass/step: %d/%d" %
194 else: 202 (pass_num, step_num))
195 raise Exception("Unexpected pipeline pass: %d" % pass_num)
196 203
197 def getDeletions(self, ctx): 204 def getDeletions(self, ctx):
198 for prev, cur in ctx.record_history.diffs: 205 for prev, cur in ctx.record_history.diffs:
199 if prev and not cur: 206 if prev and not cur:
200 for sub in prev.subs: 207 for sub in prev.subs:
214 221
215 def _loadPage(self, job, ctx, result): 222 def _loadPage(self, job, ctx, result):
216 content_item = content_item_from_job(self, job) 223 content_item = content_item_from_job(self, job)
217 page = self.app.getPage(self.source, content_item) 224 page = self.app.getPage(self.source, content_item)
218 225
219 trigger_next_job = True
220 result['flags'] = PagePipelineRecordEntry.FLAG_NONE 226 result['flags'] = PagePipelineRecordEntry.FLAG_NONE
221 result['config'] = page.config.getAll() 227 result['config'] = page.config.getAll()
222 result['route_params'] = item.metadata['route_params'] 228 result['route_params'] = content_item.metadata['route_params']
223 result['timestamp'] = page.datetime.timestamp() 229 result['timestamp'] = page.datetime.timestamp()
224 230
225 if page.was_modified: 231 if page.was_modified:
226 result['flags'] |= PagePipelineRecordEntry.FLAG_SOURCE_MODIFIED 232 result['flags'] |= PagePipelineRecordEntry.FLAG_SOURCE_MODIFIED
227 if page.config.get(self._draft_setting): 233 if page.config.get(self._draft_setting):
228 result['flags'] |= PagePipelineRecordEntry.FLAG_IS_DRAFT 234 result['flags'] |= PagePipelineRecordEntry.FLAG_IS_DRAFT
229 trigger_next_job = False
230
231 if trigger_next_job:
232 result['next_step_job'] = create_job(self, content_item.spec)
233 235
234 def _renderOrPostpone(self, job, ctx, result): 236 def _renderOrPostpone(self, job, ctx, result):
235 # Here our job is to render the page's segments so that they're 237 # Here our job is to render the page's segments so that they're
236 # cached in memory and on disk... unless we detect that the page 238 # cached in memory and on disk... unless we detect that the page
237 # is using some other sources, in which case we abort and we'll try 239 # is using some other sources, in which case we abort and we'll try
238 # again on the second pass. 240 # again on the second pass.
239 content_item = content_item_from_job(self, job) 241 content_item = content_item_from_job(self, job)
240 logger.debug("Conditional render for: %s" % content_item.spec) 242 logger.debug("Conditional render for: %s" % content_item.spec)
241 page = self.app.getPage(self.source, content_item) 243 page = self.app.getPage(self.source, content_item)
242 if page.config.get(self._draft_setting): 244 if page.config.get(self._draft_setting):
243 return 245 raise Exception("Shouldn't have a draft page in a render job!")
244 246
245 prev_entry = ctx.previous_entry 247 prev_entry = ctx.previous_entry
246 248
247 env = self.app.env 249 env = self.app.env
248 env.abort_source_use = True 250 env.abort_source_use = True