Merge ~lgp171188/launchpad:fix-distribution-cvereport-page-timeout into launchpad:master

Proposed by Guruprasad
Status: Merged
Approved by: Guruprasad
Approved revision: b194bd377cbd6933c10a765a15d64186837b11ee
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~lgp171188/launchpad:fix-distribution-cvereport-page-timeout
Merge into: launchpad:master
Diff against target: 95 lines (+51/-2)
2 files modified
lib/lp/bugs/browser/cvereport.py (+11/-2)
lib/lp/bugs/browser/tests/test_cvereport.py (+40/-0)
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+430886@code.launchpad.net

Commit message

Avoid unnecessary queries in the distribution cvereport page

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

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/bugs/browser/cvereport.py b/lib/lp/bugs/browser/cvereport.py
2index c2f1b65..393cd91 100644
3--- a/lib/lp/bugs/browser/cvereport.py
4+++ b/lib/lp/bugs/browser/cvereport.py
5@@ -14,6 +14,7 @@ from lp.bugs.browser.buglisting import BugTaskListingItem
6 from lp.bugs.interfaces.bugtask import RESOLVED_BUGTASK_STATUSES, IBugTaskSet
7 from lp.bugs.interfaces.bugtasksearch import BugTaskSearchParams
8 from lp.bugs.interfaces.cve import ICveSet
9+from lp.registry.interfaces.distribution import IDistribution
10 from lp.registry.interfaces.person import IPersonSet
11 from lp.services.helpers import shortlist
12 from lp.services.webapp import LaunchpadView
13@@ -65,14 +66,22 @@ class CVEReportView(LaunchpadView):
14 def initialize(self):
15 """See `LaunchpadView`."""
16 super().initialize()
17+ self.open_cve_bugtasks = []
18+ self.resolved_cve_bugtasks = []
19+
20+ # If we are dealing with a distribution with one or more series,
21+ # there is no need to deal with the open and resolved CVE bugtasks.
22+ # This is because the template only renders links to the CVE report
23+ # page of each available series.
24+ if IDistribution.providedBy(self.context) and self.context.series:
25+ return
26+
27 search_params = BugTaskSearchParams(self.user, has_cve=True)
28 bugtasks = shortlist(
29 self.context.searchTasks(search_params), longest_expected=600
30 )
31
32 if not bugtasks:
33- self.open_cve_bugtasks = []
34- self.resolved_cve_bugtasks = []
35 return
36
37 bugtask_set = getUtility(IBugTaskSet)
38diff --git a/lib/lp/bugs/browser/tests/test_cvereport.py b/lib/lp/bugs/browser/tests/test_cvereport.py
39index cf09cf1..6cd68e9 100644
40--- a/lib/lp/bugs/browser/tests/test_cvereport.py
41+++ b/lib/lp/bugs/browser/tests/test_cvereport.py
42@@ -7,6 +7,8 @@ import re
43 from functools import partial
44 from operator import attrgetter
45
46+from soupmatchers import HTMLContains, Tag
47+
48 from lp.bugs.browser.cvereport import BugTaskCve
49 from lp.bugs.interfaces.bugtask import (
50 RESOLVED_BUGTASK_STATUSES,
51@@ -78,6 +80,44 @@ class TestCVEReportView(TestCaseWithFactory):
52 yield cves[cve_index]
53 cve_index = (cve_index + 1) % NUM_CVES
54
55+ def test_distribution_cvereport(self):
56+ distribution = self.factory.makeDistribution()
57+ distroseries1 = self.factory.makeDistroSeries(
58+ distribution=distribution
59+ )
60+ distroseries2 = self.factory.makeDistroSeries(
61+ distribution=distribution
62+ )
63+ view = create_initialized_view(distribution, "+cve")
64+
65+ self.assertFalse(view.open_cve_bugtasks)
66+ self.assertFalse(view.resolved_cve_bugtasks)
67+ self.assertThat(
68+ view.render(),
69+ HTMLContains(
70+ Tag(
71+ "distroseries 1 link",
72+ "a",
73+ attrs={
74+ "href": "{}/+cve".format(
75+ canonical_url(distroseries1, force_local_path=True)
76+ )
77+ },
78+ text=distroseries1.displayname,
79+ ),
80+ Tag(
81+ "distroseries 2 link",
82+ "a",
83+ attrs={
84+ "href": "{}/+cve".format(
85+ canonical_url(distroseries2, force_local_path=True)
86+ )
87+ },
88+ text=distroseries2.displayname,
89+ ),
90+ ),
91+ )
92+
93 def test_render(self):
94 # The rendered page contains all expected CVE links.
95 html_data = self.view.render()

Subscribers

People subscribed via source and target branches

to status/vote changes: