diff -r 37b31a7b8e74 -r cfa9a776d99a selectors.py --- a/selectors.py Tue Jun 01 12:16:56 2010 +0200 +++ b/selectors.py Tue Jun 01 12:19:01 2010 +0200 @@ -623,28 +623,35 @@ return rset and self.match_expected(len(rset.rows[0])) or 0 -@objectify_selector -@lltrace -def paginated_rset(cls, req, rset=None, **kwargs): - """Return 1 for result set with more rows than a page size. +class paginated_rset(Selector): + """Return 1 or more for result set with more rows than one or more page + size. You can specify expected number of pages to the initializer (default + to one), and you'll get that number of pages as score if the result set is + big enough. Page size is searched in (respecting order): * a `page_size` argument * a `page_size` form parameters * the :ref:`navigation.page-size` property """ - if rset is None: - return 0 - page_size = kwargs.get('page_size') - if page_size is None: - page_size = req.form.get('page_size') + def __init__(self, nbpages=1): + assert nbpages > 0 + self.nbpages = nbpages + + @lltrace + def __call__(self, cls, req, rset=None, **kwargs): + if rset is None: + return 0 + page_size = kwargs.get('page_size') if page_size is None: - page_size = req.property_value('navigation.page-size') - else: - page_size = int(page_size) - if rset.rowcount <= page_size: - return 0 - return 1 + page_size = req.form.get('page_size') + if page_size is None: + page_size = req.property_value('navigation.page-size') + else: + page_size = int(page_size) + if rset.rowcount <= (page_size*self.nbpages): + return 0 + return self.nbpages @objectify_selector