view 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 source

from piecrust.configuration import ConfigurationError


class DataProvider:
    """ The base class for a data provider.
    """
    PROVIDER_NAME = None

    debug_render_dynamic = []
    debug_render_invoke_dynamic = []

    def __init__(self, source, page):
        self._page = page
        self._sources = []
        if source is not None:
            self._sources.append(source)

    def _addSource(self, source):
        self._sources.append(source)


def build_data_provider(provider_type, source, page):
    if not provider_type:
        raise Exception("No data provider type specified.")

    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)