selectors.py
branchstable
changeset 5615 cfa9a776d99a
parent 5608 f9ab62103ad4
child 5627 a7e40cccdc9b
child 5732 7b0765f22ad0
equal deleted inserted replaced
5614:37b31a7b8e74 5615:cfa9a776d99a
   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):