Mercurial > piecrust2
comparison piecrust/baking/worker.py @ 711:ab5c6a8ae90a
bake: Replace hard-coded taxonomy support with "generator" system.
* Taxonomies are now implemented one or more `TaxonomyGenerator`s.
* A `BlogArchivesGenerator` stub is there but non-functional.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 26 May 2016 19:52:47 -0700 |
parents | c62d83e17abf |
children | 234d0c7c02cf |
comparison
equal
deleted
inserted
replaced
710:e85f29b28b84 | 711:ab5c6a8ae90a |
---|---|
51 if self.ctx.previous_record_path: | 51 if self.ctx.previous_record_path: |
52 self.ctx.previous_record = BakeRecord.load( | 52 self.ctx.previous_record = BakeRecord.load( |
53 self.ctx.previous_record_path) | 53 self.ctx.previous_record_path) |
54 self.ctx.previous_record_index = {} | 54 self.ctx.previous_record_index = {} |
55 for e in self.ctx.previous_record.entries: | 55 for e in self.ctx.previous_record.entries: |
56 key = _get_transition_key(e.path, e.taxonomy_info) | 56 key = _get_transition_key(e.path, e.extra_key) |
57 self.ctx.previous_record_index[key] = e | 57 self.ctx.previous_record_index[key] = e |
58 | 58 |
59 # Create the job handlers. | 59 # Create the job handlers. |
60 job_handlers = { | 60 job_handlers = { |
61 JOB_LOAD: LoadJobHandler(self.ctx), | 61 JOB_LOAD: LoadJobHandler(self.ctx), |
148 | 148 |
149 | 149 |
150 class RenderFirstSubJobHandler(JobHandler): | 150 class RenderFirstSubJobHandler(JobHandler): |
151 def handleJob(self, job): | 151 def handleJob(self, job): |
152 # Render the segments for the first sub-page of this page. | 152 # Render the segments for the first sub-page of this page. |
153 fac = load_factory(self.app, job) | 153 fac = load_factory(self.app, job['factory_info']) |
154 self.app.env.addManifestEntry('RenderJobs', fac.ref_spec) | 154 self.app.env.addManifestEntry('RenderJobs', fac.ref_spec) |
155 | 155 |
156 # These things should be OK as they're checked upstream by the baker. | 156 route_index = job['route_index'] |
157 route = self.app.getRoute(fac.source.name, fac.metadata, | 157 route = self.app.routes[route_index] |
158 skip_taxonomies=True) | |
159 assert route is not None | |
160 | 158 |
161 page = fac.buildPage() | 159 page = fac.buildPage() |
162 route_metadata = create_route_metadata(page) | 160 route_metadata = create_route_metadata(page) |
163 qp = QualifiedPage(page, route, route_metadata) | 161 qp = QualifiedPage(page, route, route_metadata) |
164 ctx = PageRenderingContext(qp) | 162 ctx = PageRenderingContext(qp) |
196 def handleJob(self, job): | 194 def handleJob(self, job): |
197 # Actually bake the page and all its sub-pages to the output folder. | 195 # Actually bake the page and all its sub-pages to the output folder. |
198 fac = load_factory(self.app, job['factory_info']) | 196 fac = load_factory(self.app, job['factory_info']) |
199 self.app.env.addManifestEntry('BakeJobs', fac.ref_spec) | 197 self.app.env.addManifestEntry('BakeJobs', fac.ref_spec) |
200 | 198 |
199 route_index = job['route_index'] | |
201 route_metadata = job['route_metadata'] | 200 route_metadata = job['route_metadata'] |
202 tax_info = job['taxonomy_info'] | 201 route = self.app.routes[route_index] |
203 if tax_info is not None: | 202 |
204 route = self.app.getTaxonomyRoute(tax_info.taxonomy_name, | 203 gen_name = job['generator_name'] |
205 tax_info.source_name) | 204 gen_key = job['generator_record_key'] |
206 else: | 205 dirty_source_names = job['dirty_source_names'] |
207 route = self.app.getRoute(fac.source.name, route_metadata, | |
208 skip_taxonomies=True) | |
209 assert route is not None | |
210 | 206 |
211 page = fac.buildPage() | 207 page = fac.buildPage() |
212 qp = QualifiedPage(page, route, route_metadata) | 208 qp = QualifiedPage(page, route, route_metadata) |
213 | 209 |
214 result = { | 210 result = { |
215 'path': fac.path, | 211 'path': fac.path, |
216 'taxonomy_info': tax_info, | 212 'generator_name': gen_name, |
213 'generator_record_key': gen_key, | |
217 'sub_entries': None, | 214 'sub_entries': None, |
218 'errors': None} | 215 'errors': None} |
219 dirty_source_names = job['dirty_source_names'] | 216 |
217 if job.get('needs_config', False): | |
218 result['config'] = page.config.getAll() | |
220 | 219 |
221 previous_entry = None | 220 previous_entry = None |
222 if self.ctx.previous_record_index is not None: | 221 if self.ctx.previous_record_index is not None: |
223 key = _get_transition_key(fac.path, tax_info) | 222 key = _get_transition_key(fac.path, gen_key) |
224 previous_entry = self.ctx.previous_record_index.get(key) | 223 previous_entry = self.ctx.previous_record_index.get(key) |
225 | 224 |
226 logger.debug("Baking page: %s" % fac.ref_spec) | 225 logger.debug("Baking page: %s" % fac.ref_spec) |
226 logger.debug("With route metadata: %s" % route_metadata) | |
227 try: | 227 try: |
228 sub_entries = self.page_baker.bake( | 228 sub_entries = self.page_baker.bake( |
229 qp, previous_entry, dirty_source_names, tax_info) | 229 qp, previous_entry, dirty_source_names, gen_name) |
230 result['sub_entries'] = sub_entries | 230 result['sub_entries'] = sub_entries |
231 | 231 |
232 except BakingError as ex: | 232 except BakingError as ex: |
233 logger.debug("Got baking error. Sending it to master.") | 233 logger.debug("Got baking error. Sending it to master.") |
234 result['errors'] = _get_errors(ex) | 234 result['errors'] = _get_errors(ex) |