launchpad-reviewers team mailing list archive
-
launchpad-reviewers team
-
Mailing list archive
-
Message #00347
[Merge] lp:~rockstar/launchpad/recipe-no-signer into lp:launchpad/devel
Paul Hummer has proposed merging lp:~rockstar/launchpad/recipe-no-signer into lp:launchpad/devel.
Requested reviews:
Launchpad code reviewers (launchpad-reviewers)
Related bugs:
#581920 Shouldn't say "no signer" in uploader field
https://bugs.launchpad.net/bugs/581920
This branch just creates a SourcePackageRelease.uploader that not only knows about how to deal with source package uploads, but source package recipes. I created new unit tests for each uploader case that can happen as well. I also cleaned up some lint as a driveby, but it's still complaining about commas not following whitespace.
--
https://code.launchpad.net/~rockstar/launchpad/recipe-no-signer/+merge/31339
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~rockstar/launchpad/recipe-no-signer into lp:launchpad/devel.
=== modified file 'lib/lp/soyuz/interfaces/sourcepackagerelease.py'
--- lib/lp/soyuz/interfaces/sourcepackagerelease.py 2010-03-20 23:16:42 +0000
+++ lib/lp/soyuz/interfaces/sourcepackagerelease.py 2010-07-29 22:57:50 +0000
@@ -137,6 +137,8 @@
"The `PackageUpload` record corresponding to original upload of "
"this source package release. It's 'None' if it is a source "
"imported by Gina.")
+ uploader = Attribute(
+ "The user who uploaded the package.")
# Really ISourcePackageRecipeBuild -- see _schema_circular_imports.
source_package_recipe_build = Reference(
@@ -183,8 +185,8 @@
:tarball_alias: is a Librarian alias that references to a tarball with
translations.
- :is_published: indicates if the imported files are already published by
- upstream.
+ :is_published: indicates if the imported files are already published
+ by upstream.
:importer: is the person that did the import.
raise DownloadFailed if we are not able to fetch the file from
=== modified file 'lib/lp/soyuz/model/sourcepackagerelease.py'
--- lib/lp/soyuz/model/sourcepackagerelease.py 2010-07-23 11:18:54 +0000
+++ lib/lp/soyuz/model/sourcepackagerelease.py 2010-07-29 22:57:50 +0000
@@ -147,7 +147,6 @@
package_diffs = SQLMultipleJoin(
'PackageDiff', joinColumn='to_source', orderBy="-date_requested")
-
@property
def builds(self):
"""See `ISourcePackageRelease`."""
@@ -521,6 +520,15 @@
return DecoratedResultSet(results, operator.itemgetter(0)).one()
@property
+ def uploader(self):
+ """See `ISourcePackageRelease`"""
+ if self.source_package_recipe_build is not None:
+ return self.source_package_recipe_build.requester
+ if self.dscsigningkey is not None:
+ return self.dscsigningkey.owner
+ return None
+
+ @property
def change_summary(self):
"""See ISourcePackageRelease"""
# this regex is copied from apt-listchanges.py courtesy of MDZ
=== modified file 'lib/lp/soyuz/templates/archive-index.pt'
--- lib/lp/soyuz/templates/archive-index.pt 2010-03-24 16:54:56 +0000
+++ lib/lp/soyuz/templates/archive-index.pt 2010-07-29 22:57:50 +0000
@@ -280,7 +280,7 @@
</tal:newer_version>
</td>
<td tal:define="spr publishing/sourcepackagerelease;
- signer spr/dscsigningkey/owner/fmt:link|string:no signer">
+ signer spr/uploader/fmt:link|string:no signer">
<span tal:replace="structure signer">Joe Bloggs</span>
<tal:date_published
condition="publishing/datepublished">
=== added file 'lib/lp/soyuz/tests/test_sourcepackagerelease.py'
--- lib/lp/soyuz/tests/test_sourcepackagerelease.py 1970-01-01 00:00:00 +0000
+++ lib/lp/soyuz/tests/test_sourcepackagerelease.py 2010-07-29 22:57:50 +0000
@@ -0,0 +1,38 @@
+# Copyright 2010 Canonical Ltd. This software is licensed under the
+# GNU Affero General Public License version 3 (see the file LICENSE).
+
+"""Test SourcePackageRelease."""
+
+__metaclass__ = type
+
+from canonical.testing import LaunchpadFunctionalLayer
+
+from lp.testing import TestCaseWithFactory
+
+
+class TestSourcePackageRelease(TestCaseWithFactory):
+
+ layer = LaunchpadFunctionalLayer
+
+ def test_uploader_no_uploader(self):
+ spr = self.factory.makeSourcePackageRelease()
+ self.assertEqual(
+ None,
+ spr.uploader)
+
+ def test_uploader_dsc_package(self):
+ owner = self.factory.makePerson()
+ key = self.factory.makeGPGKey(owner)
+ spr = self.factory.makeSourcePackageRelease(dscsigningkey=key)
+ self.assertEqual(
+ spr.dscsigningkey.owner,
+ spr.uploader)
+
+ def test_uploader_recipe(self):
+ recipe_build = self.factory.makeSourcePackageRecipeBuild()
+ recipe = recipe_build.recipe
+ spr = self.factory.makeSourcePackageRelease(
+ source_package_recipe_build=recipe_build)
+ self.assertEqual(
+ recipe_build.requester,
+ spr.uploader)
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py 2010-07-29 07:28:56 +0000
+++ lib/lp/testing/factory.py 2010-07-29 22:57:50 +0000
@@ -1051,7 +1051,8 @@
CodeReviewNotificationLevel.NOEMAIL, subscribed_by)
def makeDiff(self, diff_text=DIFF):
- return ProxyFactory(Diff.fromFile(StringIO(diff_text), len(diff_text)))
+ return ProxyFactory(
+ Diff.fromFile(StringIO(diff_text), len(diff_text)))
def makePreviewDiff(self, conflicts=u''):
diff = self.makeDiff()
@@ -2266,7 +2267,8 @@
dsc_standards_version='3.6.2',
dsc_format='1.0', dsc_binaries='foo-bin',
date_uploaded=UTC_NOW,
- source_package_recipe_build=None):
+ source_package_recipe_build=None,
+ dscsigningkey=None):
"""Make a `SourcePackageRelease`."""
if distroseries is None:
if source_package_recipe_build is not None:
@@ -2325,7 +2327,7 @@
changelog_entry=None,
dsc=None,
copyright=self.getUniqueString(),
- dscsigningkey=None,
+ dscsigningkey=dscsigningkey,
dsc_maintainer_rfc822=maintainer_email,
dsc_standards_version=dsc_standards_version,
dsc_format=dsc_format,
@@ -2766,8 +2768,10 @@
unwrapped_types = (
DSCFile, InstanceType, MergeDirective2, Message, datetime, int, str, unicode)
+
def is_security_proxied_or_harmless(obj):
- """Check that the given object is security wrapped or a harmless object."""
+ """Check that the given object is security wrapped or a harmless object.
+ """
if obj is None:
return True
if builtin_isinstance(obj, Proxy):
@@ -2793,6 +2797,7 @@
Whereever you see such a warning: fix it!
"""
+
def __init__(self):
self._factory = BareLaunchpadObjectFactory()