changeset 815:69d16e1afb95

internal: Keep things out of the `PieCrust` class, and other clean-ups.
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 11 Jan 2017 09:01:01 -0800
parents aca04e175488
children d9b1e5ad869f
files piecrust/app.py piecrust/data/provider.py piecrust/generation/base.py piecrust/sources/base.py
diffstat 4 files changed, 21 insertions(+), 20 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/app.py	Wed Dec 28 01:27:02 2016 -0500
+++ b/piecrust/app.py	Wed Jan 11 09:01:01 2017 -0800
@@ -200,11 +200,6 @@
             tgts.append(tgt)
         return tgts
 
-    @cached_property
-    def dataProviderClasses(self):
-        return self.plugin_loader.getDataProviders()
-        
-
     def getSource(self, source_name):
         for source in self.sources:
             if source.name == source_name:
@@ -240,14 +235,6 @@
             if pub.target == target_name:
                 return pub
         return None
-        
-    def getDataProviderClass(cls, provider_type):
-        for prov in cls.dataProviderClasses:
-            if prov.PROVIDER_NAME == provider_type:
-                return prov
-        raise ConfigurationError(
-                "Unknown data provider type: %s" % provider_type)
-    
 
     def _get_dir(self, default_rel_dir):
         abs_dir = os.path.join(self.root_dir, default_rel_dir)
--- a/piecrust/data/provider.py	Wed Dec 28 01:27:02 2016 -0500
+++ b/piecrust/data/provider.py	Wed Jan 11 09:01:01 2017 -0800
@@ -1,10 +1,21 @@
 import time
 import collections.abc
+from piecrust.configuration import ConfigurationError
 from piecrust.data.iterators import PageIterator
 from piecrust.generation.taxonomy import Taxonomy
 from piecrust.sources.array import ArraySource
 
 
+def get_data_provider_class(app, provider_type):
+    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)
+
+
 class DataProvider(object):
     debug_render_dynamic = []
     debug_render_invoke_dynamic = []
--- a/piecrust/generation/base.py	Wed Dec 28 01:27:02 2016 -0500
+++ b/piecrust/generation/base.py	Wed Jan 11 09:01:01 2017 -0800
@@ -124,13 +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)
-        
+                "Generator '%s' requires a data type because it has "
+                "a data endpoint." % name)
+
         self._provider_type = None
 
     @cached_property
@@ -156,5 +157,7 @@
 
     def buildDataProvider(self, page, override):
         if not self._provider_type:
-            self._provider_type = self.app.getDataProviderClass(self.data_type)
+            from piecrust.data.provider import get_data_provider_class
+            self._provider_type = get_data_provider_class(self.app,
+                                                          self.data_type)
         return self._provider_type(self, page, override)
--- a/piecrust/sources/base.py	Wed Dec 28 01:27:02 2016 -0500
+++ b/piecrust/sources/base.py	Wed Jan 11 09:01:01 2017 -0800
@@ -1,7 +1,6 @@
 import copy
 import logging
 from werkzeug.utils import cached_property
-from piecrust.configuration import ConfigurationError
 from piecrust.page import Page
 
 
@@ -126,6 +125,7 @@
 
     def buildDataProvider(self, page, override):
         if not self._provider_type:
-            self._provider_type = self.app.getDataProviderClass(self.data_type)
+            from piecrust.data.provider import get_data_provider_class
+            self._provider_type = get_data_provider_class(self.app,
+                                                          self.data_type)
         return self._provider_type(self, page, override)
-