# HG changeset patch # User Ludovic Chabant # Date 1425274766 28800 # Node ID 8c0c53a315ae6119d53cacb3b1f1950ec6f2a4bb # Parent 980bbbd0705e2401198ae51d559509060765d5ab data: Correctly build pagination filters when we know items are pages. diff -r 980bbbd0705e -r 8c0c53a315ae piecrust/baking/single.py --- 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() diff -r 980bbbd0705e -r 8c0c53a315ae piecrust/data/filters.py --- 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 diff -r 980bbbd0705e -r 8c0c53a315ae piecrust/data/iterators.py --- 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: diff -r 980bbbd0705e -r 8c0c53a315ae piecrust/data/paginator.py --- 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) diff -r 980bbbd0705e -r 8c0c53a315ae piecrust/serving.py --- 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: diff -r 980bbbd0705e -r 8c0c53a315ae piecrust/sources/mixins.py --- 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):