Add Python 3 support in pagination.
This issue was visible when attempting to view the home page of a MediaGoblin site with more than a single page worth of items, under Python 3.
This commit is contained in:
parent
d37c6f622a
commit
58b3a65e53
@ -16,10 +16,16 @@
|
|||||||
|
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
|
try:
|
||||||
|
import mock
|
||||||
|
except ImportError:
|
||||||
|
import unittest.mock as mock
|
||||||
|
|
||||||
from werkzeug.wrappers import Request
|
from werkzeug.wrappers import Request
|
||||||
from werkzeug.test import EnvironBuilder
|
from werkzeug.test import EnvironBuilder
|
||||||
|
|
||||||
from mediagoblin.tools.request import decode_request
|
from mediagoblin.tools.request import decode_request
|
||||||
|
from mediagoblin.tools.pagination import Pagination
|
||||||
|
|
||||||
class TestDecodeRequest(object):
|
class TestDecodeRequest(object):
|
||||||
"""Test the decode_request function."""
|
"""Test the decode_request function."""
|
||||||
@ -59,3 +65,28 @@ class TestDecodeRequest(object):
|
|||||||
request.form = {'foo': 'bar'}
|
request.form = {'foo': 'bar'}
|
||||||
data = decode_request(request)
|
data = decode_request(request)
|
||||||
assert data['foo'] == 'bar'
|
assert data['foo'] == 'bar'
|
||||||
|
|
||||||
|
|
||||||
|
class TestPagination(object):
|
||||||
|
def setup(self):
|
||||||
|
mock_cursor = mock.MagicMock()
|
||||||
|
mock_cursor.count.return_value = 1
|
||||||
|
self.paginator = Pagination(1, mock_cursor)
|
||||||
|
|
||||||
|
def test_creates_valid_page_url_from_explicit_base_url(self):
|
||||||
|
"""Check that test_page_url_explicit runs.
|
||||||
|
|
||||||
|
This is a regression test for a Python 2/3 compatibility fix.
|
||||||
|
|
||||||
|
"""
|
||||||
|
url = self.paginator.get_page_url_explicit(
|
||||||
|
'http://example.com', [], 1)
|
||||||
|
assert url == 'http://example.com?page=1'
|
||||||
|
|
||||||
|
def test_iter_pages_handes_single_page(self):
|
||||||
|
"""Check that iter_pages produces the expected result for single page.
|
||||||
|
|
||||||
|
This is a regression test for a Python 2/3 compatibility fix.
|
||||||
|
|
||||||
|
"""
|
||||||
|
assert list(self.paginator.iter_pages()) == [1]
|
||||||
|
@ -14,13 +14,12 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import urllib
|
|
||||||
import copy
|
import copy
|
||||||
from math import ceil, floor
|
from math import ceil, floor
|
||||||
from itertools import count
|
from itertools import count
|
||||||
from werkzeug.datastructures import MultiDict
|
from werkzeug.datastructures import MultiDict
|
||||||
|
|
||||||
from six.moves import zip
|
from six.moves import range, urllib, zip
|
||||||
|
|
||||||
PAGINATION_DEFAULT_PER_PAGE = 30
|
PAGINATION_DEFAULT_PER_PAGE = 30
|
||||||
|
|
||||||
@ -86,7 +85,7 @@ class Pagination(object):
|
|||||||
def iter_pages(self, left_edge=2, left_current=2,
|
def iter_pages(self, left_edge=2, left_current=2,
|
||||||
right_current=5, right_edge=2):
|
right_current=5, right_edge=2):
|
||||||
last = 0
|
last = 0
|
||||||
for num in xrange(1, self.pages + 1):
|
for num in range(1, self.pages + 1):
|
||||||
if num <= left_edge or \
|
if num <= left_edge or \
|
||||||
(num > self.page - left_current - 1 and \
|
(num > self.page - left_current - 1 and \
|
||||||
num < self.page + right_current) or \
|
num < self.page + right_current) or \
|
||||||
@ -107,7 +106,7 @@ class Pagination(object):
|
|||||||
|
|
||||||
new_get_params['page'] = page_no
|
new_get_params['page'] = page_no
|
||||||
return "%s?%s" % (
|
return "%s?%s" % (
|
||||||
base_url, urllib.urlencode(new_get_params))
|
base_url, urllib.parse.urlencode(new_get_params))
|
||||||
|
|
||||||
def get_page_url(self, request, page_no):
|
def get_page_url(self, request, page_no):
|
||||||
"""
|
"""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user