Mercurial > piecrust2
diff piecrust/data/paginationdata.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 | a12ad254176e |
children | f070a4fc033c |
line wrap: on
line diff
--- a/piecrust/data/paginationdata.py Sat Apr 29 21:42:22 2017 -0700 +++ b/piecrust/data/paginationdata.py Wed May 17 00:11:48 2017 -0700 @@ -1,42 +1,28 @@ import time import logging -from piecrust.data.assetor import Assetor from piecrust.data.pagedata import LazyPageConfigData -from piecrust.routing import create_route_metadata -from piecrust.uriutil import split_uri logger = logging.getLogger(__name__) class PaginationData(LazyPageConfigData): - def __init__(self, page): - super(PaginationData, self).__init__(page) - self._route = None - self._route_metadata = None - - def _get_uri(self): - page = self._page - if self._route is None: - # TODO: this is not quite correct, as we're missing parts of the - # route metadata if the current page is a taxonomy page. - route_metadata = create_route_metadata(page) - self._route = page.app.getSourceRoute(page.source.name, route_metadata) - self._route_metadata = route_metadata - if self._route is None: - raise Exception("Can't get route for page: %s" % page.path) - return self._route.getUri(self._route_metadata) + def __init__(self, qualified_page): + super(PaginationData, self).__init__(qualified_page.page) + self._qualified_page = qualified_page def _load(self): + from piecrust.uriutil import split_uri + page = self._page dt = page.datetime - page_url = self._get_uri() + page_url = self._qualified_page.uri _, slug = split_uri(page.app, page_url) self._setValue('url', page_url) self._setValue('slug', slug) self._setValue( - 'timestamp', - time.mktime(page.datetime.timetuple())) + 'timestamp', + time.mktime(page.datetime.timetuple())) self._setValue('datetime', { 'year': dt.year, 'month': dt.month, 'day': dt.day, 'hour': dt.hour, 'minute': dt.minute, 'second': dt.second}) @@ -54,8 +40,8 @@ def _load_rendered_segment(self, data, name): do_render = True - eis = self._page.app.env.exec_info_stack - if eis is not None and eis.hasPage(self._page): + stack = self._page.app.env.render_ctx_stack + if stack.hasPage(self._page): # This is the pagination data for the page that is currently # being rendered! Inception! But this is possible... so just # prevent infinite recursion. @@ -64,20 +50,17 @@ assert self is data if do_render: - uri = self._get_uri() + uri = self._qualified_page.uri try: from piecrust.rendering import ( - QualifiedPage, PageRenderingContext, - render_page_segments) - qp = QualifiedPage(self._page, self._route, - self._route_metadata) - ctx = PageRenderingContext(qp) + RenderingContext, render_page_segments) + ctx = RenderingContext(self._qualified_page) render_result = render_page_segments(ctx) segs = render_result.segments except Exception as ex: logger.exception(ex) raise Exception( - "Error rendering segments for '%s'" % uri) from ex + "Error rendering segments for '%s'" % uri) from ex else: segs = {} for name in self._page.config.get('segments'):