diff piecrust/pipelines/base.py @ 876:d1095774bfcf

refactor: Fix some issues with record/cache entry collisions, add counters.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 15 Jun 2017 07:33:40 -0700
parents 448710d84121
children d6d35b2efd04
line wrap: on
line diff
--- a/piecrust/pipelines/base.py	Thu Jun 15 07:32:19 2017 -0700
+++ b/piecrust/pipelines/base.py	Thu Jun 15 07:33:40 2017 -0700
@@ -53,18 +53,28 @@
 class PipelineJobRunContext:
     """ Context for running pipeline baking jobs.
     """
-    def __init__(self, job, pipeline, record_histories):
+    def __init__(self, job, record_name, record_histories):
+        self.job = job
+        self.record_name = record_name
         self.record_histories = record_histories
-        self._job_item_spec = job.content_item.spec
-        self._record_name = pipeline.record_name
+
+    @property
+    def content_item(self):
+        return self.job.content_item
 
     @cached_property
     def previous_record(self):
-        return self.record_histories.getPreviousRecord(self._record_name)
+        return self.record_histories.getPreviousRecord(self.record_name)
+
+    @cached_property
+    def record_entry_spec(self):
+        content_item = self.content_item
+        return content_item.metadata.get('record_entry_spec',
+                                         content_item.spec)
 
     @cached_property
     def previous_entry(self):
-        return self.previous_record.getEntry(self._job_item_spec)
+        return self.previous_record.getEntry(self.record_entry_spec)
 
 
 class PipelineJobResult:
@@ -134,10 +144,10 @@
     def createJob(self, content_item):
         return PipelineJob(self, content_item)
 
-    def createRecordEntry(self, job):
+    def createRecordEntry(self, job, ctx):
         entry_class = self.RECORD_ENTRY_CLASS
         record_entry = entry_class()
-        record_entry.item_spec = job.content_item.spec
+        record_entry.item_spec = ctx.record_entry_spec
         return record_entry
 
     def mergeRecordEntry(self, record_entry, ctx):