Merge lp:~wgrant/launchpad/gpgkey-fks-read into lp:launchpad

Proposed by William Grant
Status: Merged
Merged at revision: 17941
Proposed branch: lp:~wgrant/launchpad/gpgkey-fks-read
Merge into: lp:launchpad
Prerequisite: lp:~wgrant/launchpad/gpgkey-fks-no-garbo
Diff against target: 794 lines (+176/-73)
28 files modified
lib/lp/archivepublisher/archivesigningkey.py (+7/-4)
lib/lp/archivepublisher/tests/archive-signing.txt (+18/-7)
lib/lp/archivepublisher/tests/test_publishdistro.py (+3/-1)
lib/lp/archiveuploader/tests/upload-karma.txt (+4/-1)
lib/lp/registry/browser/tests/test_codeofconduct.py (+2/-1)
lib/lp/registry/browser/tests/test_distroseries.py (+17/-6)
lib/lp/registry/interfaces/gpg.py (+3/-0)
lib/lp/registry/model/codeofconduct.py (+9/-2)
lib/lp/registry/model/distroseries.py (+2/-2)
lib/lp/registry/model/distroseriesdifference.py (+2/-6)
lib/lp/registry/model/gpgkey.py (+6/-0)
lib/lp/soyuz/configure.zcml (+3/-3)
lib/lp/soyuz/doc/distroseriesqueue-notify.txt (+3/-1)
lib/lp/soyuz/doc/publishing.txt (+7/-2)
lib/lp/soyuz/interfaces/sourcepackagerelease.py (+0/-1)
lib/lp/soyuz/model/archive.py (+22/-18)
lib/lp/soyuz/model/queue.py (+8/-1)
lib/lp/soyuz/model/sourcepackagerelease.py (+14/-3)
lib/lp/soyuz/scripts/gina/handlers.py (+1/-1)
lib/lp/soyuz/scripts/tests/test_ppakeygenerator.py (+6/-2)
lib/lp/soyuz/stories/ppa/xx-private-ppa-subscriptions.txt (+3/-1)
lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.txt (+3/-1)
lib/lp/soyuz/stories/webservice/xx-archive.txt (+4/-1)
lib/lp/soyuz/stories/webservice/xx-builds.txt (+4/-1)
lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt (+5/-2)
lib/lp/soyuz/tests/test_archive.py (+9/-2)
lib/lp/soyuz/tests/test_build_notify.py (+9/-2)
utilities/soyuz-sampledata-setup.py (+2/-1)
To merge this branch: bzr merge lp:~wgrant/launchpad/gpgkey-fks-read
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+287804@code.launchpad.net

Commit message

Read GPGKey fingerprint columns rather than the integer FK.

Description of the change

Read GPGKey fingerprint columns rather than the integer FK.

Still setting the old columns until everything reads from the new.

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
=== modified file 'lib/lp/archivepublisher/archivesigningkey.py'
--- lib/lp/archivepublisher/archivesigningkey.py 2016-02-22 23:52:21 +0000
+++ lib/lp/archivepublisher/archivesigningkey.py 2016-03-10 01:29:20 +0000
@@ -27,6 +27,7 @@
27 GPGKeyAlgorithm,27 GPGKeyAlgorithm,
28 IGPGHandler,28 IGPGHandler,
29 )29 )
30from lp.services.propertycache import get_property_cache
3031
3132
32@implementer(IArchiveSigningKey)33@implementer(IArchiveSigningKey)
@@ -71,9 +72,10 @@
71 if default_ppa.signing_key is None:72 if default_ppa.signing_key is None:
72 IArchiveSigningKey(default_ppa).generateSigningKey()73 IArchiveSigningKey(default_ppa).generateSigningKey()
73 key = default_ppa.signing_key74 key = default_ppa.signing_key
74 self.archive.signing_key = key75 self.archive._signing_key = key
75 self.archive.signing_key_owner = key.owner76 self.archive.signing_key_owner = key.owner
76 self.archive._signing_key_fingerprint = key.fingerprint77 self.archive.signing_key_fingerprint = key.fingerprint
78 del get_property_cache(self.archive).signing_key
77 return79 return
7880
79 key_displayname = (81 key_displayname = (
@@ -111,9 +113,10 @@
111 key = getUtility(IGPGKeySet).new(113 key = getUtility(IGPGKeySet).new(
112 key_owner, pub_key.keyid, pub_key.fingerprint, pub_key.keysize,114 key_owner, pub_key.keyid, pub_key.fingerprint, pub_key.keysize,
113 algorithm, active=True, can_encrypt=pub_key.can_encrypt)115 algorithm, active=True, can_encrypt=pub_key.can_encrypt)
114 self.archive.signing_key = key116 self.archive._signing_key = key
115 self.archive.signing_key_owner = key.owner117 self.archive.signing_key_owner = key.owner
116 self.archive._signing_key_fingerprint = key.fingerprint118 self.archive.signing_key_fingerprint = key.fingerprint
119 del get_property_cache(self.archive).signing_key
117120
118 def signRepository(self, suite):121 def signRepository(self, suite):
119 """See `IArchiveSigningKey`."""122 """See `IArchiveSigningKey`."""
120123
=== modified file 'lib/lp/archivepublisher/tests/archive-signing.txt'
--- lib/lp/archivepublisher/tests/archive-signing.txt 2015-10-01 10:25:19 +0000
+++ lib/lp/archivepublisher/tests/archive-signing.txt 2016-03-10 01:29:20 +0000
@@ -104,8 +104,8 @@
104104
105And use it as the Mark's PPA signing key.105And use it as the Mark's PPA signing key.
106106
107 >>> mark.archive.signing_key = a_key107 >>> mark.archive.signing_key_owner = a_key.owner
108108 >>> mark.archive.signing_key_fingerprint = a_key.fingerprint
109 >>> print mark.archive.signing_key_fingerprint109 >>> print mark.archive.signing_key_fingerprint
110 ABCDEF0123456789ABCDDCBA0000111112345678110 ABCDEF0123456789ABCDDCBA0000111112345678
111111
@@ -286,8 +286,11 @@
286simulating the situation when a the default PPA and a named-ppas get286simulating the situation when a the default PPA and a named-ppas get
287created within the same cycle of the key-generator process.287created within the same cycle of the key-generator process.
288288
289 >>> from lp.services.propertycache import get_property_cache
289 >>> login('foo.bar@canonical.com')290 >>> login('foo.bar@canonical.com')
290 >>> named_ppa.signing_key = None291 >>> named_ppa.signing_key_owner = None
292 >>> named_ppa.signing_key_fingerprint = None
293 >>> del get_property_cache(named_ppa).signing_key
291 >>> login(ANONYMOUS)294 >>> login(ANONYMOUS)
292295
293 >>> print named_ppa.signing_key296 >>> print named_ppa.signing_key
@@ -312,8 +315,12 @@
312We will reset the signing-keys for both PPA of Celso.315We will reset the signing-keys for both PPA of Celso.
313316
314 >>> login('foo.bar@canonical.com')317 >>> login('foo.bar@canonical.com')
315 >>> cprov.archive.signing_key = None318 >>> cprov.archive.signing_key_owner = None
316 >>> named_ppa.signing_key = None319 >>> cprov.archive.signing_key_fingerprint = None
320 >>> del get_property_cache(cprov.archive).signing_key
321 >>> named_ppa.signing_key_owner = None
322 >>> named_ppa.signing_key_fingerprint = None
323 >>> del get_property_cache(named_ppa).signing_key
317 >>> login(ANONYMOUS)324 >>> login(ANONYMOUS)
318325
319 >>> print cprov.archive.signing_key326 >>> print cprov.archive.signing_key
@@ -365,7 +372,9 @@
365Celso's default PPA will uses the testing signing key.372Celso's default PPA will uses the testing signing key.
366373
367 >>> login('foo.bar@canonical.com')374 >>> login('foo.bar@canonical.com')
368 >>> cprov.archive.signing_key = signing_key375 >>> cprov.archive.signing_key_owner = signing_key.owner
376 >>> cprov.archive.signing_key_fingerprint = signing_key.fingerprint
377 >>> del get_property_cache(cprov.archive).signing_key
369 >>> login(ANONYMOUS)378 >>> login(ANONYMOUS)
370379
371When signing repositores we assert they contain the right format and380When signing repositores we assert they contain the right format and
@@ -437,7 +446,9 @@
437Finally, if we try to sign a repository for which the archive doesn't446Finally, if we try to sign a repository for which the archive doesn't
438have a 'signing_key' set, it raises an error.447have a 'signing_key' set, it raises an error.
439448
440 >>> cprov.archive.signing_key = None449 >>> cprov.archive.signing_key_owner = None
450 >>> cprov.archive.signing_key_fingerprint = None
451 >>> del get_property_cache(cprov.archive).signing_key
441452
442 >>> archive_signing_key.signRepository(test_suite)453 >>> archive_signing_key.signRepository(test_suite)
443 Traceback (most recent call last):454 Traceback (most recent call last):
444455
=== modified file 'lib/lp/archivepublisher/tests/test_publishdistro.py'
--- lib/lp/archivepublisher/tests/test_publishdistro.py 2016-02-04 19:46:52 +0000
+++ lib/lp/archivepublisher/tests/test_publishdistro.py 2016-03-10 01:29:20 +0000
@@ -246,7 +246,9 @@
246 self.addCleanup(tac.tearDown)246 self.addCleanup(tac.tearDown)
247 key_path = os.path.join(gpgkeysdir, 'ppa-sample@canonical.com.sec')247 key_path = os.path.join(gpgkeysdir, 'ppa-sample@canonical.com.sec')
248 IArchiveSigningKey(cprov.archive).setSigningKey(key_path)248 IArchiveSigningKey(cprov.archive).setSigningKey(key_path)
249 name16.archive.signing_key = cprov.archive.signing_key249 name16.archive.signing_key_owner = cprov.archive.signing_key_owner
250 name16.archive.signing_key_fingerprint = (
251 cprov.archive.signing_key_fingerprint)
250252
251 self.layer.txn.commit()253 self.layer.txn.commit()
252254
253255
=== modified file 'lib/lp/archiveuploader/tests/upload-karma.txt'
--- lib/lp/archiveuploader/tests/upload-karma.txt 2016-03-01 12:40:37 +0000
+++ lib/lp/archiveuploader/tests/upload-karma.txt 2016-03-10 01:29:20 +0000
@@ -52,7 +52,10 @@
52 >>> from lp.registry.interfaces.person import IPersonSet52 >>> from lp.registry.interfaces.person import IPersonSet
53 >>> name16 = getUtility(IPersonSet).getByName('name16')53 >>> name16 = getUtility(IPersonSet).getByName('name16')
54 >>> key = getUtility(IGPGKeySet).getGPGKeysForPerson(name16)[0]54 >>> key = getUtility(IGPGKeySet).getGPGKeysForPerson(name16)[0]
55 >>> removeSecurityProxy(foo_src.queue_root).signing_key = key55 >>> removeSecurityProxy(foo_src.queue_root).signing_key_owner = (
56 ... key.owner)
57 >>> removeSecurityProxy(foo_src.queue_root).signing_key_fingerprint = (
58 ... key.fingerprint)
56 >>> transaction.commit()59 >>> transaction.commit()
57 >>> foo_src.queue_root.acceptFromQueue()60 >>> foo_src.queue_root.acceptFromQueue()
58 Karma added: action=distributionuploadaccepted, distribution=ubuntu61 Karma added: action=distributionuploadaccepted, distribution=ubuntu
5962
=== modified file 'lib/lp/registry/browser/tests/test_codeofconduct.py'
--- lib/lp/registry/browser/tests/test_codeofconduct.py 2012-11-08 10:48:29 +0000
+++ lib/lp/registry/browser/tests/test_codeofconduct.py 2016-03-10 01:29:20 +0000
@@ -70,7 +70,8 @@
70 def sign_coc(self, user, gpg_key):70 def sign_coc(self, user, gpg_key):
71 """Return a SignedCodeOfConduct using dummy text."""71 """Return a SignedCodeOfConduct using dummy text."""
72 signed_coc = SignedCodeOfConduct(72 signed_coc = SignedCodeOfConduct(
73 owner=user, signingkey=gpg_key,73 owner=user, signing_key_fingerprint=gpg_key.fingerprint,
74 signing_key_owner=gpg_key.owner,
74 signedcode="Dummy CoC signed text.", active=True)75 signedcode="Dummy CoC signed text.", active=True)
75 return signed_coc76 return signed_coc
7677
7778
=== modified file 'lib/lp/registry/browser/tests/test_distroseries.py'
--- lib/lp/registry/browser/tests/test_distroseries.py 2016-01-26 15:47:37 +0000
+++ lib/lp/registry/browser/tests/test_distroseries.py 2016-03-10 01:29:20 +0000
@@ -941,8 +941,11 @@
941 sourcename=spr.sourcepackagename.name,941 sourcename=spr.sourcepackagename.name,
942 distroseries=derived_series))942 distroseries=derived_series))
943 else:943 else:
944 removeSecurityProxy(spr).dscsigningkey = (944 key = self.factory.makeGPGKey(owner=spr.creator)
945 self.factory.makeGPGKey(owner=spr.creator))945 removeSecurityProxy(spr).signing_key_owner = key.owner
946 removeSecurityProxy(spr).signing_key_fingerprint = (
947 key.fingerprint)
948 del get_property_cache(spr).dscsigningkey
946949
947 def flush_and_render():950 def flush_and_render():
948 flush_database_caches()951 flush_database_caches()
@@ -1357,8 +1360,12 @@
1357 # each difference row.1360 # each difference row.
1358 dsd = self.makePackageUpgrade()1361 dsd = self.makePackageUpgrade()
1359 uploader = self.factory.makePerson()1362 uploader = self.factory.makePerson()
1360 removeSecurityProxy(dsd.source_package_release).dscsigningkey = (1363 key = self.factory.makeGPGKey(uploader)
1361 self.factory.makeGPGKey(uploader))1364 naked_spr = removeSecurityProxy(
1365 dsd.source_package_release.sourcepackagerelease)
1366 naked_spr.signing_key_fingerprint = key.fingerprint
1367 naked_spr.signing_key_owner = key.owner
1368 del get_property_cache(naked_spr).dscsigningkey
1362 view = self.makeView(dsd.derived_series)1369 view = self.makeView(dsd.derived_series)
1363 root = html.fromstring(view())1370 root = html.fromstring(view())
1364 [creator_cell] = root.cssselect(1371 [creator_cell] = root.cssselect(
@@ -2433,8 +2440,12 @@
2433 dsd = self.factory.makeDistroSeriesDifference(2440 dsd = self.factory.makeDistroSeriesDifference(
2434 difference_type=missing_type)2441 difference_type=missing_type)
2435 uploader = self.factory.makePerson()2442 uploader = self.factory.makePerson()
2436 naked_spr = removeSecurityProxy(dsd.parent_source_package_release)2443 key = self.factory.makeGPGKey(uploader)
2437 naked_spr.dscsigningkey = self.factory.makeGPGKey(uploader)2444 naked_spr = removeSecurityProxy(
2445 dsd.parent_source_package_release.sourcepackagerelease)
2446 naked_spr.signing_key_fingerprint = key.fingerprint
2447 naked_spr.signing_key_owner = key.owner
2448 del get_property_cache(naked_spr).dscsigningkey
2438 with person_logged_in(self.simple_user):2449 with person_logged_in(self.simple_user):
2439 view = create_initialized_view(2450 view = create_initialized_view(
2440 dsd.derived_series, '+missingpackages',2451 dsd.derived_series, '+missingpackages',
24412452
=== modified file 'lib/lp/registry/interfaces/gpg.py'
--- lib/lp/registry/interfaces/gpg.py 2016-03-01 14:15:26 +0000
+++ lib/lp/registry/interfaces/gpg.py 2016-03-10 01:29:20 +0000
@@ -78,6 +78,9 @@
78 inactive ones.78 inactive ones.
79 """79 """
8080
81 def getByFingerprints(fingerprints):
82 """Get multiple OpenPGP keys by their fingerprints."""
83
81 def getGPGKeysForPerson(person, active=True):84 def getGPGKeysForPerson(person, active=True):
82 """Return OpenGPG keys for a person.85 """Return OpenGPG keys for a person.
8386
8487
=== modified file 'lib/lp/registry/model/codeofconduct.py'
--- lib/lp/registry/model/codeofconduct.py 2016-02-23 02:40:39 +0000
+++ lib/lp/registry/model/codeofconduct.py 2016-03-10 01:29:20 +0000
@@ -49,6 +49,7 @@
49 format_address,49 format_address,
50 simple_sendmail,50 simple_sendmail,
51 )51 )
52from lp.services.propertycache import cachedproperty
52from lp.services.webapp import canonical_url53from lp.services.webapp import canonical_url
5354
5455
@@ -180,7 +181,7 @@
180181
181 signedcode = StringCol(dbName='signedcode', notNull=False, default=None)182 signedcode = StringCol(dbName='signedcode', notNull=False, default=None)
182183
183 signingkey = ForeignKey(foreignKey="GPGKey", dbName="signingkey",184 _signingkey = ForeignKey(foreignKey="GPGKey", dbName="signingkey",
184 notNull=False, default=None)185 notNull=False, default=None)
185 signing_key_fingerprint = Unicode()186 signing_key_fingerprint = Unicode()
186187
@@ -195,6 +196,12 @@
195196
196 active = BoolCol(dbName='active', notNull=True, default=False)197 active = BoolCol(dbName='active', notNull=True, default=False)
197198
199 @cachedproperty
200 def signingkey(self):
201 if self.signing_key_fingerprint is not None:
202 return getUtility(IGPGKeySet).getByFingerprint(
203 self.signing_key_fingerprint)
204
198 @property205 @property
199 def displayname(self):206 def displayname(self):
200 """Build a Fancy Title for CoC."""207 """Build a Fancy Title for CoC."""
@@ -308,7 +315,7 @@
308315
309 # Store the signature316 # Store the signature
310 signed = SignedCodeOfConduct(317 signed = SignedCodeOfConduct(
311 owner=user, signingkey=gpg,318 owner=user, _signingkey=gpg,
312 signing_key_fingerprint=gpg.fingerprint if gpg else None,319 signing_key_fingerprint=gpg.fingerprint if gpg else None,
313 signedcode=signedcode, active=True)320 signedcode=signedcode, active=True)
314321
315322
=== modified file 'lib/lp/registry/model/distroseries.py'
--- lib/lp/registry/model/distroseries.py 2016-02-23 02:27:23 +0000
+++ lib/lp/registry/model/distroseries.py 2016-03-10 01:29:20 +0000
@@ -1164,7 +1164,7 @@
1164 architecturehintlist=architecturehintlist, component=component,1164 architecturehintlist=architecturehintlist, component=component,
1165 creator=creator, urgency=urgency, changelog=changelog,1165 creator=creator, urgency=urgency, changelog=changelog,
1166 changelog_entry=changelog_entry, dsc=dsc,1166 changelog_entry=changelog_entry, dsc=dsc,
1167 dscsigningkey=dscsigningkey,1167 _dscsigningkey=dscsigningkey,
1168 signing_key_owner=dscsigningkey.owner if dscsigningkey else None,1168 signing_key_owner=dscsigningkey.owner if dscsigningkey else None,
1169 signing_key_fingerprint=(1169 signing_key_fingerprint=(
1170 dscsigningkey.fingerprint if dscsigningkey else None),1170 dscsigningkey.fingerprint if dscsigningkey else None),
@@ -1353,7 +1353,7 @@
1353 return PackageUpload(1353 return PackageUpload(
1354 distroseries=self, status=PackageUploadStatus.NEW,1354 distroseries=self, status=PackageUploadStatus.NEW,
1355 pocket=pocket, archive=archive, changesfile=changes_file_alias,1355 pocket=pocket, archive=archive, changesfile=changes_file_alias,
1356 signing_key=signing_key,1356 _signing_key=signing_key,
1357 signing_key_owner=signing_key.owner if signing_key else None,1357 signing_key_owner=signing_key.owner if signing_key else None,
1358 signing_key_fingerprint=(1358 signing_key_fingerprint=(
1359 signing_key.fingerprint if signing_key else None),1359 signing_key.fingerprint if signing_key else None),
13601360
=== modified file 'lib/lp/registry/model/distroseriesdifference.py'
--- lib/lp/registry/model/distroseriesdifference.py 2015-07-08 16:05:11 +0000
+++ lib/lp/registry/model/distroseriesdifference.py 2016-03-10 01:29:20 +0000
@@ -330,17 +330,13 @@
330 SourcePackageRecipeBuild, sprs,330 SourcePackageRecipeBuild, sprs,
331 ("source_package_recipe_build_id",))331 ("source_package_recipe_build_id",))
332332
333 # SourcePackageRelease.uploader can end up getting the owner of
334 # the DSC signing key.
335 gpgkeys = bulk.load_related(GPGKey, sprs, ("dscsigningkeyID",))
336
337 # Load DistroSeriesDifferenceComment owners, SourcePackageRecipeBuild333 # Load DistroSeriesDifferenceComment owners, SourcePackageRecipeBuild
338 # requesters, GPGKey owners, and SourcePackageRelease creators.334 # requesters, GPGKey owners, and SourcePackageRelease creators.
339 person_ids = set().union(335 person_ids = set().union(
340 (dsdc.message.ownerID for dsdc in latest_comments),336 (dsdc.message.ownerID for dsdc in latest_comments),
341 (sprb.requester_id for sprb in sprbs),337 (sprb.requester_id for sprb in sprbs),
342 (gpgkey.ownerID for gpgkey in gpgkeys),338 (spr.creatorID for spr in sprs),
343 (spr.creatorID for spr in sprs))339 (spr.signing_key_owner_id for spr in sprs))
344 uploaders = getUtility(IPersonSet).getPrecachedPersonsFromIDs(340 uploaders = getUtility(IPersonSet).getPrecachedPersonsFromIDs(
345 person_ids, need_validity=True)341 person_ids, need_validity=True)
346 list(uploaders)342 list(uploaders)
347343
=== modified file 'lib/lp/registry/model/gpgkey.py'
--- lib/lp/registry/model/gpgkey.py 2016-03-01 14:15:26 +0000
+++ lib/lp/registry/model/gpgkey.py 2016-03-10 01:29:20 +0000
@@ -19,6 +19,7 @@
19 IGPGKeySet,19 IGPGKeySet,
20 )20 )
21from lp.services.database.enumcol import EnumCol21from lp.services.database.enumcol import EnumCol
22from lp.services.database.interfaces import IStore
22from lp.services.database.sqlbase import (23from lp.services.database.sqlbase import (
23 SQLBase,24 SQLBase,
24 sqlvalues,25 sqlvalues,
@@ -95,6 +96,11 @@
95 return default96 return default
96 return result97 return result
9798
99 def getByFingerprints(self, fingerprints):
100 """See `IGPGKeySet`"""
101 return IStore(GPGKey).find(
102 GPGKey, GPGKey.fingerprint.is_in(fingerprints))
103
98 def getGPGKeysForPerson(self, owner, active=True):104 def getGPGKeysForPerson(self, owner, active=True):
99 if active is False:105 if active is False:
100 query = """106 query = """
101107
=== modified file 'lib/lp/soyuz/configure.zcml'
--- lib/lp/soyuz/configure.zcml 2016-02-24 01:30:06 +0000
+++ lib/lp/soyuz/configure.zcml 2016-03-10 01:29:20 +0000
@@ -389,9 +389,9 @@
389 set_schema="lp.soyuz.interfaces.archive.IArchiveRestricted"/>389 set_schema="lp.soyuz.interfaces.archive.IArchiveRestricted"/>
390 <require390 <require
391 permission="launchpad.InternalScriptsOnly"391 permission="launchpad.InternalScriptsOnly"
392 attributes="signing_key_owner _signing_key_fingerprint"392 attributes="signing_key_owner"
393 set_attributes="distribution signing_key signing_key_owner393 set_attributes="distribution _signing_key signing_key_owner
394 _signing_key_fingerprint"/>394 signing_key_fingerprint"/>
395 </class>395 </class>
396 <adapter396 <adapter
397 for="lp.soyuz.interfaces.archive.IArchive"397 for="lp.soyuz.interfaces.archive.IArchive"
398398
=== modified file 'lib/lp/soyuz/doc/distroseriesqueue-notify.txt'
--- lib/lp/soyuz/doc/distroseriesqueue-notify.txt 2016-02-29 18:48:23 +0000
+++ lib/lp/soyuz/doc/distroseriesqueue-notify.txt 2016-03-10 01:29:20 +0000
@@ -110,7 +110,9 @@
110 >>> from zope.security.proxy import removeSecurityProxy110 >>> from zope.security.proxy import removeSecurityProxy
111 >>> from lp.registry.interfaces.gpg import IGPGKeySet111 >>> from lp.registry.interfaces.gpg import IGPGKeySet
112 >>> gpgkey = getUtility(IGPGKeySet).getByFingerprint('ABCDEF0123456789ABCDDCBA0000111112345678')112 >>> gpgkey = getUtility(IGPGKeySet).getByFingerprint('ABCDEF0123456789ABCDDCBA0000111112345678')
113 >>> removeSecurityProxy(netapplet_upload).signing_key = gpgkey113 >>> removeSecurityProxy(netapplet_upload).signing_key_owner = gpgkey.owner
114 >>> removeSecurityProxy(netapplet_upload).signing_key_fingerprint = (
115 ... gpgkey.fingerprint)
114116
115Now request the email:117Now request the email:
116118
117119
=== modified file 'lib/lp/soyuz/doc/publishing.txt'
--- lib/lp/soyuz/doc/publishing.txt 2015-02-19 01:35:33 +0000
+++ lib/lp/soyuz/doc/publishing.txt 2016-03-10 01:29:20 +0000
@@ -23,7 +23,9 @@
23 >>> from lp.registry.model.gpgkey import GPGKey23 >>> from lp.registry.model.gpgkey import GPGKey
24 >>> name16 = getUtility(IPersonSet).getByName('name16')24 >>> name16 = getUtility(IPersonSet).getByName('name16')
25 >>> fake_signer = GPGKey.selectOneBy(owner=name16)25 >>> fake_signer = GPGKey.selectOneBy(owner=name16)
26 >>> spph.sourcepackagerelease.dscsigningkey = fake_signer26 >>> spph.sourcepackagerelease.signing_key_owner = fake_signer.owner
27 >>> spph.sourcepackagerelease.signing_key_fingerprint = (
28 ... fake_signer.fingerprint)
2729
28Verify if the object follows its interface contracts:30Verify if the object follows its interface contracts:
2931
@@ -86,7 +88,10 @@
8688
87The signer can also be None for packages that were synced (e.g. from Debian):89The signer can also be None for packages that were synced (e.g. from Debian):
8890
89 >>> spph.sourcepackagerelease.dscsigningkey = None91 >>> from lp.services.propertycache import get_property_cache
92 >>> spph.sourcepackagerelease.signing_key_owner = None
93 >>> spph.sourcepackagerelease.signing_key_fingerprint = None
94 >>> del get_property_cache(spph.sourcepackagerelease).dscsigningkey
90 >>> print spph.package_signer95 >>> print spph.package_signer
91 None96 None
9297
9398
=== modified file 'lib/lp/soyuz/interfaces/sourcepackagerelease.py'
--- lib/lp/soyuz/interfaces/sourcepackagerelease.py 2016-02-05 15:16:29 +0000
+++ lib/lp/soyuz/interfaces/sourcepackagerelease.py 2016-03-10 01:29:20 +0000
@@ -35,7 +35,6 @@
35 version = Attribute("A version string")35 version = Attribute("A version string")
36 dateuploaded = Attribute("Date of Upload")36 dateuploaded = Attribute("Date of Upload")
37 urgency = Attribute("Source Package Urgency")37 urgency = Attribute("Source Package Urgency")
38 dscsigningkeyID = Attribute("DB ID of the DSC Signing Key")
39 dscsigningkey = Attribute("DSC Signing Key")38 dscsigningkey = Attribute("DSC Signing Key")
40 component = Attribute("Source Package Component")39 component = Attribute("Source Package Component")
41 format = Attribute("The Source Package Format")40 format = Attribute("The Source Package Format")
4241
=== modified file 'lib/lp/soyuz/model/archive.py'
--- lib/lp/soyuz/model/archive.py 2016-02-23 01:59:48 +0000
+++ lib/lp/soyuz/model/archive.py 2016-03-10 01:29:20 +0000
@@ -77,6 +77,7 @@
77from lp.registry.errors import NoSuchDistroSeries77from lp.registry.errors import NoSuchDistroSeries
78from lp.registry.interfaces.distroseries import IDistroSeriesSet78from lp.registry.interfaces.distroseries import IDistroSeriesSet
79from lp.registry.interfaces.distroseriesparent import IDistroSeriesParentSet79from lp.registry.interfaces.distroseriesparent import IDistroSeriesParentSet
80from lp.registry.interfaces.gpg import IGPGKeySet
80from lp.registry.interfaces.person import (81from lp.registry.interfaces.person import (
81 IPersonSet,82 IPersonSet,
82 validate_person,83 validate_person,
@@ -338,11 +339,11 @@
338339
339 date_created = UtcDateTimeCol(dbName='date_created')340 date_created = UtcDateTimeCol(dbName='date_created')
340341
341 signing_key = ForeignKey(342 _signing_key = ForeignKey(
342 foreignKey='GPGKey', dbName='signing_key', notNull=False)343 foreignKey='GPGKey', dbName='signing_key', notNull=False)
343 signing_key_owner_id = Int(name="signing_key_owner")344 signing_key_owner_id = Int(name="signing_key_owner")
344 signing_key_owner = Reference(signing_key_owner_id, 'Person.id')345 signing_key_owner = Reference(signing_key_owner_id, 'Person.id')
345 _signing_key_fingerprint = Unicode(name="signing_key_fingerprint")346 signing_key_fingerprint = Unicode()
346347
347 relative_build_score = IntCol(348 relative_build_score = IntCol(
348 dbName='relative_build_score', notNull=True, default=0)349 dbName='relative_build_score', notNull=True, default=0)
@@ -391,6 +392,13 @@
391 """See `IArchive`."""392 """See `IArchive`."""
392 return self.displayname393 return self.displayname
393394
395 @cachedproperty
396 def signing_key(self):
397 """See `IArchive`."""
398 if self.signing_key_fingerprint is not None:
399 return getUtility(IGPGKeySet).getByFingerprint(
400 self.signing_key_fingerprint)
401
394 @property402 @property
395 def is_ppa(self):403 def is_ppa(self):
396 """See `IArchive`."""404 """See `IArchive`."""
@@ -518,13 +526,6 @@
518 return urlappend(526 return urlappend(
519 db_pubconf.base_url, self.distribution.name + postfix)527 db_pubconf.base_url, self.distribution.name + postfix)
520528
521 @property
522 def signing_key_fingerprint(self):
523 if self.signing_key is not None:
524 return self.signing_key.fingerprint
525
526 return None
527
528 def getBuildRecords(self, build_state=None, name=None, pocket=None,529 def getBuildRecords(self, build_state=None, name=None, pocket=None,
529 arch_tag=None, user=None, binary_only=True):530 arch_tag=None, user=None, binary_only=True):
530 """See IHasBuildRecords"""531 """See IHasBuildRecords"""
@@ -679,7 +680,6 @@
679 def eager_load(rows):680 def eager_load(rows):
680 # \o/ circular imports.681 # \o/ circular imports.
681 from lp.registry.model.distroseries import DistroSeries682 from lp.registry.model.distroseries import DistroSeries
682 from lp.registry.model.gpgkey import GPGKey
683 ids = set(map(attrgetter('distroseriesID'), rows))683 ids = set(map(attrgetter('distroseriesID'), rows))
684 ids.discard(None)684 ids.discard(None)
685 if ids:685 if ids:
@@ -698,10 +698,14 @@
698 ids.discard(None)698 ids.discard(None)
699 if ids:699 if ids:
700 list(getUtility(IPersonSet).getPrecachedPersonsFromIDs(ids))700 list(getUtility(IPersonSet).getPrecachedPersonsFromIDs(ids))
701 ids = set(map(attrgetter('dscsigningkeyID'), releases))701 keys = {
702 ids.discard(None)702 key.fingerprint: key for key in
703 if ids:703 getUtility(IGPGKeySet).getByFingerprints(
704 list(store.find(GPGKey, GPGKey.id.is_in(ids)))704 set(map(attrgetter('signing_key_fingerprint'), releases))
705 - set([None]))}
706 for spr in releases:
707 get_property_cache(spr).dscsigningkey = keys.get(
708 spr.signing_key_fingerprint)
705 return DecoratedResultSet(resultset, pre_iter_hook=eager_load)709 return DecoratedResultSet(resultset, pre_iter_hook=eager_load)
706710
707 def getSourcesForDeletion(self, name=None, status=None, distroseries=None):711 def getSourcesForDeletion(self, name=None, status=None, distroseries=None):
@@ -2537,9 +2541,9 @@
2537 new_archive = Archive(2541 new_archive = Archive(
2538 owner=owner, distribution=distribution, name=name,2542 owner=owner, distribution=distribution, name=name,
2539 displayname=displayname, description=description,2543 displayname=displayname, description=description,
2540 purpose=purpose, publish=publish, signing_key=signing_key,2544 purpose=purpose, publish=publish, _signing_key=signing_key,
2541 signing_key_owner=signing_key.owner if signing_key else None,2545 signing_key_owner=signing_key.owner if signing_key else None,
2542 _signing_key_fingerprint=(2546 signing_key_fingerprint=(
2543 signing_key.fingerprint if signing_key else None),2547 signing_key.fingerprint if signing_key else None),
2544 require_virtualized=require_virtualized)2548 require_virtualized=require_virtualized)
25452549
@@ -2631,8 +2635,8 @@
2631 SourcePackagePublishingHistory.archive == Archive.id))2635 SourcePackagePublishingHistory.archive == Archive.id))
2632 results = IStore(Archive).using(*origin).find(2636 results = IStore(Archive).using(*origin).find(
2633 Archive,2637 Archive,
2634 Archive.signing_key == None, Archive.purpose == ArchivePurpose.PPA,2638 Archive.signing_key_fingerprint == None,
2635 Archive._enabled == True)2639 Archive.purpose == ArchivePurpose.PPA, Archive._enabled == True)
2636 results.order_by(Archive.date_created)2640 results.order_by(Archive.date_created)
2637 return results.config(distinct=True)2641 return results.config(distinct=True)
26382642
26392643
=== modified file 'lib/lp/soyuz/model/queue.py'
--- lib/lp/soyuz/model/queue.py 2016-02-23 02:00:00 +0000
+++ lib/lp/soyuz/model/queue.py 2016-03-10 01:29:20 +0000
@@ -46,6 +46,7 @@
46from lp.archivepublisher.config import getPubConfig46from lp.archivepublisher.config import getPubConfig
47from lp.archivepublisher.customupload import CustomUploadError47from lp.archivepublisher.customupload import CustomUploadError
48from lp.archiveuploader.tagfiles import parse_tagfile_content48from lp.archiveuploader.tagfiles import parse_tagfile_content
49from lp.registry.interfaces.gpg import IGPGKeySet
49from lp.registry.interfaces.pocket import PackagePublishingPocket50from lp.registry.interfaces.pocket import PackagePublishingPocket
50from lp.registry.model.sourcepackagename import SourcePackageName51from lp.registry.model.sourcepackagename import SourcePackageName
51from lp.services.auditor.client import AuditorClient52from lp.services.auditor.client import AuditorClient
@@ -184,7 +185,7 @@
184185
185 archive = ForeignKey(dbName="archive", foreignKey="Archive", notNull=True)186 archive = ForeignKey(dbName="archive", foreignKey="Archive", notNull=True)
186187
187 signing_key = ForeignKey(188 _signing_key = ForeignKey(
188 foreignKey='GPGKey', dbName='signing_key', notNull=False)189 foreignKey='GPGKey', dbName='signing_key', notNull=False)
189 signing_key_owner_id = Int(name="signing_key_owner")190 signing_key_owner_id = Int(name="signing_key_owner")
190 signing_key_owner = Reference(signing_key_owner_id, 'Person.id')191 signing_key_owner = Reference(signing_key_owner_id, 'Person.id')
@@ -291,6 +292,12 @@
291 })292 })
292 return properties293 return properties
293294
295 @cachedproperty
296 def signing_key(self):
297 if self.signing_key_fingerprint is not None:
298 return getUtility(IGPGKeySet).getByFingerprint(
299 self.signing_key_fingerprint)
300
294 @property301 @property
295 def copy_source_archive(self):302 def copy_source_archive(self):
296 """See `IPackageUpload`."""303 """See `IPackageUpload`."""
297304
=== modified file 'lib/lp/soyuz/model/sourcepackagerelease.py'
--- lib/lp/soyuz/model/sourcepackagerelease.py 2016-02-23 02:27:23 +0000
+++ lib/lp/soyuz/model/sourcepackagerelease.py 2016-03-10 01:29:20 +0000
@@ -35,10 +35,12 @@
35from storm.store import Store35from storm.store import Store
36from zope.component import getUtility36from zope.component import getUtility
37from zope.interface import implementer37from zope.interface import implementer
38from zope.security.proxy import removeSecurityProxy
3839
39from lp.app.errors import NotFoundError40from lp.app.errors import NotFoundError
40from lp.archiveuploader.utils import determine_source_file_type41from lp.archiveuploader.utils import determine_source_file_type
41from lp.buildmaster.enums import BuildStatus42from lp.buildmaster.enums import BuildStatus
43from lp.registry.interfaces.gpg import IGPGKeySet
42from lp.registry.interfaces.person import validate_public_person44from lp.registry.interfaces.person import validate_public_person
43from lp.registry.interfaces.sourcepackage import (45from lp.registry.interfaces.sourcepackage import (
44 SourcePackageType,46 SourcePackageType,
@@ -89,7 +91,7 @@
89 maintainer = ForeignKey(91 maintainer = ForeignKey(
90 dbName='maintainer', foreignKey='Person',92 dbName='maintainer', foreignKey='Person',
91 storm_validator=validate_public_person, notNull=True)93 storm_validator=validate_public_person, notNull=True)
92 dscsigningkey = ForeignKey(foreignKey='GPGKey', dbName='dscsigningkey')94 _dscsigningkey = ForeignKey(foreignKey='GPGKey', dbName='dscsigningkey')
93 signing_key_owner_id = Int(name="signing_key_owner")95 signing_key_owner_id = Int(name="signing_key_owner")
94 signing_key_owner = Reference(signing_key_owner_id, 'Person.id')96 signing_key_owner = Reference(signing_key_owner_id, 'Person.id')
95 signing_key_fingerprint = Unicode()97 signing_key_fingerprint = Unicode()
@@ -172,6 +174,15 @@
172 "UPDATE sourcepackagerelease SET copyright=%s WHERE id=%s",174 "UPDATE sourcepackagerelease SET copyright=%s WHERE id=%s",
173 (content, self.id))175 (content, self.id))
174176
177 @cachedproperty
178 def dscsigningkey(self):
179 if self.signing_key_fingerprint is not None:
180 # Stripping proxy as some tests expect this former FK to
181 # hold an unsecured object. self is always proxied by things
182 # that hold it, so no issue here.
183 return removeSecurityProxy(getUtility(IGPGKeySet).getByFingerprint(
184 self.signing_key_fingerprint))
185
175 @property186 @property
176 def user_defined_fields(self):187 def user_defined_fields(self):
177 """See `IBinaryPackageRelease`."""188 """See `IBinaryPackageRelease`."""
@@ -364,8 +375,8 @@
364 """See `ISourcePackageRelease`"""375 """See `ISourcePackageRelease`"""
365 if self.source_package_recipe_build is not None:376 if self.source_package_recipe_build is not None:
366 return self.source_package_recipe_build.requester377 return self.source_package_recipe_build.requester
367 if self.dscsigningkey is not None:378 if self.signing_key_owner is not None:
368 return self.dscsigningkey.owner379 return self.signing_key_owner
369 return None380 return None
370381
371 @property382 @property
372383
=== modified file 'lib/lp/soyuz/scripts/gina/handlers.py'
--- lib/lp/soyuz/scripts/gina/handlers.py 2016-02-23 02:27:23 +0000
+++ lib/lp/soyuz/scripts/gina/handlers.py 2016-03-10 01:29:20 +0000
@@ -615,7 +615,7 @@
615 component=componentID,615 component=componentID,
616 sourcepackagename=name.id,616 sourcepackagename=name.id,
617 maintainer=maintainer.id,617 maintainer=maintainer.id,
618 dscsigningkey=key,618 _dscsigningkey=key,
619 signing_key_owner=key.owner if key else None,619 signing_key_owner=key.owner if key else None,
620 signing_key_fingerprint=key.fingerprint if key else None,620 signing_key_fingerprint=key.fingerprint if key else None,
621 urgency=ChangesFile.urgency_map[src.urgency],621 urgency=ChangesFile.urgency_map[src.urgency],
622622
=== modified file 'lib/lp/soyuz/scripts/tests/test_ppakeygenerator.py'
--- lib/lp/soyuz/scripts/tests/test_ppakeygenerator.py 2016-02-29 18:48:23 +0000
+++ lib/lp/soyuz/scripts/tests/test_ppakeygenerator.py 2016-03-10 01:29:20 +0000
@@ -10,6 +10,7 @@
10from lp.registry.interfaces.distribution import IDistributionSet10from lp.registry.interfaces.distribution import IDistributionSet
11from lp.registry.interfaces.gpg import IGPGKeySet11from lp.registry.interfaces.gpg import IGPGKeySet
12from lp.registry.interfaces.person import IPersonSet12from lp.registry.interfaces.person import IPersonSet
13from lp.services.propertycache import get_property_cache
13from lp.services.scripts.base import LaunchpadScriptFailure14from lp.services.scripts.base import LaunchpadScriptFailure
14from lp.soyuz.interfaces.archive import IArchiveSet15from lp.soyuz.interfaces.archive import IArchiveSet
15from lp.soyuz.scripts.ppakeygenerator import PPAKeyGenerator16from lp.soyuz.scripts.ppakeygenerator import PPAKeyGenerator
@@ -52,7 +53,9 @@
52 def fake_key_generation(archive):53 def fake_key_generation(archive):
53 a_key = getUtility(IGPGKeySet).getByFingerprint(54 a_key = getUtility(IGPGKeySet).getByFingerprint(
54 'ABCDEF0123456789ABCDDCBA0000111112345678')55 'ABCDEF0123456789ABCDDCBA0000111112345678')
55 archive.signing_key = a_key56 archive.signing_key_fingerprint = a_key.fingerprint
57 archive.signing_key_owner = a_key.owner
58 del get_property_cache(archive).signing_key
5659
57 key_generator.generateKey = fake_key_generation60 key_generator.generateKey = fake_key_generation
5861
@@ -71,7 +74,8 @@
71 cprov = getUtility(IPersonSet).getByName('cprov')74 cprov = getUtility(IPersonSet).getByName('cprov')
72 a_key = getUtility(IGPGKeySet).getByFingerprint(75 a_key = getUtility(IGPGKeySet).getByFingerprint(
73 'ABCDEF0123456789ABCDDCBA0000111112345678')76 'ABCDEF0123456789ABCDDCBA0000111112345678')
74 cprov.archive.signing_key = a_key77 cprov.archive.signing_key_fingerprint = a_key.fingerprint
78 cprov.archive.signing_key_owner = a_key.owner
7579
76 key_generator = self._getKeyGenerator(80 key_generator = self._getKeyGenerator(
77 archive_reference='~cprov/ubuntu/ppa')81 archive_reference='~cprov/ubuntu/ppa')
7882
=== modified file 'lib/lp/soyuz/stories/ppa/xx-private-ppa-subscriptions.txt'
--- lib/lp/soyuz/stories/ppa/xx-private-ppa-subscriptions.txt 2016-02-29 18:48:23 +0000
+++ lib/lp/soyuz/stories/ppa/xx-private-ppa-subscriptions.txt 2016-03-10 01:29:20 +0000
@@ -174,7 +174,9 @@
174 >>> login('foo.bar@canonical.com')174 >>> login('foo.bar@canonical.com')
175 >>> mark = getUtility(IPersonSet).getByName('mark')175 >>> mark = getUtility(IPersonSet).getByName('mark')
176 >>> a_key = getUtility(IGPGKeySet).getByFingerprint('ABCDEF0123456789ABCDDCBA0000111112345678')176 >>> a_key = getUtility(IGPGKeySet).getByFingerprint('ABCDEF0123456789ABCDDCBA0000111112345678')
177 >>> removeSecurityProxy(mark_private_ppa).signing_key = a_key177 >>> removeSecurityProxy(mark_private_ppa).signing_key_fingerprint = (
178 ... a_key.fingerprint)
179 >>> removeSecurityProxy(mark_private_ppa).signing_key_owner = a_key.owner
178 >>> logout()180 >>> logout()
179181
180 >>> joe_browser.reload()182 >>> joe_browser.reload()
181183
=== modified file 'lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.txt'
--- lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.txt 2016-02-29 18:48:23 +0000
+++ lib/lp/soyuz/stories/ppa/xx-ubuntu-ppas.txt 2016-03-10 01:29:20 +0000
@@ -557,7 +557,9 @@
557 >>> login('foo.bar@canonical.com')557 >>> login('foo.bar@canonical.com')
558 >>> no_priv = getUtility(IPersonSet).getByName('no-priv')558 >>> no_priv = getUtility(IPersonSet).getByName('no-priv')
559 >>> a_key = getUtility(IGPGKeySet).getByFingerprint('ABCDEF0123456789ABCDDCBA0000111112345678')559 >>> a_key = getUtility(IGPGKeySet).getByFingerprint('ABCDEF0123456789ABCDDCBA0000111112345678')
560 >>> removeSecurityProxy(no_priv.archive).signing_key = a_key560 >>> removeSecurityProxy(no_priv.archive).signing_key_fingerprint = (
561 ... a_key.fingerprint)
562 >>> removeSecurityProxy(no_priv.archive).signing_key_owner = a_key.owner
561 >>> logout()563 >>> logout()
562564
563Now that 'No privileges' PPA has a signing key, a text with the key565Now that 'No privileges' PPA has a signing key, a text with the key
564566
=== modified file 'lib/lp/soyuz/stories/webservice/xx-archive.txt'
--- lib/lp/soyuz/stories/webservice/xx-archive.txt 2016-01-05 15:06:24 +0000
+++ lib/lp/soyuz/stories/webservice/xx-archive.txt 2016-03-10 01:29:20 +0000
@@ -80,7 +80,10 @@
80 ABCDEF0123456789ABCDDCBA000011111234567880 ABCDEF0123456789ABCDDCBA0000111112345678
8181
82 >>> cprov = getUtility(IPersonSet).getByName('cprov')82 >>> cprov = getUtility(IPersonSet).getByName('cprov')
83 >>> removeSecurityProxy(cprov.archive).signing_key = a_key83 >>> removeSecurityProxy(cprov.archive).signing_key_fingerprint = (
84 ... a_key.fingerprint)
85 >>> removeSecurityProxy(cprov.archive).signing_key_owner = (
86 ... a_key.owner)
84 >>> print cprov.archive.signing_key_fingerprint87 >>> print cprov.archive.signing_key_fingerprint
85 ABCDEF0123456789ABCDDCBA000011111234567888 ABCDEF0123456789ABCDDCBA0000111112345678
8689
8790
=== modified file 'lib/lp/soyuz/stories/webservice/xx-builds.txt'
--- lib/lp/soyuz/stories/webservice/xx-builds.txt 2016-01-06 12:24:47 +0000
+++ lib/lp/soyuz/stories/webservice/xx-builds.txt 2016-03-10 01:29:20 +0000
@@ -22,7 +22,10 @@
22 >>> ppa = getUtility(IPersonSet).getByName('cprov').archive22 >>> ppa = getUtility(IPersonSet).getByName('cprov').archive
23 >>> for pub in ppa.getPublishedSources():23 >>> for pub in ppa.getPublishedSources():
24 ... pub = removeSecurityProxy(pub)24 ... pub = removeSecurityProxy(pub)
25 ... pub.sourcepackagerelease.dscsigningkey = fake_signer25 ... pub.sourcepackagerelease.signing_key_owner = (
26 ... fake_signer.owner)
27 ... pub.sourcepackagerelease.signing_key_fingerprint = (
28 ... fake_signer.fingerprint)
26 >>> transaction.commit()29 >>> transaction.commit()
27 >>> logout()30 >>> logout()
2831
2932
=== modified file 'lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt'
--- lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt 2015-04-09 05:16:37 +0000
+++ lib/lp/soyuz/stories/webservice/xx-source-package-publishing.txt 2016-03-10 01:29:20 +0000
@@ -23,7 +23,9 @@
23 >>> cprov_ppa = cprov_db.archive23 >>> cprov_ppa = cprov_db.archive
24 >>> for pub in cprov_ppa.getPublishedSources():24 >>> for pub in cprov_ppa.getPublishedSources():
25 ... pub = removeSecurityProxy(pub)25 ... pub = removeSecurityProxy(pub)
26 ... pub.sourcepackagerelease.dscsigningkey = fake_signer26 ... pub.sourcepackagerelease.signing_key_owner = fake_signer.owner
27 ... pub.sourcepackagerelease.signing_key_fingerprint = (
28 ... fake_signer.fingerprint)
27 >>> logout()29 >>> logout()
28 >>> cprov_webservice = webservice_for_person(30 >>> cprov_webservice = webservice_for_person(
29 ... cprov_db, permission=OAuthPermission.WRITE_PUBLIC)31 ... cprov_db, permission=OAuthPermission.WRITE_PUBLIC)
@@ -159,7 +161,8 @@
159 >>> login("foo.bar@canonical.com")161 >>> login("foo.bar@canonical.com")
160 >>> for pub in cprov_ppa.getPublishedSources():162 >>> for pub in cprov_ppa.getPublishedSources():
161 ... pub = removeSecurityProxy(pub)163 ... pub = removeSecurityProxy(pub)
162 ... pub.sourcepackagerelease.dscsigningkey = None164 ... pub.sourcepackagerelease.signing_key_owner = None
165 ... pub.sourcepackagerelease.signing_key_fingerprint = None
163 >>> logout()166 >>> logout()
164167
165Query the source again:168Query the source again:
166169
=== modified file 'lib/lp/soyuz/tests/test_archive.py'
--- lib/lp/soyuz/tests/test_archive.py 2016-01-05 15:06:24 +0000
+++ lib/lp/soyuz/tests/test_archive.py 2016-03-10 01:29:20 +0000
@@ -42,7 +42,10 @@
42from lp.services.database.interfaces import IStore42from lp.services.database.interfaces import IStore
43from lp.services.database.sqlbase import sqlvalues43from lp.services.database.sqlbase import sqlvalues
44from lp.services.job.interfaces.job import JobStatus44from lp.services.job.interfaces.job import JobStatus
45from lp.services.propertycache import clear_property_cache45from lp.services.propertycache import (
46 clear_property_cache,
47 get_property_cache,
48 )
46from lp.services.webapp.interfaces import OAuthPermission49from lp.services.webapp.interfaces import OAuthPermission
47from lp.services.worlddata.interfaces.country import ICountrySet50from lp.services.worlddata.interfaces.country import ICountrySet
48from lp.soyuz.adapters.archivedependencies import (51from lp.soyuz.adapters.archivedependencies import (
@@ -3456,7 +3459,11 @@
3456 owner=person, purpose=ArchivePurpose.PPA, name="ppa")3459 owner=person, purpose=ArchivePurpose.PPA, name="ppa")
3457 self.assertEqual(ppa, person.archive)3460 self.assertEqual(ppa, person.archive)
3458 self.factory.makeGPGKey(person)3461 self.factory.makeGPGKey(person)
3459 removeSecurityProxy(person.archive).signing_key = person.gpg_keys[0]3462 key = person.gpg_keys[0]
3463 removeSecurityProxy(person.archive).signing_key_owner = key.owner
3464 removeSecurityProxy(person.archive).signing_key_fingerprint = (
3465 key.fingerprint)
3466 del get_property_cache(person.archive).signing_key
3460 ppa_with_key = self.factory.makeArchive(3467 ppa_with_key = self.factory.makeArchive(
3461 owner=person, purpose=ArchivePurpose.PPA)3468 owner=person, purpose=ArchivePurpose.PPA)
3462 self.assertEqual(person.gpg_keys[0], ppa_with_key.signing_key)3469 self.assertEqual(person.gpg_keys[0], ppa_with_key.signing_key)
34633470
=== modified file 'lib/lp/soyuz/tests/test_build_notify.py'
--- lib/lp/soyuz/tests/test_build_notify.py 2015-09-11 12:20:23 +0000
+++ lib/lp/soyuz/tests/test_build_notify.py 2016-03-10 01:29:20 +0000
@@ -15,6 +15,7 @@
15from lp.registry.interfaces.person import IPersonSet15from lp.registry.interfaces.person import IPersonSet
16from lp.services.config import config16from lp.services.config import config
17from lp.services.mail.sendmail import format_address_for_person17from lp.services.mail.sendmail import format_address_for_person
18from lp.services.propertycache import get_property_cache
18from lp.services.webapp import canonical_url19from lp.services.webapp import canonical_url
19from lp.soyuz.enums import ArchivePurpose20from lp.soyuz.enums import ArchivePurpose
20from lp.soyuz.interfaces.publishing import PackagePublishingPocket21from lp.soyuz.interfaces.publishing import PackagePublishingPocket
@@ -83,7 +84,11 @@
83 self.factory.getUniqueInteger(), status.value),84 self.factory.getUniqueInteger(), status.value),
84 distroseries=self.distroseries, architecturehintlist='any',85 distroseries=self.distroseries, architecturehintlist='any',
85 creator=self.creator, archive=archive)86 creator=self.creator, archive=archive)
86 spph.sourcepackagerelease.dscsigningkey = self.gpgkey87 spph.sourcepackagerelease._dscsigningkey = self.gpgkey
88 spph.sourcepackagerelease.signing_key_fingerprint = (
89 self.gpgkey.fingerprint)
90 spph.sourcepackagerelease.signing_key_owner = (
91 self.gpgkey.owner)
87 [build] = spph.createMissingBuilds()92 [build] = spph.createMissingBuilds()
88 with person_logged_in(self.admin):93 with person_logged_in(self.admin):
89 build.updateStatus(BuildStatus.BUILDING, builder=self.builder)94 build.updateStatus(BuildStatus.BUILDING, builder=self.builder)
@@ -432,7 +437,9 @@
432 build = self.builds[BuildStatus.FAILEDTOBUILD.value]437 build = self.builds[BuildStatus.FAILEDTOBUILD.value]
433 spr = build.current_source_publication.sourcepackagerelease438 spr = build.current_source_publication.sourcepackagerelease
434 # Push past the security proxy439 # Push past the security proxy
435 removeSecurityProxy(spr).dscsigningkey = key440 removeSecurityProxy(spr).signing_key_owner = key.owner
441 removeSecurityProxy(spr).signing_key_fingerprint = key.fingerprint
442 del get_property_cache(spr).dscsigningkey
436 with dbuser(config.builddmaster.dbuser):443 with dbuser(config.builddmaster.dbuser):
437 build.notify()444 build.notify()
438 expected_reasons = [445 expected_reasons = [
439446
=== modified file 'utilities/soyuz-sampledata-setup.py'
--- utilities/soyuz-sampledata-setup.py 2015-10-13 13:22:08 +0000
+++ utilities/soyuz-sampledata-setup.py 2016-03-10 01:29:20 +0000
@@ -316,7 +316,8 @@
316 if signedcocset.searchByUser(person_id).count() == 0:316 if signedcocset.searchByUser(person_id).count() == 0:
317 fake_gpg_key = LaunchpadObjectFactory().makeGPGKey(person)317 fake_gpg_key = LaunchpadObjectFactory().makeGPGKey(person)
318 Store.of(person).add(SignedCodeOfConduct(318 Store.of(person).add(SignedCodeOfConduct(
319 owner=person, signingkey=fake_gpg_key,319 owner=person, signing_key_fingerprint=fake_gpg_key.fingerprint,
320 signing_key_owner=fake_gpg_key.owner,
320 signedcode="Normally a signed CoC would go here.", active=True))321 signedcode="Normally a signed CoC would go here.", active=True))
321322
322323