launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #03368
[Merge] lp:~rvb/launchpad/fix-already-computed-pckdiff-request into lp:launchpad
Raphaël Victor Badin has proposed merging lp:~rvb/launchpad/fix-already-computed-pckdiff-request into lp:launchpad.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Related bugs:
Bug #765709 in Launchpad itself: "The exception called when a package diff is requested twice should be a BadRequest when called through the api."
https://bugs.launchpad.net/launchpad/+bug/765709
For more details, see:
https://code.launchpad.net/~rvb/launchpad/fix-already-computed-pckdiff-request/+merge/58257
The error triggered when a package diff has already been requested (PackageDiffAlreadyRequested) must be marked as a BadRequest exception to be able to be properly handled by the calling js when the request comes from the api.
= Test =
./bin/test -cvv test_distroseriesdifference_webservice test_requestPackageDiffs_exception_already_requested
= QA =
On https://dogfood.launchpad.net/ubuntu/natty/+localpackagediffs
Try requesting the package diffs for 'adun.app', the error message should say "diff from **** to *** was already requested by ***" instead of the standard error message.
--
https://code.launchpad.net/~rvb/launchpad/fix-already-computed-pckdiff-request/+merge/58257
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~rvb/launchpad/fix-already-computed-pckdiff-request into lp:launchpad.
=== modified file 'lib/lp/registry/browser/tests/test_distroseriesdifference_webservice.py'
--- lib/lp/registry/browser/tests/test_distroseriesdifference_webservice.py 2011-04-14 15:26:55 +0000
+++ lib/lp/registry/browser/tests/test_distroseriesdifference_webservice.py 2011-04-19 09:54:33 +0000
@@ -15,6 +15,7 @@
IDistroSeriesDifferenceSource,
)
from lp.soyuz.enums import PackageDiffStatus
+from lp.soyuz.interfaces.packagediff import PackageDiffAlreadyRequested
from lp.testing import (
TestCaseWithFactory,
ws_object,
@@ -124,6 +125,26 @@
self.assertRaises(
BadRequest, ws_diff.requestPackageDiffs)
+ def test_requestPackageDiffs_exception_already_requested(self):
+ # when the package diffs have already been requested, a call to
+ # request them again triggers a PackageDiffAlreadyRequested
+ # exception is raised. If called through the api, a BadRequest
+ # exception is raised.
+ ds_diff = self.factory.makeDistroSeriesDifference(versions={
+ 'derived': '1.2',
+ 'parent': '1.3',
+ 'base': '1.2'},
+ set_base_version=True)
+ ws_diff = ws_object(self.factory.makeLaunchpadService(
+ self.factory.makePerson()), ds_diff)
+ ws_diff.requestPackageDiffs()
+ transaction.commit()
+
+ self.assertRaises(
+ PackageDiffAlreadyRequested,
+ ds_diff.requestPackageDiffs, self.factory.makePerson())
+ self.assertRaises(BadRequest, ws_diff.requestPackageDiffs)
+
def test_package_diffs(self):
# The package diff urls exposed.
ds_diff = self.factory.makeDistroSeriesDifference()
=== modified file 'lib/lp/soyuz/interfaces/packagediff.py'
--- lib/lp/soyuz/interfaces/packagediff.py 2011-04-19 02:36:03 +0000
+++ lib/lp/soyuz/interfaces/packagediff.py 2011-04-19 09:54:33 +0000
@@ -13,6 +13,9 @@
'PackageDiffAlreadyRequested',
]
+import httplib
+
+from lazr.restful.declarations import webservice_error
from zope.interface import (
Attribute,
Interface,
@@ -25,11 +28,15 @@
from canonical.launchpad import _
from canonical.launchpad.interfaces.librarian import ILibraryFileAlias
-
from lp.soyuz.enums import PackageDiffStatus
-class PackageDiffAlreadyRequested(Exception):
+class PackageDiffRequestException(Exception):
+ """Base class for package diff request errors."""
+ webservice_error(httplib.BAD_REQUEST)
+
+
+class PackageDiffAlreadyRequested(PackageDiffRequestException):
"""Raised on attempts to request an already recorded diff request. """
Follow ups