changeset 280:8c0c53a315ae

data: Correctly build pagination filters when we know items are pages.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 01 Mar 2015 21:39:26 -0800
parents 980bbbd0705e
children 0641fe5c3ef9
files piecrust/baking/single.py piecrust/data/filters.py piecrust/data/iterators.py piecrust/data/paginator.py piecrust/serving.py piecrust/sources/mixins.py
diffstat 6 files changed, 17 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/baking/single.py	Sun Mar 01 21:38:24 2015 -0800
+++ b/piecrust/baking/single.py	Sun Mar 01 21:39:26 2015 -0800
@@ -7,7 +7,8 @@
 import urllib.request
 from piecrust.baking.records import FLAG_OVERRIDEN, FLAG_SOURCE_MODIFIED
 from piecrust.data.filters import (PaginationFilter, HasFilterClause,
-        IsFilterClause, AndBooleanClause)
+        IsFilterClause, AndBooleanClause,
+        page_value_accessor)
 from piecrust.rendering import (PageRenderingContext, render_page,
         PASS_FORMATTING, PASS_RENDERING)
 from piecrust.sources.base import (PageFactory,
@@ -64,7 +65,8 @@
             # pagination filter for only get matching posts, and the output
             # URL will be a bit different.
             tax = self.app.getTaxonomy(taxonomy_name)
-            pagination_filter = PaginationFilter()
+            pagination_filter = PaginationFilter(
+                    value_accessor=page_value_accessor)
             if tax.is_multiple:
                 if isinstance(taxonomy_term, tuple):
                     abc = AndBooleanClause()
--- a/piecrust/data/filters.py	Sun Mar 01 21:38:24 2015 -0800
+++ b/piecrust/data/filters.py	Sun Mar 01 21:39:26 2015 -0800
@@ -4,6 +4,10 @@
 logger = logging.getLogger(__name__)
 
 
+def page_value_accessor(page, name):
+    return page.config.get(name)
+
+
 class PaginationFilter(object):
     def __init__(self, value_accessor=None):
         self.root_clause = None
--- a/piecrust/data/iterators.py	Sun Mar 01 21:38:24 2015 -0800
+++ b/piecrust/data/iterators.py	Sun Mar 01 21:39:26 2015 -0800
@@ -54,7 +54,7 @@
 
     def __iter__(self):
         if self._fil is None:
-            self._fil = PaginationFilter(self.setting_accessor)
+            self._fil = PaginationFilter(value_accessor=self.setting_accessor)
             self._fil.addClausesFromConfig(self.fil_conf)
 
         for i in self.it:
--- a/piecrust/data/paginator.py	Sun Mar 01 21:38:24 2015 -0800
+++ b/piecrust/data/paginator.py	Sun Mar 01 21:39:26 2015 -0800
@@ -1,7 +1,7 @@
 import math
 import logging
 from werkzeug.utils import cached_property
-from piecrust.data.filters import PaginationFilter
+from piecrust.data.filters import PaginationFilter, page_value_accessor
 from piecrust.data.iterators import PageIterator
 from piecrust.sources.interfaces import IPaginationSource
 
@@ -197,7 +197,7 @@
         self._iterator._iter_event += self._onIteration
 
     def _getPaginationFilter(self):
-        f = PaginationFilter()
+        f = PaginationFilter(value_accessor=page_value_accessor)
 
         if self._pgn_filter is not None:
             f.addClause(self._pgn_filter.root_clause)
--- a/piecrust/serving.py	Sun Mar 01 21:38:24 2015 -0800
+++ b/piecrust/serving.py	Sun Mar 01 21:39:26 2015 -0800
@@ -17,7 +17,8 @@
 from jinja2 import FileSystemLoader, Environment
 from piecrust.app import PieCrust
 from piecrust.data.filters import (
-        PaginationFilter, HasFilterClause, IsFilterClause)
+        PaginationFilter, HasFilterClause, IsFilterClause,
+        page_value_accessor)
 from piecrust.environment import StandardEnvironment
 from piecrust.processing.base import ProcessorPipeline
 from piecrust.rendering import PageRenderingContext, render_page
@@ -263,7 +264,7 @@
         render_ctx = PageRenderingContext(page, req_path, page_num,
                                           force_render=True)
         if taxonomy is not None:
-            flt = PaginationFilter()
+            flt = PaginationFilter(value_accessor=page_value_accessor)
             if taxonomy.is_multiple:
                 flt.addClause(HasFilterClause(taxonomy.name, term_value))
             else:
--- a/piecrust/sources/mixins.py	Sun Mar 01 21:38:24 2015 -0800
+++ b/piecrust/sources/mixins.py	Sun Mar 01 21:39:26 2015 -0800
@@ -2,7 +2,7 @@
 import os.path
 import logging
 from piecrust.data.base import PaginationData
-from piecrust.data.filters import PaginationFilter
+from piecrust.data.filters import PaginationFilter, page_value_accessor
 from piecrust.sources.base import PageFactory
 from piecrust.sources.interfaces import IPaginationSource, IListableSource
 
@@ -44,10 +44,6 @@
                 yield PaginationData(page)
 
 
-def page_setting_accessor(item, name):
-    return item.config.get(name)
-
-
 class SimplePaginationSourceMixin(IPaginationSource):
     """ Implements the `IPaginationSource` interface in a standard way that
         should fit most page sources.
@@ -70,13 +66,13 @@
         if conf == 'none' or conf == 'nil' or conf == '':
             conf = None
         if conf is not None:
-            f = PaginationFilter()
+            f = PaginationFilter(value_accessor=page_value_accessor)
             f.addClausesFromConfig(conf)
             return f
         return None
 
     def getSettingAccessor(self):
-        return page_setting_accessor
+        return page_value_accessor
 
 
 class SimpleListableSourceMixin(IListableSource):