Mercurial > piecrust2
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 |