diff piecrust/dataproviders/base.py @ 854:08e02c2a2a1a

core: Keep refactoring, this time to prepare for generator sources. - Make a few APIs simpler. - Content pipelines create their own jobs, so that generator sources can keep aborting in `getContents`, but rely on their pipeline to generate pages for baking.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 04 Jun 2017 23:34:28 -0700
parents f070a4fc033c
children d231a10d18f9
line wrap: on
line diff
--- a/piecrust/dataproviders/base.py	Sun May 21 00:06:59 2017 -0700
+++ b/piecrust/dataproviders/base.py	Sun Jun 04 23:34:28 2017 -0700
@@ -1,10 +1,6 @@
 from piecrust.configuration import ConfigurationError
 
 
-class UnsupportedWrappedDataProviderError(Exception):
-    pass
-
-
 class DataProvider:
     """ The base class for a data provider.
     """
@@ -13,19 +9,27 @@
     debug_render_dynamic = []
     debug_render_invoke_dynamic = []
 
-    def __init__(self, source):
-        self._source = source
+    def __init__(self, source, page):
+        self._page = page
+        self._sources = []
+        if source is not None:
+            self._sources.append(source)
 
-    def _wrapDataProvider(self, provider):
-        raise UnsupportedWrappedDataProviderError()
+    def _addSource(self, source):
+        self._sources.append(source)
 
 
-def get_data_provider_class(app, provider_type):
+def build_data_provider(provider_type, source, page):
     if not provider_type:
         raise Exception("No data provider type specified.")
-    for prov in app.plugin_loader.getDataProviders():
-        if prov.PROVIDER_NAME == provider_type:
-            return prov
-    raise ConfigurationError(
-        "Unknown data provider type: %s" % provider_type)
 
+    for p in page.app.plugin_loader.getDataProviders():
+        if p.PROVIDER_NAME == provider_type:
+            pclass = p
+            break
+    else:
+        raise ConfigurationError("Unknown data provider type: %s" %
+                                 provider_type)
+
+    return pclass(source, page)
+