diff piecrust/data/paginator.py @ 6:f5ca5c5bed85

More Python 3 fixes, modularization, and new unit tests.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 16 Aug 2014 08:15:30 -0700
parents 474c9882decf
children dc8a6ff88f37
line wrap: on
line diff
--- a/piecrust/data/paginator.py	Mon Aug 11 22:36:47 2014 -0700
+++ b/piecrust/data/paginator.py	Sat Aug 16 08:15:30 2014 -0700
@@ -1,6 +1,7 @@
 import math
 import logging
 from werkzeug.utils import cached_property
+from piecrust.data.base import IPaginationSource
 from piecrust.data.filters import PaginationFilter
 from piecrust.data.iterators import PageIterator
 
@@ -82,8 +83,11 @@
 
     @cached_property
     def items_per_page(self):
-        return (self._parent_page.config.get('items_per_page') or
-            self._source.items_per_page)
+        if self._parent_page:
+            ipp = self._parent_page.config.get('items_per_page')
+            if ipp is not None:
+                return ipp
+        return self._source.getItemsPerPage()
 
     @property
     def items_this_page(self):
@@ -152,7 +156,7 @@
             return []
 
         if radius <= 0 or total_page_count < (2 * radius + 1):
-            return list(range(1, total_page_count))
+            return list(range(1, total_page_count + 1))
 
         first_num = self._page_num - radius
         last_num = self._page_num + radius
@@ -164,7 +168,7 @@
             last_num = total_page_count
         first_num = max(1, first_num)
         last_num = min(total_page_count, last_num)
-        return list(range(first_num, last_num))
+        return list(range(first_num, last_num + 1))
 
     def page(self, index):
         return self._getPageUri(index)
@@ -191,12 +195,10 @@
         if self._pgn_filter is not None:
             f.addClause(self._pgn_filter.root_clause)
 
-        conf = (self._parent_page.config.get('items_filters') or
-                self._parent_page.app.config.get('site/items_filters'))
-        if conf == 'none' or conf == 'nil' or conf == '':
-            conf = None
-        if conf is not None:
-            f.addClausesFromConfig(conf)
+        if isinstance(self._source, IPaginationSource):
+            sf = self._source.getPaginationFilter(self._parent_page)
+            if sf is not None:
+                f.addClause(sf)
 
         return f
 
@@ -209,7 +211,7 @@
         return uri
 
     def _onIteration(self):
-        if not self._pgn_set_on_ctx:
+        if self._parent_page is not None and not self._pgn_set_on_ctx:
             eis = self._parent_page.app.env.exec_info_stack
             eis.current_page_info.render_ctx.setPagination(self)
             self._pgn_set_on_ctx = True