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'):