Merge lp:~wgrant/launchpad/related-projects-batching into lp:launchpad

Proposed by William Grant
Status: Merged
Merged at revision: 18341
Proposed branch: lp:~wgrant/launchpad/related-projects-batching
Merge into: lp:launchpad
Diff against target: 97 lines (+36/-22)
2 files modified
lib/lp/registry/browser/person.py (+19/-17)
lib/lp/registry/browser/tests/test_person.py (+17/-5)
To merge this branch: bzr merge lp:~wgrant/launchpad/related-projects-batching
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+316662@code.launchpad.net

Commit message

Don't limit Person:+related-projects to a single batch.

Description of the change

Don't limit Person:+related-projects to a single batch.

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/registry/browser/person.py'
2--- lib/lp/registry/browser/person.py 2016-12-22 16:32:38 +0000
3+++ lib/lp/registry/browser/person.py 2017-02-08 02:45:49 +0000
4@@ -190,6 +190,7 @@
5 from lp.registry.mail.notification import send_direct_contact_email
6 from lp.registry.model.person import get_recipients
7 from lp.services.config import config
8+from lp.services.database.decoratedresultset import DecoratedResultSet
9 from lp.services.database.sqlbase import flush_database_updates
10 from lp.services.feeds.browser import FeedsMixin
11 from lp.services.geoip.interfaces import IRequestPreferredLanguages
12@@ -3348,23 +3349,24 @@
13 A project dict has the following keys: title, url, is_owner,
14 is_driver, is_bugsupervisor.
15 """
16- projects = []
17- max_projects = self.max_results_to_display
18- pillarnames = self._related_projects[:max_projects]
19- for pillarname in pillarnames:
20- pillar = pillarname.pillar
21- project = {}
22- project['title'] = pillar.title
23- project['url'] = canonical_url(pillar)
24- person = self.context
25- project['is_owner'] = person.inTeam(pillar.owner)
26- project['is_driver'] = person.inTeam(pillar.driver)
27- project['is_bug_supervisor'] = False
28- if IHasBugSupervisor.providedBy(pillar):
29- project['is_bug_supervisor'] = (
30- person.inTeam(pillar.bug_supervisor))
31- projects.append(project)
32- return projects
33+ def decorate(pillarnames):
34+ projects = []
35+ for pillarname in pillarnames:
36+ pillar = pillarname.pillar
37+ project = {}
38+ project['title'] = pillar.title
39+ project['url'] = canonical_url(pillar)
40+ person = self.context
41+ project['is_owner'] = person.inTeam(pillar.owner)
42+ project['is_driver'] = person.inTeam(pillar.driver)
43+ project['is_bug_supervisor'] = False
44+ if IHasBugSupervisor.providedBy(pillar):
45+ project['is_bug_supervisor'] = (
46+ person.inTeam(pillar.bug_supervisor))
47+ projects.append(project)
48+ return projects
49+ return DecoratedResultSet(
50+ self._related_projects, bulk_decorator=decorate)
51
52 @cachedproperty
53 def first_five_related_projects(self):
54
55=== modified file 'lib/lp/registry/browser/tests/test_person.py'
56--- lib/lp/registry/browser/tests/test_person.py 2016-12-22 16:32:38 +0000
57+++ lib/lp/registry/browser/tests/test_person.py 2017-02-08 02:45:49 +0000
58@@ -5,6 +5,7 @@
59
60 import doctest
61 import email
62+import re
63 from textwrap import dedent
64
65 import soupmatchers
66@@ -1189,15 +1190,26 @@
67 def setUp(self):
68 super(TestPersonRelatedProjectsView, self).setUp()
69 self.user = self.factory.makePerson()
70- self.view = create_initialized_view(self.user, '+related-projects')
71
72 def test_view_helper_attributes(self):
73 # Verify view helper attributes.
74- self.assertEqual('Related projects', self.view.page_title)
75- self.assertEqual('default_batch_size', self.view._max_results_key)
76+ view = create_initialized_view(self.user, '+related-projects')
77+ self.assertEqual('Related projects', view.page_title)
78+ self.assertEqual('default_batch_size', view._max_results_key)
79 self.assertEqual(
80- config.launchpad.default_batch_size,
81- self.view.max_results_to_display)
82+ config.launchpad.default_batch_size, view.max_results_to_display)
83+
84+ def test_batching(self):
85+ for i in range(10):
86+ self.factory.makeProduct(owner=self.user)
87+ view = create_initialized_view(self.user, '+related-projects')
88+ next_match = soupmatchers.HTMLContains(
89+ soupmatchers.Tag(
90+ 'Next link', 'a',
91+ attrs={'href': re.compile(re.escape(
92+ '?batch=5&memo=5&start=5'))},
93+ text='Next'))
94+ self.assertThat(view(), next_match)
95
96
97 class TestPersonRelatedPackagesFailedBuild(TestCaseWithFactory):