diff 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
line wrap: on
line diff
--- a/piecrust/baking/worker.py	Thu May 26 19:46:28 2016 -0700
+++ b/piecrust/baking/worker.py	Thu May 26 19:52:47 2016 -0700
@@ -53,7 +53,7 @@
                     self.ctx.previous_record_path)
             self.ctx.previous_record_index = {}
             for e in self.ctx.previous_record.entries:
-                key = _get_transition_key(e.path, e.taxonomy_info)
+                key = _get_transition_key(e.path, e.extra_key)
                 self.ctx.previous_record_index[key] = e
 
         # Create the job handlers.
@@ -150,13 +150,11 @@
 class RenderFirstSubJobHandler(JobHandler):
     def handleJob(self, job):
         # Render the segments for the first sub-page of this page.
-        fac = load_factory(self.app, job)
+        fac = load_factory(self.app, job['factory_info'])
         self.app.env.addManifestEntry('RenderJobs', fac.ref_spec)
 
-        # These things should be OK as they're checked upstream by the baker.
-        route = self.app.getRoute(fac.source.name, fac.metadata,
-                                  skip_taxonomies=True)
-        assert route is not None
+        route_index = job['route_index']
+        route = self.app.routes[route_index]
 
         page = fac.buildPage()
         route_metadata = create_route_metadata(page)
@@ -198,35 +196,37 @@
         fac = load_factory(self.app, job['factory_info'])
         self.app.env.addManifestEntry('BakeJobs', fac.ref_spec)
 
+        route_index = job['route_index']
         route_metadata = job['route_metadata']
-        tax_info = job['taxonomy_info']
-        if tax_info is not None:
-            route = self.app.getTaxonomyRoute(tax_info.taxonomy_name,
-                                              tax_info.source_name)
-        else:
-            route = self.app.getRoute(fac.source.name, route_metadata,
-                                      skip_taxonomies=True)
-        assert route is not None
+        route = self.app.routes[route_index]
+
+        gen_name = job['generator_name']
+        gen_key = job['generator_record_key']
+        dirty_source_names = job['dirty_source_names']
 
         page = fac.buildPage()
         qp = QualifiedPage(page, route, route_metadata)
 
         result = {
                 'path': fac.path,
-                'taxonomy_info': tax_info,
+                'generator_name': gen_name,
+                'generator_record_key': gen_key,
                 'sub_entries': None,
                 'errors': None}
-        dirty_source_names = job['dirty_source_names']
+
+        if job.get('needs_config', False):
+            result['config'] = page.config.getAll()
 
         previous_entry = None
         if self.ctx.previous_record_index is not None:
-            key = _get_transition_key(fac.path, tax_info)
+            key = _get_transition_key(fac.path, gen_key)
             previous_entry = self.ctx.previous_record_index.get(key)
 
         logger.debug("Baking page: %s" % fac.ref_spec)
+        logger.debug("With route metadata: %s" % route_metadata)
         try:
             sub_entries = self.page_baker.bake(
-                    qp, previous_entry, dirty_source_names, tax_info)
+                    qp, previous_entry, dirty_source_names, gen_name)
             result['sub_entries'] = sub_entries
 
         except BakingError as ex: