diff piecrust/generation/base.py @ 814:aca04e175488

data: Allow page generators to have an associated data provider
author Ben Artin <ben@artins.org>
date Wed, 28 Dec 2016 01:27:02 -0500
parents 58ebf50235a5
children 69d16e1afb95
line wrap: on
line diff
--- a/piecrust/generation/base.py	Mon Jan 02 16:30:57 2017 -0500
+++ b/piecrust/generation/base.py	Wed Dec 28 01:27:02 2016 -0500
@@ -124,6 +124,14 @@
             raise ConfigurationError(
                     "Generator '%s' requires a listing page ref." % name)
         self.page_ref = PageRef(app, page_ref)
+        self.data_endpoint = config.get('data_endpoint')
+        self.data_type = config.get('data_type')
+
+        if self.data_endpoint and not self.data_type:
+            raise ConfigurationError(
+                    "Generator '%s' requires a data type because it has a data endpoint." % name)
+        
+        self._provider_type = None
 
     @cached_property
     def source(self):
@@ -146,3 +154,7 @@
     def onRouteFunctionUsed(self, route, route_metadata):
         pass
 
+    def buildDataProvider(self, page, override):
+        if not self._provider_type:
+            self._provider_type = self.app.getDataProviderClass(self.data_type)
+        return self._provider_type(self, page, override)