Mercurial > piecrust2
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):