Mercurial > piecrust2
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 |