mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Refs #33476 -- Reformatted code with Black.
This commit is contained in:
committed by
Mariusz Felisiak
parent
f68fa8b45d
commit
9c19aff7c7
@@ -4,7 +4,10 @@ import warnings
|
||||
from datetime import datetime
|
||||
|
||||
from django.core.paginator import (
|
||||
EmptyPage, InvalidPage, PageNotAnInteger, Paginator,
|
||||
EmptyPage,
|
||||
InvalidPage,
|
||||
PageNotAnInteger,
|
||||
Paginator,
|
||||
UnorderedObjectListWarning,
|
||||
)
|
||||
from django.test import SimpleTestCase, TestCase
|
||||
@@ -25,9 +28,9 @@ class PaginationTests(SimpleTestCase):
|
||||
"""
|
||||
count, num_pages, page_range = output
|
||||
paginator = Paginator(*params)
|
||||
self.check_attribute('count', paginator, count, params)
|
||||
self.check_attribute('num_pages', paginator, num_pages, params)
|
||||
self.check_attribute('page_range', paginator, page_range, params, coerce=list)
|
||||
self.check_attribute("count", paginator, count, params)
|
||||
self.check_attribute("num_pages", paginator, num_pages, params)
|
||||
self.check_attribute("page_range", paginator, page_range, params, coerce=list)
|
||||
|
||||
def check_attribute(self, name, paginator, expected, params, coerce=None):
|
||||
"""
|
||||
@@ -38,9 +41,10 @@ class PaginationTests(SimpleTestCase):
|
||||
if coerce is not None:
|
||||
got = coerce(got)
|
||||
self.assertEqual(
|
||||
expected, got,
|
||||
expected,
|
||||
got,
|
||||
"For '%s', expected %s but got %s. Paginator parameters were: %s"
|
||||
% (name, expected, got, params)
|
||||
% (name, expected, got, params),
|
||||
)
|
||||
|
||||
def test_paginator(self):
|
||||
@@ -102,10 +106,10 @@ class PaginationTests(SimpleTestCase):
|
||||
(([1, 2, 3], 2, 1, True), (3, 1, [1])),
|
||||
((eleven, 10, 1, True), (11, 1, [1])),
|
||||
# Non-integer inputs
|
||||
((ten, '4', 1, False), (10, 3, [1, 2, 3])),
|
||||
((ten, '4', 1, False), (10, 3, [1, 2, 3])),
|
||||
((ten, 4, '1', False), (10, 3, [1, 2, 3])),
|
||||
((ten, 4, '1', False), (10, 3, [1, 2, 3])),
|
||||
((ten, "4", 1, False), (10, 3, [1, 2, 3])),
|
||||
((ten, "4", 1, False), (10, 3, [1, 2, 3])),
|
||||
((ten, 4, "1", False), (10, 3, [1, 2, 3])),
|
||||
((ten, 4, "1", False), (10, 3, [1, 2, 3])),
|
||||
)
|
||||
for params, output in tests:
|
||||
self.check_paginator(params, output)
|
||||
@@ -120,7 +124,7 @@ class PaginationTests(SimpleTestCase):
|
||||
with self.assertRaises(PageNotAnInteger):
|
||||
paginator.validate_number(None)
|
||||
with self.assertRaises(PageNotAnInteger):
|
||||
paginator.validate_number('x')
|
||||
paginator.validate_number("x")
|
||||
with self.assertRaises(PageNotAnInteger):
|
||||
paginator.validate_number(1.2)
|
||||
|
||||
@@ -137,6 +141,7 @@ class PaginationTests(SimpleTestCase):
|
||||
class CountContainer:
|
||||
def count(self):
|
||||
return 42
|
||||
|
||||
# Paginator can be passed other objects with a count() method.
|
||||
paginator = Paginator(CountContainer(), 10)
|
||||
self.assertEqual(42, paginator.count)
|
||||
@@ -147,6 +152,7 @@ class PaginationTests(SimpleTestCase):
|
||||
class LenContainer:
|
||||
def __len__(self):
|
||||
return 42
|
||||
|
||||
paginator = Paginator(LenContainer(), 10)
|
||||
self.assertEqual(42, paginator.count)
|
||||
self.assertEqual(5, paginator.num_pages)
|
||||
@@ -155,17 +161,17 @@ class PaginationTests(SimpleTestCase):
|
||||
def test_count_does_not_silence_attribute_error(self):
|
||||
class AttributeErrorContainer:
|
||||
def count(self):
|
||||
raise AttributeError('abc')
|
||||
raise AttributeError("abc")
|
||||
|
||||
with self.assertRaisesMessage(AttributeError, 'abc'):
|
||||
with self.assertRaisesMessage(AttributeError, "abc"):
|
||||
Paginator(AttributeErrorContainer(), 10).count
|
||||
|
||||
def test_count_does_not_silence_type_error(self):
|
||||
class TypeErrorContainer:
|
||||
def count(self):
|
||||
raise TypeError('abc')
|
||||
raise TypeError("abc")
|
||||
|
||||
with self.assertRaisesMessage(TypeError, 'abc'):
|
||||
with self.assertRaisesMessage(TypeError, "abc"):
|
||||
Paginator(TypeErrorContainer(), 10).count
|
||||
|
||||
def check_indexes(self, params, page_num, indexes):
|
||||
@@ -175,15 +181,23 @@ class PaginationTests(SimpleTestCase):
|
||||
page_num match those given as a 2-tuple in indexes.
|
||||
"""
|
||||
paginator = Paginator(*params)
|
||||
if page_num == 'first':
|
||||
if page_num == "first":
|
||||
page_num = 1
|
||||
elif page_num == 'last':
|
||||
elif page_num == "last":
|
||||
page_num = paginator.num_pages
|
||||
page = paginator.page(page_num)
|
||||
start, end = indexes
|
||||
msg = ("For %s of page %s, expected %s but got %s. Paginator parameters were: %s")
|
||||
self.assertEqual(start, page.start_index(), msg % ('start index', page_num, start, page.start_index(), params))
|
||||
self.assertEqual(end, page.end_index(), msg % ('end index', page_num, end, page.end_index(), params))
|
||||
msg = "For %s of page %s, expected %s but got %s. Paginator parameters were: %s"
|
||||
self.assertEqual(
|
||||
start,
|
||||
page.start_index(),
|
||||
msg % ("start index", page_num, start, page.start_index(), params),
|
||||
)
|
||||
self.assertEqual(
|
||||
end,
|
||||
page.end_index(),
|
||||
msg % ("end index", page_num, end, page.end_index(), params),
|
||||
)
|
||||
|
||||
def test_page_indexes(self):
|
||||
"""
|
||||
@@ -224,8 +238,8 @@ class PaginationTests(SimpleTestCase):
|
||||
(([], 4, 2, True), (0, 0), (0, 0)),
|
||||
)
|
||||
for params, first, last in tests:
|
||||
self.check_indexes(params, 'first', first)
|
||||
self.check_indexes(params, 'last', last)
|
||||
self.check_indexes(params, "first", first)
|
||||
self.check_indexes(params, "last", last)
|
||||
|
||||
# When no items and no empty first page, we should get EmptyPage error.
|
||||
with self.assertRaises(EmptyPage):
|
||||
@@ -239,20 +253,20 @@ class PaginationTests(SimpleTestCase):
|
||||
"""
|
||||
A paginator page acts like a standard sequence.
|
||||
"""
|
||||
eleven = 'abcdefghijk'
|
||||
eleven = "abcdefghijk"
|
||||
page2 = Paginator(eleven, per_page=5, orphans=1).page(2)
|
||||
self.assertEqual(len(page2), 6)
|
||||
self.assertIn('k', page2)
|
||||
self.assertNotIn('a', page2)
|
||||
self.assertEqual(''.join(page2), 'fghijk')
|
||||
self.assertEqual(''.join(reversed(page2)), 'kjihgf')
|
||||
self.assertIn("k", page2)
|
||||
self.assertNotIn("a", page2)
|
||||
self.assertEqual("".join(page2), "fghijk")
|
||||
self.assertEqual("".join(reversed(page2)), "kjihgf")
|
||||
|
||||
def test_get_page_hook(self):
|
||||
"""
|
||||
A Paginator subclass can use the ``_get_page`` hook to
|
||||
return an alternative to the standard Page class.
|
||||
"""
|
||||
eleven = 'abcdefghijk'
|
||||
eleven = "abcdefghijk"
|
||||
paginator = ValidAdjacentNumsPaginator(eleven, per_page=6)
|
||||
page1 = paginator.page(1)
|
||||
page2 = paginator.page(2)
|
||||
@@ -309,7 +323,7 @@ class PaginationTests(SimpleTestCase):
|
||||
def test_get_elided_page_range(self):
|
||||
# Paginator.validate_number() must be called:
|
||||
paginator = Paginator([1, 2, 3], 2)
|
||||
with unittest.mock.patch.object(paginator, 'validate_number') as mock:
|
||||
with unittest.mock.patch.object(paginator, "validate_number") as mock:
|
||||
mock.assert_not_called()
|
||||
list(paginator.get_elided_page_range(2))
|
||||
mock.assert_called_with(2)
|
||||
@@ -347,15 +361,25 @@ class PaginationTests(SimpleTestCase):
|
||||
|
||||
# Range is not elided if not enough pages when using custom arguments:
|
||||
tests = [
|
||||
(6, 2, 1, 1), (8, 1, 3, 1), (8, 4, 0, 1), (4, 1, 1, 1),
|
||||
(6, 2, 1, 1),
|
||||
(8, 1, 3, 1),
|
||||
(8, 4, 0, 1),
|
||||
(4, 1, 1, 1),
|
||||
# When on_each_side and on_ends are both <= 1 but not both == 1 it
|
||||
# is a special case where the range is not elided until an extra
|
||||
# page is added.
|
||||
(2, 0, 1, 2), (2, 1, 0, 2), (1, 0, 0, 2),
|
||||
(2, 0, 1, 2),
|
||||
(2, 1, 0, 2),
|
||||
(1, 0, 0, 2),
|
||||
]
|
||||
for pages, on_each_side, on_ends, elided_after in tests:
|
||||
for offset in range(elided_after + 1):
|
||||
with self.subTest(pages=pages, offset=elided_after, on_each_side=on_each_side, on_ends=on_ends):
|
||||
with self.subTest(
|
||||
pages=pages,
|
||||
offset=elided_after,
|
||||
on_each_side=on_each_side,
|
||||
on_ends=on_ends,
|
||||
):
|
||||
paginator = Paginator(range((pages + offset) * 100), 100)
|
||||
page_range = paginator.get_elided_page_range(
|
||||
1,
|
||||
@@ -416,7 +440,9 @@ class PaginationTests(SimpleTestCase):
|
||||
]
|
||||
paginator = Paginator(range(5000), 100)
|
||||
for number, on_each_side, on_ends, expected in tests:
|
||||
with self.subTest(number=number, on_each_side=on_each_side, on_ends=on_ends):
|
||||
with self.subTest(
|
||||
number=number, on_each_side=on_each_side, on_ends=on_ends
|
||||
):
|
||||
page_range = paginator.get_elided_page_range(
|
||||
number,
|
||||
on_each_side=on_each_side,
|
||||
@@ -430,17 +456,18 @@ class ModelPaginationTests(TestCase):
|
||||
"""
|
||||
Test pagination with Django model instances
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
# Prepare a list of objects for pagination.
|
||||
pub_date = datetime(2005, 7, 29)
|
||||
cls.articles = [
|
||||
Article.objects.create(headline=f'Article {x}', pub_date=pub_date)
|
||||
Article.objects.create(headline=f"Article {x}", pub_date=pub_date)
|
||||
for x in range(1, 10)
|
||||
]
|
||||
|
||||
def test_first_page(self):
|
||||
paginator = Paginator(Article.objects.order_by('id'), 5)
|
||||
paginator = Paginator(Article.objects.order_by("id"), 5)
|
||||
p = paginator.page(1)
|
||||
self.assertEqual("<Page 1 of 2>", str(p))
|
||||
self.assertSequenceEqual(p.object_list, self.articles[:5])
|
||||
@@ -454,7 +481,7 @@ class ModelPaginationTests(TestCase):
|
||||
self.assertEqual(5, p.end_index())
|
||||
|
||||
def test_last_page(self):
|
||||
paginator = Paginator(Article.objects.order_by('id'), 5)
|
||||
paginator = Paginator(Article.objects.order_by("id"), 5)
|
||||
p = paginator.page(2)
|
||||
self.assertEqual("<Page 2 of 2>", str(p))
|
||||
self.assertSequenceEqual(p.object_list, self.articles[5:])
|
||||
@@ -472,15 +499,15 @@ class ModelPaginationTests(TestCase):
|
||||
Tests proper behavior of a paginator page __getitem__ (queryset
|
||||
evaluation, slicing, exception raised).
|
||||
"""
|
||||
paginator = Paginator(Article.objects.order_by('id'), 5)
|
||||
paginator = Paginator(Article.objects.order_by("id"), 5)
|
||||
p = paginator.page(1)
|
||||
|
||||
# Make sure object_list queryset is not evaluated by an invalid __getitem__ call.
|
||||
# (this happens from the template engine when using eg: {% page_obj.has_previous %})
|
||||
self.assertIsNone(p.object_list._result_cache)
|
||||
msg = 'Page indices must be integers or slices, not str.'
|
||||
msg = "Page indices must be integers or slices, not str."
|
||||
with self.assertRaisesMessage(TypeError, msg):
|
||||
p['has_previous']
|
||||
p["has_previous"]
|
||||
self.assertIsNone(p.object_list._result_cache)
|
||||
self.assertNotIsInstance(p.object_list, list)
|
||||
|
||||
@@ -511,8 +538,10 @@ class ModelPaginationTests(TestCase):
|
||||
Unordered object list warning with an object that has an ordered
|
||||
attribute but not a model attribute.
|
||||
"""
|
||||
|
||||
class ObjectList:
|
||||
ordered = False
|
||||
|
||||
object_list = ObjectList()
|
||||
msg = (
|
||||
"Pagination may yield inconsistent results with an unordered "
|
||||
|
||||
Reference in New Issue
Block a user