Guruprasad has proposed merging ~lgp171188/launchpad:fix-distribution-cvereport-page-timeout into launchpad:master.
Commit message: Avoid unnecessary queries in the distribution cvereport page Requested reviews: Launchpad code reviewers (launchpad-reviewers) For more details, see: https://code.launchpad.net/~lgp171188/launchpad/+git/launchpad/+merge/430886 -- Your team Launchpad code reviewers is requested to review the proposed merge of ~lgp171188/launchpad:fix-distribution-cvereport-page-timeout into launchpad:master.
diff --git a/lib/lp/bugs/browser/cvereport.py b/lib/lp/bugs/browser/cvereport.py index c2f1b65..fff4f2b 100644 --- a/lib/lp/bugs/browser/cvereport.py +++ b/lib/lp/bugs/browser/cvereport.py @@ -9,12 +9,14 @@ __all__ = [ ] from zope.component import getUtility +from zope.security.proxy import removeSecurityProxy from lp.bugs.browser.buglisting import BugTaskListingItem from lp.bugs.interfaces.bugtask import RESOLVED_BUGTASK_STATUSES, IBugTaskSet from lp.bugs.interfaces.bugtasksearch import BugTaskSearchParams from lp.bugs.interfaces.cve import ICveSet from lp.registry.interfaces.person import IPersonSet +from lp.registry.model.distribution import Distribution from lp.services.helpers import shortlist from lp.services.webapp import LaunchpadView from lp.services.webapp.escaping import structured @@ -65,14 +67,25 @@ class CVEReportView(LaunchpadView): def initialize(self): """See `LaunchpadView`.""" super().initialize() + self.open_cve_bugtasks = [] + self.resolved_cve_bugtasks = [] + + # If we are dealing with a distribution with one or more series, + # there is no need to deal with the open and resolved CVE bugtasks. + # This is because the template only renders links to the CVE report + # page of each available series. + if ( + isinstance(removeSecurityProxy(self.context), Distribution) + and self.context.series + ): + return + search_params = BugTaskSearchParams(self.user, has_cve=True) bugtasks = shortlist( self.context.searchTasks(search_params), longest_expected=600 ) if not bugtasks: - self.open_cve_bugtasks = [] - self.resolved_cve_bugtasks = [] return bugtask_set = getUtility(IBugTaskSet) diff --git a/lib/lp/bugs/browser/tests/test_cvereport.py b/lib/lp/bugs/browser/tests/test_cvereport.py index cf09cf1..6cd68e9 100644 --- a/lib/lp/bugs/browser/tests/test_cvereport.py +++ b/lib/lp/bugs/browser/tests/test_cvereport.py @@ -7,6 +7,8 @@ import re from functools import partial from operator import attrgetter +from soupmatchers import HTMLContains, Tag + from lp.bugs.browser.cvereport import BugTaskCve from lp.bugs.interfaces.bugtask import ( RESOLVED_BUGTASK_STATUSES, @@ -78,6 +80,44 @@ class TestCVEReportView(TestCaseWithFactory): yield cves[cve_index] cve_index = (cve_index + 1) % NUM_CVES + def test_distribution_cvereport(self): + distribution = self.factory.makeDistribution() + distroseries1 = self.factory.makeDistroSeries( + distribution=distribution + ) + distroseries2 = self.factory.makeDistroSeries( + distribution=distribution + ) + view = create_initialized_view(distribution, "+cve") + + self.assertFalse(view.open_cve_bugtasks) + self.assertFalse(view.resolved_cve_bugtasks) + self.assertThat( + view.render(), + HTMLContains( + Tag( + "distroseries 1 link", + "a", + attrs={ + "href": "{}/+cve".format( + canonical_url(distroseries1, force_local_path=True) + ) + }, + text=distroseries1.displayname, + ), + Tag( + "distroseries 2 link", + "a", + attrs={ + "href": "{}/+cve".format( + canonical_url(distroseries2, force_local_path=True) + ) + }, + text=distroseries2.displayname, + ), + ), + ) + def test_render(self): # The rendered page contains all expected CVE links. html_data = self.view.render()
_______________________________________________ Mailing list: https://launchpad.net/~launchpad-reviewers Post to : launchpad-reviewers@lists.launchpad.net Unsubscribe : https://launchpad.net/~launchpad-reviewers More help : https://help.launchpad.net/ListHelp