Merge lp:~twom/launchpad/allow-none-in-snapbuild-metadata into lp:launchpad

Proposed by Tom Wardill
Status: Merged
Merged at revision: 18843
Proposed branch: lp:~twom/launchpad/allow-none-in-snapbuild-metadata
Merge into: lp:launchpad
Diff against target: 134 lines (+11/-29)
4 files modified
lib/lp/snappy/model/snapbuild.py (+2/-14)
lib/lp/snappy/model/snapbuildjob.py (+7/-1)
lib/lp/snappy/tests/test_snapbuild.py (+0/-12)
lib/lp/snappy/tests/test_snapbuildjob.py (+2/-2)
To merge this branch: bzr merge lp:~twom/launchpad/allow-none-in-snapbuild-metadata
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+361089@code.launchpad.net

Commit message

Set the metadata to {} on each access

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
1=== modified file 'lib/lp/snappy/model/snapbuild.py'
2--- lib/lp/snappy/model/snapbuild.py 2018-12-18 17:20:04 +0000
3+++ lib/lp/snappy/model/snapbuild.py 2018-12-18 18:24:19 +0000
4@@ -175,9 +175,7 @@
5
6 failure_count = Int(name='failure_count', allow_none=False)
7
8- # Private variable that is used by the `store_upload_metadata` to
9- # set as an empty dict rather than None, to handle pre-existing data.
10- _store_upload_metadata = JSON('store_upload_json_data', allow_none=True)
11+ store_upload_metadata = JSON('store_upload_json_data', allow_none=True)
12
13 def __init__(self, build_farm_job, requester, snap, archive,
14 distro_arch_series, pocket, channels, processor, virtualized,
15@@ -194,22 +192,12 @@
16 self.processor = processor
17 self.virtualized = virtualized
18 self.date_created = date_created
19- self._store_upload_metadata = store_upload_metadata
20+ self.store_upload_metadata = store_upload_metadata
21 if build_request is not None:
22 self.build_request_id = build_request.id
23 self.status = BuildStatus.NEEDSBUILD
24
25 @property
26- def store_upload_metadata(self):
27- if self._store_upload_metadata is None:
28- self._store_upload_metadata = {}
29- return self._store_upload_metadata
30-
31- @store_upload_metadata.setter
32- def store_upload_metadata(self, value):
33- self._store_upload_metadata = value
34-
35- @property
36 def build_request(self):
37 """See `ISnapBuild`."""
38 if self.build_request_id is not None:
39
40=== modified file 'lib/lp/snappy/model/snapbuildjob.py'
41--- lib/lp/snappy/model/snapbuildjob.py 2018-12-18 17:15:21 +0000
42+++ lib/lp/snappy/model/snapbuildjob.py 2018-12-18 18:24:19 +0000
43@@ -216,7 +216,7 @@
44 """See `ISnapStoreUploadJob`."""
45 intermediate = {}
46 intermediate.update(self.metadata)
47- intermediate.update(self.snapbuild.store_upload_metadata)
48+ intermediate.update(self.snapbuild.store_upload_metadata or {})
49 return intermediate
50
51 @property
52@@ -257,6 +257,8 @@
53 @store_url.setter
54 def store_url(self, url):
55 """See `ISnapStoreUploadJob`."""
56+ if self.snapbuild.store_upload_metadata is None:
57+ self.snapbuild.store_upload_metadata = {}
58 self.snapbuild.store_upload_metadata["store_url"] = url
59
60 @property
61@@ -267,6 +269,8 @@
62 @store_revision.setter
63 def store_revision(self, revision):
64 """See `ISnapStoreUploadJob`."""
65+ if self.snapbuild.store_upload_metadata is None:
66+ self.snapbuild.store_upload_metadata = {}
67 self.snapbuild.store_upload_metadata["store_revision"] = revision
68
69 @property
70@@ -276,6 +280,8 @@
71
72 @status_url.setter
73 def status_url(self, url):
74+ if self.snapbuild.store_upload_metadata is None:
75+ self.snapbuild.store_upload_metadata = {}
76 self.snapbuild.store_upload_metadata["status_url"] = url
77
78 # Ideally we'd just override Job._set_status or similar, but
79
80=== modified file 'lib/lp/snappy/tests/test_snapbuild.py'
81--- lib/lp/snappy/tests/test_snapbuild.py 2018-12-18 17:15:21 +0000
82+++ lib/lp/snappy/tests/test_snapbuild.py 2018-12-18 18:24:19 +0000
83@@ -35,7 +35,6 @@
84 from lp.buildmaster.interfaces.processor import IProcessorSet
85 from lp.registry.enums import PersonVisibility
86 from lp.services.config import config
87-from lp.services.database.interfaces import IStore
88 from lp.services.features.testing import FeatureFixture
89 from lp.services.job.interfaces.job import JobStatus
90 from lp.services.librarian.browser import ProxiedLibraryFileAlias
91@@ -50,7 +49,6 @@
92 SnapBuildStoreUploadStatus,
93 )
94 from lp.snappy.interfaces.snapbuildjob import ISnapStoreUploadJobSource
95-from lp.snappy.model.snapbuild import SnapBuild
96 from lp.soyuz.enums import ArchivePurpose
97 from lp.testing import (
98 ANONYMOUS,
99@@ -776,13 +774,3 @@
100 browser = self.getNonRedirectingBrowser(user=self.person)
101 for file_url in file_urls:
102 self.assertCanOpenRedirectedUrl(browser, file_url)
103-
104- def test_store_upload_metadata_existing_as_none(self):
105- db_build = self.factory.makeSnapBuild(requester=self.person)
106- unsecure_db_build = removeSecurityProxy(db_build)
107- unsecure_db_build._store_upload_metadata = None
108- store = IStore(SnapBuild)
109- store.flush()
110- loaded_build = store.find(SnapBuild, id=unsecure_db_build.id).one()
111- self.assertIsNone(loaded_build._store_upload_metadata)
112- self.assertIsNotNone(loaded_build.store_upload_metadata)
113
114=== modified file 'lib/lp/snappy/tests/test_snapbuildjob.py'
115--- lib/lp/snappy/tests/test_snapbuildjob.py 2018-12-18 17:15:21 +0000
116+++ lib/lp/snappy/tests/test_snapbuildjob.py 2018-12-18 18:24:19 +0000
117@@ -685,7 +685,7 @@
118 def test_with_snapbuild_metadata_as_none(self):
119 db_build = self.factory.makeSnapBuild()
120 unsecure_db_build = removeSecurityProxy(db_build)
121- unsecure_db_build._store_upload_metadata = None
122+ unsecure_db_build.store_upload_metadata = None
123 store = IStore(SnapBuild)
124 store.flush()
125 loaded_build = store.find(SnapBuild, id=unsecure_db_build.id).one()
126@@ -696,7 +696,7 @@
127 def test_with_snapbuild_metadata_as_none_set_status(self):
128 db_build = self.factory.makeSnapBuild()
129 unsecure_db_build = removeSecurityProxy(db_build)
130- unsecure_db_build._store_upload_metadata = None
131+ unsecure_db_build.store_upload_metadata = None
132 store = IStore(SnapBuild)
133 store.flush()
134 loaded_build = store.find(SnapBuild, id=unsecure_db_build.id).one()