Mercurial > piecrust2
diff piecrust/data/builder.py @ 852:4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
* Everything is a `ContentSource`, including assets directories.
* Most content sources are subclasses of the base file-system source.
* A source is processed by a "pipeline", and there are 2 built-in pipelines,
one for assets and one for pages. The asset pipeline is vaguely functional,
but the page pipeline is completely broken right now.
* Rewrite the baking process as just running appropriate pipelines on each
content item. This should allow for better parallelization.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 17 May 2017 00:11:48 -0700 |
parents | 71c4f43d8fc1 |
children | f070a4fc033c |
line wrap: on
line diff
--- a/piecrust/data/builder.py Sat Apr 29 21:42:22 2017 -0700 +++ b/piecrust/data/builder.py Wed May 17 00:11:48 2017 -0700 @@ -1,53 +1,43 @@ import logging -from werkzeug.utils import cached_property from piecrust.data.base import MergedMapping from piecrust.data.linker import PageLinkerData from piecrust.data.pagedata import PageData from piecrust.data.paginator import Paginator from piecrust.data.piecrustdata import PieCrustData from piecrust.data.providersdata import DataProvidersData -from piecrust.routing import CompositeRouteFunction +from piecrust.routing import RouteFunction logger = logging.getLogger(__name__) class DataBuildingContext(object): - def __init__(self, qualified_page, page_num=1): - self.page = qualified_page - self.page_num = page_num + def __init__(self, qualified_page): + self.qualified_page = qualified_page self.pagination_source = None self.pagination_filter = None - @property - def app(self): - return self.page.app - - @cached_property - def uri(self): - return self.page.getUri(self.page_num) - def build_page_data(ctx): - app = ctx.app - page = ctx.page + qpage = ctx.qualified_page + page = qpage.page + app = page.app pgn_source = ctx.pagination_source or get_default_pagination_source(page) first_uri = ctx.page.getUri(1) pc_data = PieCrustData() config_data = PageData(page, ctx) - paginator = Paginator(page, pgn_source, - page_num=ctx.page_num, + paginator = Paginator(qpage, pgn_source, pgn_filter=ctx.pagination_filter) assetor = page.source.buildAssetor(page, first_uri) linker = PageLinkerData(page.source, page.rel_path) data = { - 'piecrust': pc_data, - 'page': config_data, - 'assets': assetor, - 'pagination': paginator, - 'family': linker - } + 'piecrust': pc_data, + 'page': config_data, + 'assets': assetor, + 'pagination': paginator, + 'family': linker + } for route in app.routes: name = route.func_name @@ -56,17 +46,13 @@ func = data.get(name) if func is None: - func = CompositeRouteFunction() - func.addFunc(route) - data[name] = func - elif isinstance(func, CompositeRouteFunction): - func.addFunc(route) + data[name] = RouteFunction(route) else: raise Exception("Route function '%s' collides with an " "existing function or template data." % name) - #TODO: handle slugified taxonomy terms. + # TODO: handle slugified taxonomy terms. site_data = app.config.getAll() providers_data = DataProvidersData(page) @@ -81,7 +67,7 @@ return data -def build_layout_data(page, page_data, contents): +def add_layout_data(page_data, contents): for name, txt in contents.items(): if name in page_data: logger.warning("Content segment '%s' will hide existing data." %