621 def __call__(self, cls, req, rset=None, **kwargs): |
621 def __call__(self, cls, req, rset=None, **kwargs): |
622 # 'or 0' since we *must not* return None |
622 # 'or 0' since we *must not* return None |
623 return rset and self.match_expected(len(rset.rows[0])) or 0 |
623 return rset and self.match_expected(len(rset.rows[0])) or 0 |
624 |
624 |
625 |
625 |
626 @objectify_selector |
626 class paginated_rset(Selector): |
627 @lltrace |
627 """Return 1 or more for result set with more rows than one or more page |
628 def paginated_rset(cls, req, rset=None, **kwargs): |
628 size. You can specify expected number of pages to the initializer (default |
629 """Return 1 for result set with more rows than a page size. |
629 to one), and you'll get that number of pages as score if the result set is |
|
630 big enough. |
630 |
631 |
631 Page size is searched in (respecting order): |
632 Page size is searched in (respecting order): |
632 * a `page_size` argument |
633 * a `page_size` argument |
633 * a `page_size` form parameters |
634 * a `page_size` form parameters |
634 * the :ref:`navigation.page-size` property |
635 * the :ref:`navigation.page-size` property |
635 """ |
636 """ |
636 if rset is None: |
637 def __init__(self, nbpages=1): |
637 return 0 |
638 assert nbpages > 0 |
638 page_size = kwargs.get('page_size') |
639 self.nbpages = nbpages |
639 if page_size is None: |
640 |
640 page_size = req.form.get('page_size') |
641 @lltrace |
|
642 def __call__(self, cls, req, rset=None, **kwargs): |
|
643 if rset is None: |
|
644 return 0 |
|
645 page_size = kwargs.get('page_size') |
641 if page_size is None: |
646 if page_size is None: |
642 page_size = req.property_value('navigation.page-size') |
647 page_size = req.form.get('page_size') |
643 else: |
648 if page_size is None: |
644 page_size = int(page_size) |
649 page_size = req.property_value('navigation.page-size') |
645 if rset.rowcount <= page_size: |
650 else: |
646 return 0 |
651 page_size = int(page_size) |
647 return 1 |
652 if rset.rowcount <= (page_size*self.nbpages): |
|
653 return 0 |
|
654 return self.nbpages |
648 |
655 |
649 |
656 |
650 @objectify_selector |
657 @objectify_selector |
651 @lltrace |
658 @lltrace |
652 def sorted_rset(cls, req, rset=None, **kwargs): |
659 def sorted_rset(cls, req, rset=None, **kwargs): |