comparison 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
comparison
equal deleted inserted replaced
853:f070a4fc033c 854:08e02c2a2a1a
1 from piecrust.configuration import ConfigurationError 1 from piecrust.configuration import ConfigurationError
2
3
4 class UnsupportedWrappedDataProviderError(Exception):
5 pass
6 2
7 3
8 class DataProvider: 4 class DataProvider:
9 """ The base class for a data provider. 5 """ The base class for a data provider.
10 """ 6 """
11 PROVIDER_NAME = None 7 PROVIDER_NAME = None
12 8
13 debug_render_dynamic = [] 9 debug_render_dynamic = []
14 debug_render_invoke_dynamic = [] 10 debug_render_invoke_dynamic = []
15 11
16 def __init__(self, source): 12 def __init__(self, source, page):
17 self._source = source 13 self._page = page
14 self._sources = []
15 if source is not None:
16 self._sources.append(source)
18 17
19 def _wrapDataProvider(self, provider): 18 def _addSource(self, source):
20 raise UnsupportedWrappedDataProviderError() 19 self._sources.append(source)
21 20
22 21
23 def get_data_provider_class(app, provider_type): 22 def build_data_provider(provider_type, source, page):
24 if not provider_type: 23 if not provider_type:
25 raise Exception("No data provider type specified.") 24 raise Exception("No data provider type specified.")
26 for prov in app.plugin_loader.getDataProviders():
27 if prov.PROVIDER_NAME == provider_type:
28 return prov
29 raise ConfigurationError(
30 "Unknown data provider type: %s" % provider_type)
31 25
26 for p in page.app.plugin_loader.getDataProviders():
27 if p.PROVIDER_NAME == provider_type:
28 pclass = p
29 break
30 else:
31 raise ConfigurationError("Unknown data provider type: %s" %
32 provider_type)
33
34 return pclass(source, page)
35