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