Changeset 3825

Show
Ignore:
Timestamp:
12/15/07 08:50:47 (7 months ago)
Author:
roger
Message:

fix #1629

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/1.1/CHANGELOG.txt

    r3755 r3825  
    2929 
    30301.0.4: 
    31 ---------------------------- 
     31------ 
     32 
     33Changes 
     34~~~~~~~ 
     35 
     36* Pagination can be disabled by using ``allow_limit_override`` and  
     37  ``tg_paginate_limit=0``, allowing all results been returned on one single  
     38  page (#1629). 
     39 
     40Fixes 
     41~~~~~ 
     42 
     43* Paginate does a better handling of zeroed limit, avoiding ZeroDivisionError 
     44  exception (#1629). 
     45 
     46Contributors 
     47~~~~~~~~~~~~ 
     48 
     49Toshio Kuratomi. 
     50 
     51 
     521.0.4b3: (December, 2, 2007): 
     53----------------------------- 
    3254 
    3355Deprecations 
  • branches/1.1/turbogears/paginate.py

    r3745 r3825  
    200200                    'Variable is not a list or SelectResults or Query (%s)' % type( 
    201201                            var_data)) 
     202 
     203            # If limit is zero then return all our rows 
     204            if not limit_: 
     205                limit_ = row_count or 1 
    202206 
    203207            page_count = int(ceil(float(row_count)/limit_)) 
  • branches/1.1/turbogears/tests/test_paginate.py

    r3789 r3825  
    257257 
    258258        def empty(self): 
    259             spy = Spy(var_name='data', pages=[], limit=4, page_count=0, 
     259            spy = Spy(var_name='data', pages=[], page_count=0, 
    260260                      order=None, ordering={}, row_count=0, 
    261261                      current_page=1, first_item=0, last_item=0) 
    262262            data = [] 
    263263            return dict(data=data, spy=spy) 
    264         empty = paginate("data", limit=4)(empty) 
     264        empty = paginate("data", limit=4, allow_limit_override=True)(empty) 
    265265        empty = expose()(empty) 
    266266    # end of MyRoot ------------------------------------------------------------ 
     
    401401        for number in range(4, 7): 
    402402            self.request("/basic/?tg_paginate_no=%s" % number) 
    403             print self.body 
    404403            assert '"data": [8, 9]' in self.body 
    405404            Spy.assert_ok(self.body, 'current_page', 3) 
     
    409408    def test_last_page(self): 
    410409        self.request("/basic/?tg_paginate_no=last") 
    411         print self.body 
    412410        assert '"data": [8, 9]' in self.body 
    413411        Spy.assert_ok(self.body, 'current_page', 3) 
     
    461459    def test_empty_data(self): 
    462460        self.request("/empty") 
     461        assert '"data": []' in self.body 
     462        Spy.assert_ok(self.body, 'limit', 4) 
     463 
     464    def test_zero_limit(self): 
     465        self.request("/custom_limit/?data_tgp_limit=0") 
     466        assert '"data": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]' in self.body 
     467        Spy.assert_ok(self.body, 'page_count', 1) 
     468        Spy.assert_ok(self.body, 'limit', 10) 
     469        Spy.assert_ok(self.body, 'pages', [1]) 
     470 
     471    def test_empty_data_zero_limit(self): 
     472        self.request("/empty/?data_tgp_limit=0") 
    463473        print self.body 
    464474        assert '"data": []' in self.body 
     475        Spy.assert_ok(self.body, 'page_count', 0) 
     476        Spy.assert_ok(self.body, 'limit', 1) 
    465477 
    466478 
     
    590602        related = expose("turbogears.tests.paginate")(related) 
    591603 
     604        def zero_limit(self, method=None): 
     605            if method == "Q": 
     606                data = session.query(Address) 
     607            elif method == "SR": 
     608                data = SASelectResults(session.query(Address)) 
     609            elif method == "SO": 
     610                data = SOAddress.select() 
     611            else: 
     612                raise Exception("Invalid method") 
     613 
     614            spy = Spy(var_name='data', pages=[1], limit=16, page_count=1, 
     615                      order=None, row_count=16) 
     616            return dict(data=data, spy=spy) 
     617 
     618        zero_limit = paginate("data", default_order="id", limit=0)(zero_limit) 
     619        zero_limit = expose("turbogears.tests.paginate")(zero_limit) 
     620 
    592621    # end of MyRoot ------------------------------------------------------------ 
    593622 
     
    666695        for method in "Q", "SR", "SO": 
    667696            self.request("/wrong_reversed/?method=%s" % method) 
    668             print self.body 
    669697            assert 'StandardError: default_reversed (deprecated) is only  allowed' in self.body 
    670698 
     
    862890        self.assert_order(2, 14, 13, 10, 5, 1) 
    863891        Spy.assert_ok(self.body, 'ordering', {'user.occupation.name': [0, False], 'id': [1, False]}) 
     892 
     893    def test_zero_limit(self): 
     894        for method in "Q", "SR", "SO": 
     895            self.request("/zero_limit/?method=%s" % method) 
     896            self.assert_order(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16) 
    864897 
    865898