Merge ~cjwatson/launchpad:modern-ztk into launchpad:master
- Git
- lp:~cjwatson/launchpad
- modern-ztk
- Merge into master
Status: | Merged |
---|---|
Approved by: | Colin Watson |
Approved revision: | ecf2fd6f9603113f5a58cb7bcd3b6da48947e8ff |
Merge reported by: | Otto Co-Pilot |
Merged at revision: | not available |
Proposed branch: | ~cjwatson/launchpad:modern-ztk |
Merge into: | launchpad:master |
Diff against target: |
743 lines (+196/-212) 18 files modified
constraints.txt (+155/-196) lib/lp/app/browser/launchpadform.py (+12/-1) lib/lp/app/doc/tales.txt (+1/-1) lib/lp/app/stories/basics/xx-lowercase-redirection.txt (+1/-1) lib/lp/bugs/stories/webservice/xx-bug-target.txt (+1/-1) lib/lp/registry/browser/distributionmirror.py (+1/-0) lib/lp/registry/browser/poll.py (+1/-0) lib/lp/registry/browser/team.py (+1/-0) lib/lp/scripts/helpers.py (+1/-1) lib/lp/services/messaging/tests/test_rabbit.py (+1/-1) lib/lp/services/verification/browser/logintoken.py (+1/-0) lib/lp/services/webapp/doc/test_adapter.txt (+1/-1) lib/lp/services/webapp/doc/webapp-authorization.txt (+1/-1) lib/lp/services/webapp/doc/webapp-publication.txt (+2/-2) lib/lp/services/webapp/publication.py (+6/-1) lib/lp/services/webapp/session.py (+2/-3) lib/lp/translations/browser/language.py (+1/-0) setup.py (+7/-2) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
William Grant | code | Approve | |
Review via email: mp+376781@code.launchpad.net |
Commit message
Upgrade ZTK packages to 2019-10-23 versions
Description of the change
We now maintain a branch of zope.session rather than freezing it at an old version, and we now track zope.app.* packages individually rather than via the long-gone zopeapp-
A few things needed to change at the same time as this upgrade:
* The signature of zope.formlib.
* transaction 2.0.1 removes ITransaction.
* We poke inside the implementation of transaction managers in a couple of places, and for those we need to adjust for the ThreadTransacti
* I upgraded launchpadlib to weaken its hosted-files test, which would otherwise fail with zope.publisher >= 4.2.2.
* I weakened a test in xx-bug-target.txt due to changes in zope.schema 4.6.0, as described in https:/
* A few minor details of things like rendering and exception arguments changed.
The new dependencies are in https:/
- ecf2fd6... by Colin Watson
-
Document odd txn.user syntax
Preview Diff
1 | diff --git a/constraints.txt b/constraints.txt | |||
2 | index 94b80d3..a4985d1 100644 | |||
3 | --- a/constraints.txt | |||
4 | +++ b/constraints.txt | |||
5 | @@ -1,197 +1,162 @@ | |||
8 | 1 | # ztk-versions.cfg from ZTK 1.1.6, with some upgrades | 1 | # ztk-versions.cfg from ZTK a9eb2093b5 (2019-10-23), with some upgrades |
9 | 2 | # --------------------------------------------------- | 2 | # --------------------------------------------------------------------- |
10 | 3 | 3 | ||
22 | 4 | zope.annotation==3.6.0 | 4 | zope.annotation==4.7.0 |
23 | 5 | zope.applicationcontrol==3.5.5 | 5 | zope.applicationcontrol==4.2.0 |
24 | 6 | zope.authentication==3.7.1 | 6 | zope.authentication==4.4.0 |
25 | 7 | zope.broken==3.6.0 | 7 | zope.browser==2.3 |
26 | 8 | zope.browser==1.3 | 8 | zope.browsermenu==4.4 |
27 | 9 | zope.browsermenu==3.9.1 | 9 | zope.browserpage==4.3.0 |
28 | 10 | zope.browserpage==3.12.2 | 10 | zope.browserresource==4.3 |
29 | 11 | zope.browserresource==3.12.0 | 11 | zope.cachedescriptors==4.3.1 |
30 | 12 | zope.cachedescriptors==3.5.1 | 12 | zope.catalog==4.2.1 |
20 | 13 | zope.catalog==3.8.2 | ||
21 | 14 | #zope.component==3.10.0 | ||
31 | 15 | # Tell pip about extras to work around https://github.com/pypa/pip/issues/3046 | 13 | # Tell pip about extras to work around https://github.com/pypa/pip/issues/3046 |
32 | 16 | # XXX cjwatson 2017-09-03: This should be fixed in pip 9.0.0, but apparently | 14 | # XXX cjwatson 2017-09-03: This should be fixed in pip 9.0.0, but apparently |
33 | 17 | # isn't. | 15 | # isn't. |
95 | 18 | # Upgrade from ZTK 1.1.6 for ZCML registration performance. | 16 | zope.component[hook,zcml]==4.5 |
96 | 19 | zope.component[hook,zcml]==3.11.0 | 17 | zope.componentvocabulary==2.2.0 |
97 | 20 | zope.componentvocabulary==1.0.1 | 18 | zope.configuration==4.3.1 |
98 | 21 | zope.configuration==3.7.4 | 19 | zope.container==4.2.2 |
99 | 22 | zope.container==3.12.0 | 20 | zope.contentprovider==4.2.1 |
100 | 23 | zope.contentprovider==3.7.2 | 21 | zope.contenttype==4.4 |
101 | 24 | zope.contenttype==3.5.5 | 22 | zope.copy==4.2 |
102 | 25 | zope.copy==3.5.0 | 23 | zope.copypastemove==4.1.0 |
103 | 26 | zope.copypastemove==3.8.0 | 24 | zope.datetime==4.2.0 |
104 | 27 | zope.datetime==3.4.1 | 25 | zope.deferredimport==4.3 |
105 | 28 | zope.deferredimport==3.5.3 | 26 | zope.deprecation==4.4.0 |
106 | 29 | zope.deprecation==3.4.1 | 27 | zope.dottedname==4.3 |
107 | 30 | zope.dottedname==3.4.6 | 28 | zope.dublincore==4.2.0 |
108 | 31 | zope.dublincore==3.8.2 | 29 | zope.error==4.5.0 |
109 | 32 | zope.error==3.7.4 | 30 | zope.event==4.4 |
110 | 33 | zope.event==3.5.2 | 31 | zope.exceptions==4.3 |
111 | 34 | zope.exceptions==3.6.2 | 32 | zope.filerepresentation==4.2.0 |
112 | 35 | zope.filerepresentation==3.6.1 | 33 | zope.formlib==4.6.0 |
113 | 36 | zope.formlib==4.0.6 | 34 | zope.hookable==4.2.0 |
114 | 37 | zope.hookable==3.4.1 | 35 | zope.i18n==4.6.2 |
115 | 38 | #zope.i18n==3.7.4 | 36 | zope.i18nmessageid==4.3.1 |
116 | 39 | zope.i18n==4.3.1 | 37 | zope.index==4.4.0 |
117 | 40 | zope.i18nmessageid==3.5.3 | 38 | zope.interface==4.6.0 |
118 | 41 | zope.index==3.6.4 | 39 | zope.intid==4.3.0 |
119 | 42 | #zope.interface==3.7.0 | 40 | zope.keyreference==4.2.0 |
120 | 43 | # Upgrade from ZTK 1.1.6 for ZCML registration performance. | 41 | zope.lifecycleevent==4.3 |
121 | 44 | zope.interface==4.4.3 | 42 | zope.location==4.2 |
122 | 45 | zope.intid==3.7.2 | 43 | zope.login==2.1.0 |
123 | 46 | zope.keyreference==3.6.4 | 44 | zope.mimetype==2.4.0 |
124 | 47 | zope.lifecycleevent==3.6.2 | 45 | zope.minmax==2.2.0 |
125 | 48 | zope.location==3.9.1 | 46 | zope.pagetemplate==4.4.1 |
126 | 49 | zope.login==1.0.0 | 47 | zope.password==4.3.1 |
127 | 50 | zope.mimetype==1.3.1 | 48 | zope.pluggableauth==2.3.0 |
128 | 51 | zope.minmax==1.1.2 | 49 | zope.principalannotation==4.3.0 |
129 | 52 | #zope.pagetemplate==3.5.2 | 50 | zope.principalregistry==4.2.0 |
130 | 53 | zope.pagetemplate==4.3.0 | 51 | zope.processlifetime==2.3.0 |
131 | 54 | zope.password==3.6.1 | 52 | zope.proxy==4.3.1 |
132 | 55 | zope.pluggableauth==1.2 | 53 | zope.ptresource==4.2.0 |
133 | 56 | zope.principalannotation==3.6.1 | 54 | zope.publisher==5.0.1 |
134 | 57 | zope.principalregistry==3.7.1 | 55 | zope.ramcache==2.3 |
135 | 58 | zope.processlifetime==1.0 | 56 | zope.schema==4.9.3 |
136 | 59 | zope.proxy==3.6.1 | 57 | zope.security==4.3.1 |
137 | 60 | zope.ptresource==3.9.0 | 58 | zope.securitypolicy==4.3.1 |
138 | 61 | zope.publisher==3.12.6 | 59 | zope.sendmail==5.0 |
139 | 62 | zope.ramcache==1.0 | 60 | #zope.session==4.3.0 |
140 | 63 | zope.schema==3.7.1 | 61 | # lp:~launchpad-committers/zope.session:launchpad |
141 | 64 | zope.security==3.8.3 | 62 | zope.session==4.3.0+lp1 |
142 | 65 | zope.securitypolicy==3.7.0 | 63 | zope.site==4.2.2 |
143 | 66 | zope.sendmail==3.7.5 | 64 | zope.size==4.3 |
144 | 67 | zope.sequencesort==3.4.0 | 65 | zope.structuredtext==4.3 |
145 | 68 | zope.server==3.8.6 | 66 | zope.tal==4.4 |
146 | 69 | #zope.session==3.9.5 | 67 | zope.tales==5.0 |
86 | 70 | # XXX: downgraded to avoid 3.9.2 cookie calculation changes | ||
87 | 71 | zope.session==3.9.1 | ||
88 | 72 | zope.site==3.9.2 | ||
89 | 73 | zope.size==3.4.1 | ||
90 | 74 | zope.structuredtext==3.5.1 | ||
91 | 75 | #zope.tal==3.5.2 | ||
92 | 76 | zope.tal==4.3.0 | ||
93 | 77 | zope.tales==3.5.3 | ||
94 | 78 | #zope.testing==3.10.3 | ||
147 | 79 | zope.testing==4.7 | 68 | zope.testing==4.7 |
149 | 80 | #zope.testrunner==4.0.4 | 69 | #zope.testrunner==5.0 |
150 | 81 | # lp:~launchpad-committers/zope.testrunner:launchpad | 70 | # lp:~launchpad-committers/zope.testrunner:launchpad |
151 | 82 | zope.testrunner[subunit]==5.1+lp2 | 71 | zope.testrunner[subunit]==5.1+lp2 |
154 | 83 | zope.traversing==3.14.0 | 72 | zope.traversing==4.3.1 |
155 | 84 | zope.viewlet==3.7.2 | 73 | zope.viewlet==4.2.1 |
156 | 85 | 74 | ||
158 | 86 | # Deprecating | 75 | # Direct dependencies |
159 | 76 | BTrees==4.5.1 | ||
160 | 77 | persistent==4.4.3 | ||
161 | 78 | python-gettext==4.0 | ||
162 | 79 | pytz==2018.9 | ||
163 | 80 | setuptools==41.0.0 | ||
164 | 81 | six==1.12.0 | ||
165 | 82 | transaction==2.4.0 | ||
166 | 87 | 83 | ||
186 | 88 | # Dependencies | 84 | # zope.password needs these |
187 | 89 | #distribute==0.6.36 | 85 | bcrypt==3.1.6 |
188 | 90 | distribute==0.7.3 | 86 | cffi==1.12.2 |
189 | 91 | #docutils==0.7 | 87 | pycparser==2.19 |
190 | 92 | docutils==0.14 | 88 | |
191 | 93 | Jinja2==2.5.5 | 89 | # Python2-only |
192 | 94 | mechanize==0.2.5 | 90 | zope.untrustedpython==4.0.0 |
193 | 95 | Paste==1.7.5.1 | 91 | # Required by zope.untrustedpython |
175 | 96 | PasteDeploy==1.3.4 | ||
176 | 97 | PasteScript==1.7.5 | ||
177 | 98 | py==1.4.8 | ||
178 | 99 | #Pygments==1.4 | ||
179 | 100 | Pygments==2.2.0 | ||
180 | 101 | #python-gettext==1.0 | ||
181 | 102 | python-gettext==3.0 | ||
182 | 103 | #python-subunit==0.0.7 | ||
183 | 104 | python-subunit==1.3.0 | ||
184 | 105 | #pytz==2014.10 | ||
185 | 106 | pytz==2017.2 | ||
194 | 107 | RestrictedPython==3.6.0 | 92 | RestrictedPython==3.6.0 |
200 | 108 | #setuptools==0.6c11 | 93 | |
201 | 109 | setuptools==36.4.0 | 94 | # Testing dependencies |
202 | 110 | #Sphinx==1.0.8 | 95 | ZConfig==3.4.0 |
203 | 111 | Sphinx==1.6.5 | 96 | ZODB==5.5.1 |
204 | 112 | #testtools==0.9.12 | 97 | argparse==1.4.0 |
205 | 98 | colorama==0.4.1 | ||
206 | 99 | extras==1.0.0 | ||
207 | 100 | fixtures==3.0.0 | ||
208 | 101 | linecache2==1.0.0 | ||
209 | 102 | manuel==1.10.1 | ||
210 | 103 | pbr==5.1.3 | ||
211 | 104 | pyparsing==2.4.0 | ||
212 | 105 | python-mimeparse==1.6.0 | ||
213 | 106 | python-subunit==1.3.0 | ||
214 | 113 | testtools==2.3.0 | 107 | testtools==2.3.0 |
227 | 114 | transaction==1.1.1 | 108 | traceback2==1.4.0 |
228 | 115 | z3c.recipe.sphinxdoc==0.0.8 | 109 | unittest2==1.1.0 |
229 | 116 | zc.buildout==1.7.1 | 110 | zc.lockfile==1.4 |
230 | 117 | zc.lockfile==1.0.2 | 111 | zdaemon==4.3 |
231 | 118 | #ZConfig==2.8.0 | 112 | zodbpickle==1.0.3 |
220 | 119 | ZConfig==2.9.1dev-20110728 | ||
221 | 120 | zc.recipe.egg==1.3.2 | ||
222 | 121 | zc.recipe.testrunner==1.4.0 | ||
223 | 122 | zc.resourcelibrary==1.3.4 | ||
224 | 123 | zdaemon==2.0.7 | ||
225 | 124 | ZODB3==3.10.5 | ||
226 | 125 | zope.mkzeoinstance==3.9.5 | ||
232 | 126 | 113 | ||
233 | 127 | # toolchain | ||
234 | 128 | #argparse==1.1 | ||
235 | 129 | argparse==1.2.1 | ||
236 | 130 | coverage==3.5.2 | ||
237 | 131 | lxml==2.2.8 | ||
238 | 132 | mr.developer==1.25 | ||
239 | 133 | nose==1.1.2 | ||
240 | 134 | tl.eggdeps==0.4 | ||
241 | 135 | z3c.checkversions==0.4.1 | ||
242 | 136 | z3c.recipe.compattest==0.13.1 | ||
243 | 137 | z3c.recipe.depgraph==0.5 | ||
244 | 138 | z3c.recipe.scripts==1.0.1 | ||
245 | 139 | zope.kgs==1.2.0 | ||
246 | 140 | 114 | ||
249 | 141 | # zopeapp-versions.cfg from ZTK 1.1.6, with some upgrades | 115 | # Testing tools |
250 | 142 | # ------------------------------------------------------- | 116 | coverage==4.5.3 |
251 | 117 | nose==1.3.7 | ||
252 | 143 | 118 | ||
264 | 144 | # ZopeApp | 119 | # Documentation dependencies |
265 | 145 | zc.sourcefactory==0.7.0 | 120 | # We have to keep a version < 2 to still support Python 2 |
266 | 146 | zope.app.applicationcontrol==3.5.10 | 121 | Sphinx==1.8.5 |
267 | 147 | zope.app.appsetup==3.15.0 | 122 | docutils==0.14 |
268 | 148 | zope.app.debug==3.4.1 | 123 | imagesize==1.1.0 |
269 | 149 | zope.app.http==3.9.0 | 124 | alabaster==0.7.12 |
270 | 150 | zope.app.publication==3.12.0 | 125 | babel==2.6.0 |
271 | 151 | #zope.app.wsgi==3.10.0 | 126 | Jinja2==2.10.1 |
272 | 152 | zope.app.wsgi==3.15.0 | 127 | MarkupSafe==1.1.1 |
273 | 153 | #zope.testbrowser==3.10.4 | 128 | Pygments==2.3.1 |
274 | 154 | zope.testbrowser[wsgi]==5.5.1 | 129 | snowballstemmer==1.2.1 |
275 | 130 | lxml==4.4.1 | ||
276 | 131 | repoze.sphinx.autointerface==0.8 | ||
277 | 132 | #requests==2.21.0 | ||
278 | 133 | requests==2.22.0 | ||
279 | 134 | certifi==2019.3.9 | ||
280 | 135 | #urllib3==1.24.1 | ||
281 | 136 | urllib3==1.25.3 | ||
282 | 137 | idna==2.8 | ||
283 | 138 | chardet==3.0.4 | ||
284 | 139 | sphinxcontrib-programoutput==0.14 | ||
285 | 140 | sphinxcontrib-websupport==1.1.0 | ||
286 | 141 | sphinx-rtd-theme==0.4.3 | ||
287 | 142 | packaging==19.0 | ||
288 | 143 | typing==3.6.6 | ||
289 | 144 | z3c.recipe.sphinxdoc==1.1.0 | ||
290 | 155 | 145 | ||
323 | 156 | # Deprecated | 146 | # ZTK buildout dependencies |
324 | 157 | roman==1.4.0 | 147 | collective.recipe.cmd==0.11 |
325 | 158 | #wsgi-intercept==0.4 | 148 | mr.developer==2.0.0 |
326 | 159 | # Upgrade from ZTK 1.1.5 to intercept lazr.restfulclient. | 149 | z3c.checkversions==1.1 |
327 | 160 | wsgi-intercept==0.5.1 | 150 | z3c.recipe.compattest==1.0 |
328 | 161 | zope.app.authentication==3.9.0 | 151 | zc.buildout==2.13.1 |
329 | 162 | zope.app.basicskin==3.5.1 | 152 | zc.recipe.egg==2.0.7 |
330 | 163 | zope.app.broken==3.6.0 | 153 | zc.recipe.testrunner==2.0.0 |
299 | 164 | zope.app.component==3.9.3 | ||
300 | 165 | zope.app.container==3.9.2 | ||
301 | 166 | zope.app.content==3.5.1 | ||
302 | 167 | zope.app.dependable==3.5.1 | ||
303 | 168 | zope.app.error==3.5.3 | ||
304 | 169 | zope.app.exception==3.6.3 | ||
305 | 170 | zope.app.folder==3.5.2 | ||
306 | 171 | zope.app.form==4.0.2 | ||
307 | 172 | zope.app.generations==3.7.1 | ||
308 | 173 | zope.app.i18n==3.6.4 | ||
309 | 174 | zope.app.locales==3.6.2 | ||
310 | 175 | zope.app.localpermission==3.7.2 | ||
311 | 176 | zope.app.pagetemplate==3.11.2 | ||
312 | 177 | zope.app.principalannotation==3.7.0 | ||
313 | 178 | zope.app.publisher==3.10.2 | ||
314 | 179 | zope.app.renderer==3.5.1 | ||
315 | 180 | zope.app.rotterdam==3.5.3 | ||
316 | 181 | zope.app.schema==3.5.0 | ||
317 | 182 | zope.app.security==3.7.5 | ||
318 | 183 | #zope.app.testing==3.8.1 | ||
319 | 184 | zope.app.testing==3.10.0 | ||
320 | 185 | zope.app.zcmlfiles==3.7.1 | ||
321 | 186 | zope.app.zopeappgenerations==3.6.1 | ||
322 | 187 | zope.generations==3.7.1 | ||
331 | 188 | 154 | ||
332 | 189 | # Launchpad | 155 | # Launchpad |
333 | 190 | # --------- | 156 | # --------- |
334 | 191 | 157 | ||
335 | 192 | # Alphabetical, case-insensitive, please! :-) | 158 | # Alphabetical, case-insensitive, please! :-) |
336 | 193 | 159 | ||
337 | 194 | alabaster==0.7.10 | ||
338 | 195 | # lp:~launchpad/ampoule/lp | 160 | # lp:~launchpad/ampoule/lp |
339 | 196 | # post1 Don't add a process back to the ready set if it received an error | 161 | # post1 Don't add a process back to the ready set if it received an error |
340 | 197 | # such as a timeout. | 162 | # such as a timeout. |
341 | @@ -208,7 +173,6 @@ Automat==0.6.0 | |||
342 | 208 | Babel==2.5.1 | 173 | Babel==2.5.1 |
343 | 209 | backports.functools-lru-cache==1.5 | 174 | backports.functools-lru-cache==1.5 |
344 | 210 | backports.lzma==0.0.3 | 175 | backports.lzma==0.0.3 |
345 | 211 | bcrypt==3.1.4 | ||
346 | 212 | BeautifulSoup==3.2.1 | 176 | BeautifulSoup==3.2.1 |
347 | 213 | beautifulsoup4[lxml]==4.7.1 | 177 | beautifulsoup4[lxml]==4.7.1 |
348 | 214 | billiard==3.5.0.5 | 178 | billiard==3.5.0.5 |
349 | @@ -216,10 +180,7 @@ bson==0.3.3 | |||
350 | 216 | # lp:~launchpad/bzr/lp | 180 | # lp:~launchpad/bzr/lp |
351 | 217 | bzr==2.6.0.lp.4 | 181 | bzr==2.6.0.lp.4 |
352 | 218 | celery==4.1.1 | 182 | celery==4.1.1 |
353 | 219 | certifi==2019.3.9 | ||
354 | 220 | cffi==1.11.2 | ||
355 | 221 | Chameleon==2.11 | 183 | Chameleon==2.11 |
356 | 222 | chardet==3.0.4 | ||
357 | 223 | constantly==15.1.0 | 184 | constantly==15.1.0 |
358 | 224 | cookies==2.2.1 | 185 | cookies==2.2.1 |
359 | 225 | cryptography==2.7 | 186 | cryptography==2.7 |
360 | @@ -235,10 +196,8 @@ dulwich==0.18.6 | |||
361 | 235 | elementtree==1.2.6-20050316 | 196 | elementtree==1.2.6-20050316 |
362 | 236 | enum34==1.1.6 | 197 | enum34==1.1.6 |
363 | 237 | epydoc==3.0.1 | 198 | epydoc==3.0.1 |
364 | 238 | extras==1.0.0 | ||
365 | 239 | feedparser==5.2.1 | 199 | feedparser==5.2.1 |
366 | 240 | feedvalidator==0.0.0DEV-r1049 | 200 | feedvalidator==0.0.0DEV-r1049 |
367 | 241 | fixtures==3.0.0 | ||
368 | 242 | FormEncode==1.2.4 | 201 | FormEncode==1.2.4 |
369 | 243 | futures==3.2.0 | 202 | futures==3.2.0 |
370 | 244 | geoip2==2.9.0 | 203 | geoip2==2.9.0 |
371 | @@ -247,8 +206,6 @@ gunicorn==19.8.1 | |||
372 | 247 | html5browser==0.0.9 | 206 | html5browser==0.0.9 |
373 | 248 | httplib2==0.8 | 207 | httplib2==0.8 |
374 | 249 | hyperlink==18.0.0 | 208 | hyperlink==18.0.0 |
375 | 250 | idna==2.6 | ||
376 | 251 | imagesize==0.7.1 | ||
377 | 252 | importlib==1.0.2 | 209 | importlib==1.0.2 |
378 | 253 | importlib-resources==0.5 | 210 | importlib-resources==0.5 |
379 | 254 | incremental==17.5.0 | 211 | incremental==17.5.0 |
380 | @@ -259,7 +216,7 @@ jsautobuild==0.2 | |||
381 | 259 | keyring==0.6.2 | 216 | keyring==0.6.2 |
382 | 260 | kombu==4.4.0 | 217 | kombu==4.4.0 |
383 | 261 | launchpad-buildd==159 | 218 | launchpad-buildd==159 |
385 | 262 | launchpadlib==1.10.7 | 219 | launchpadlib==1.10.9 |
386 | 263 | lazr.authentication==0.1.1 | 220 | lazr.authentication==0.1.1 |
387 | 264 | lazr.batchnavigator==1.3.0 | 221 | lazr.batchnavigator==1.3.0 |
388 | 265 | lazr.config==2.2.2 | 222 | lazr.config==2.2.2 |
389 | @@ -275,7 +232,6 @@ lazr.uri==1.0.3 | |||
390 | 275 | libnacl==1.3.6 | 232 | libnacl==1.3.6 |
391 | 276 | lpjsmin==0.5 | 233 | lpjsmin==0.5 |
392 | 277 | m2r==0.1.13 | 234 | m2r==0.1.13 |
393 | 278 | manuel==1.7.2 | ||
394 | 279 | Markdown==2.3.1 | 235 | Markdown==2.3.1 |
395 | 280 | martian==0.11 | 236 | martian==0.11 |
396 | 281 | maxminddb==1.5.1 | 237 | maxminddb==1.5.1 |
397 | @@ -294,15 +250,16 @@ oops-wsgi==0.0.8 | |||
398 | 294 | ordereddict==1.1 | 250 | ordereddict==1.1 |
399 | 295 | oslo.config==1.3.0 | 251 | oslo.config==1.3.0 |
400 | 296 | paramiko==2.4.1 | 252 | paramiko==2.4.1 |
401 | 253 | Paste==1.7.5.1 | ||
402 | 254 | PasteDeploy==1.3.4 | ||
403 | 255 | PasteScript==1.7.5 | ||
404 | 297 | pathlib2==2.3.2 | 256 | pathlib2==2.3.2 |
405 | 298 | pbr==0.11.1 | ||
406 | 299 | pgbouncer==0.0.8 | 257 | pgbouncer==0.0.8 |
407 | 300 | prettytable==0.7.2 | 258 | prettytable==0.7.2 |
408 | 301 | psutil==5.4.2 | 259 | psutil==5.4.2 |
409 | 302 | psycopg2==2.7.4 | 260 | psycopg2==2.7.4 |
410 | 303 | pyasn1==0.4.2 | 261 | pyasn1==0.4.2 |
411 | 304 | pyasn1-modules==0.2.1 | 262 | pyasn1-modules==0.2.1 |
412 | 305 | pycparser==2.18 | ||
413 | 306 | # lp:~launchpad/pygpgme/pthread | 263 | # lp:~launchpad/pygpgme/pthread |
414 | 307 | # lp1 Link against libgpgme-pthread for thread-safety. | 264 | # lp1 Link against libgpgme-pthread for thread-safety. |
415 | 308 | pygpgme==0.3+lp1 | 265 | pygpgme==0.3+lp1 |
416 | @@ -316,7 +273,6 @@ python-dateutil==1.5 | |||
417 | 316 | python-debian==0.1.32 | 273 | python-debian==0.1.32 |
418 | 317 | python-keystoneclient==0.7.1 | 274 | python-keystoneclient==0.7.1 |
419 | 318 | python-memcached==1.58 | 275 | python-memcached==1.58 |
420 | 319 | python-mimeparse==0.1.4 | ||
421 | 320 | # XXX: deryck 2012-08-10 | 276 | # XXX: deryck 2012-08-10 |
422 | 321 | # See lp:~deryck/python-openid/python-openid-fix1034376 which | 277 | # See lp:~deryck/python-openid/python-openid-fix1034376 which |
423 | 322 | # reapplied a patch from wgrant to get codehosting going again. | 278 | # reapplied a patch from wgrant to get codehosting going again. |
424 | @@ -324,7 +280,6 @@ python-openid==2.2.5-fix1034376 | |||
425 | 324 | python-swiftclient==2.0.3 | 280 | python-swiftclient==2.0.3 |
426 | 325 | PyYAML==3.10 | 281 | PyYAML==3.10 |
427 | 326 | rabbitfixture==0.4.2 | 282 | rabbitfixture==0.4.2 |
428 | 327 | requests==2.22.0 | ||
429 | 328 | requests-file==1.4.3 | 283 | requests-file==1.4.3 |
430 | 329 | requests-toolbelt==0.9.1 | 284 | requests-toolbelt==0.9.1 |
431 | 330 | responses==0.9.0 | 285 | responses==0.9.0 |
432 | @@ -335,11 +290,8 @@ setuptools-git==1.2 | |||
433 | 335 | setuptools-scm==1.15.7 | 290 | setuptools-scm==1.15.7 |
434 | 336 | simplejson==3.8.2 | 291 | simplejson==3.8.2 |
435 | 337 | SimpleTAL==4.3 | 292 | SimpleTAL==4.3 |
436 | 338 | six==1.12.0 | ||
437 | 339 | snowballstemmer==1.2.1 | ||
438 | 340 | soupmatchers==0.4 | 293 | soupmatchers==0.4 |
439 | 341 | soupsieve==1.9 | 294 | soupsieve==1.9 |
440 | 342 | sphinxcontrib-websupport==1.0.1 | ||
441 | 343 | # lp:~launchpad-committers/storm/lp | 295 | # lp:~launchpad-committers/storm/lp |
442 | 344 | storm==0.21.0.99+lp413 | 296 | storm==0.21.0.99+lp413 |
443 | 345 | subprocess32==3.2.6 | 297 | subprocess32==3.2.6 |
444 | @@ -352,9 +304,6 @@ Twisted[conch,tls]==19.2.1 | |||
445 | 352 | txAMQP==0.6.2 | 304 | txAMQP==0.6.2 |
446 | 353 | txfixtures==0.4.2 | 305 | txfixtures==0.4.2 |
447 | 354 | txpkgupload==0.2 | 306 | txpkgupload==0.2 |
448 | 355 | typing==3.6.2 | ||
449 | 356 | unittest2==1.1.0 | ||
450 | 357 | urllib3==1.25.3 | ||
451 | 358 | van.testing==3.0.0 | 307 | van.testing==3.0.0 |
452 | 359 | vine==1.1.4 | 308 | vine==1.1.4 |
453 | 360 | virtualenv-tools3==2.0.0 | 309 | virtualenv-tools3==2.0.0 |
454 | @@ -363,12 +312,22 @@ waitress==1.3.1 | |||
455 | 363 | WebOb==1.8.5 | 312 | WebOb==1.8.5 |
456 | 364 | WebTest==2.0.33 | 313 | WebTest==2.0.33 |
457 | 365 | wheel==0.29.0 | 314 | wheel==0.29.0 |
458 | 315 | wsgi-intercept==0.5.1 | ||
459 | 366 | WSGIProxy2==0.4.6 | 316 | WSGIProxy2==0.4.6 |
460 | 367 | wsgiref==0.1.2 | 317 | wsgiref==0.1.2 |
461 | 368 | z3c.pt==2.2.3 | 318 | z3c.pt==2.2.3 |
462 | 369 | z3c.ptcompat==0.5.7 | 319 | z3c.ptcompat==0.5.7 |
463 | 370 | zc.zservertracelog==1.3.2 | 320 | zc.zservertracelog==1.3.2 |
467 | 371 | # Not in ZTK 1.1.5 | 321 | zope.app.applicationcontrol==4.0.0 |
468 | 372 | zope.app.server==3.6.0 | 322 | zope.app.appsetup==4.1.0 |
469 | 373 | # Not in ZTK 1.1.5 (extracted from zope.app.schema) | 323 | zope.app.debug==3.4.1 |
470 | 324 | zope.app.dependable==3.5.1 | ||
471 | 325 | zope.app.http==4.0.1 | ||
472 | 326 | zope.app.pagetemplate==3.11.2 | ||
473 | 327 | zope.app.publication==4.3.1 | ||
474 | 328 | zope.app.publisher==3.10.2 | ||
475 | 329 | zope.app.server==4.0.0 | ||
476 | 330 | zope.app.wsgi[testlayer]==4.1.0 | ||
477 | 331 | zope.server==3.8.6 | ||
478 | 332 | zope.testbrowser==5.5.1 | ||
479 | 374 | zope.vocabularyregistry==1.0.0 | 333 | zope.vocabularyregistry==1.0.0 |
480 | diff --git a/lib/lp/app/browser/launchpadform.py b/lib/lp/app/browser/launchpadform.py | |||
481 | index e676414..ac6dd15 100644 | |||
482 | --- a/lib/lp/app/browser/launchpadform.py | |||
483 | +++ b/lib/lp/app/browser/launchpadform.py | |||
484 | @@ -227,6 +227,16 @@ class LaunchpadFormView(LaunchpadView): | |||
485 | 227 | return {} | 227 | return {} |
486 | 228 | 228 | ||
487 | 229 | @property | 229 | @property |
488 | 230 | def invariant_context(self): | ||
489 | 231 | """The context against which to check form invariants. | ||
490 | 232 | |||
491 | 233 | If None, invariants will only be checked against values in the form | ||
492 | 234 | itself. This is useful for forms that create new objects, since | ||
493 | 235 | their context may not be adaptable to their schema. | ||
494 | 236 | """ | ||
495 | 237 | return self.context | ||
496 | 238 | |||
497 | 239 | @property | ||
498 | 230 | def action_url(self): | 240 | def action_url(self): |
499 | 231 | """Set the default action URL for the form.""" | 241 | """Set the default action URL for the form.""" |
500 | 232 | 242 | ||
501 | @@ -320,7 +330,8 @@ class LaunchpadFormView(LaunchpadView): | |||
502 | 320 | widgets = form.Widgets(widgets, len(self.prefix) + 1) | 330 | widgets = form.Widgets(widgets, len(self.prefix) + 1) |
503 | 321 | for error in form.getWidgetsData(widgets, self.prefix, data): | 331 | for error in form.getWidgetsData(widgets, self.prefix, data): |
504 | 322 | self.errors.append(error) | 332 | self.errors.append(error) |
506 | 323 | for error in form.checkInvariants(self.form_fields, data): | 333 | for error in form.checkInvariants( |
507 | 334 | self.form_fields, data, self.invariant_context): | ||
508 | 324 | self.addError(error) | 335 | self.addError(error) |
509 | 325 | return self.errors | 336 | return self.errors |
510 | 326 | 337 | ||
511 | diff --git a/lib/lp/app/doc/tales.txt b/lib/lp/app/doc/tales.txt | |||
512 | index 265ca25..cc7606e 100644 | |||
513 | --- a/lib/lp/app/doc/tales.txt | |||
514 | +++ b/lib/lp/app/doc/tales.txt | |||
515 | @@ -1379,7 +1379,7 @@ Queries about permissions that don't exist will raise an exception: | |||
516 | 1379 | >>> test_tales('person/required:mushroom.Badger', person=mark) | 1379 | >>> test_tales('person/required:mushroom.Badger', person=mark) |
517 | 1380 | Traceback (most recent call last): | 1380 | Traceback (most recent call last): |
518 | 1381 | ... | 1381 | ... |
520 | 1382 | ValueError: ('Undefined permission id', 'mushroom.Badger') | 1382 | ValueError: ('Undefined permission ID', 'mushroom.Badger') |
521 | 1383 | 1383 | ||
522 | 1384 | 1384 | ||
523 | 1385 | The somevalue/enumvalue:ENUMVALUE helper | 1385 | The somevalue/enumvalue:ENUMVALUE helper |
524 | diff --git a/lib/lp/app/stories/basics/xx-lowercase-redirection.txt b/lib/lp/app/stories/basics/xx-lowercase-redirection.txt | |||
525 | index bd29394..41c3e40 100644 | |||
526 | --- a/lib/lp/app/stories/basics/xx-lowercase-redirection.txt | |||
527 | +++ b/lib/lp/app/stories/basics/xx-lowercase-redirection.txt | |||
528 | @@ -34,4 +34,4 @@ When doing a POST to an invalid URL, we get an error: | |||
529 | 34 | ... """) | 34 | ... """) |
530 | 35 | HTTP/1.1 500 Internal Server Error | 35 | HTTP/1.1 500 Internal Server Error |
531 | 36 | ... | 36 | ... |
533 | 37 | </ul>POSTToNonCanonicalURL... | 37 | </ul><p>POSTToNonCanonicalURL... |
534 | diff --git a/lib/lp/bugs/stories/webservice/xx-bug-target.txt b/lib/lp/bugs/stories/webservice/xx-bug-target.txt | |||
535 | index f0e1076..b49afd2 100644 | |||
536 | --- a/lib/lp/bugs/stories/webservice/xx-bug-target.txt | |||
537 | +++ b/lib/lp/bugs/stories/webservice/xx-bug-target.txt | |||
538 | @@ -111,7 +111,7 @@ Official tags must conform to the same format as ordinary tags. | |||
539 | 111 | ... tag='an invalid tag !!!')) | 111 | ... tag='an invalid tag !!!')) |
540 | 112 | HTTP/1.1 400 Bad Request | 112 | HTTP/1.1 400 Bad Request |
541 | 113 | ... | 113 | ... |
543 | 114 | tag: an invalid tag !!! | 114 | tag: ...an invalid tag !!!... |
544 | 115 | 115 | ||
545 | 116 | We can also access official tags as a list. | 116 | We can also access official tags as a list. |
546 | 117 | 117 | ||
547 | diff --git a/lib/lp/registry/browser/distributionmirror.py b/lib/lp/registry/browser/distributionmirror.py | |||
548 | index f13cc5e..fd671a0 100644 | |||
549 | --- a/lib/lp/registry/browser/distributionmirror.py | |||
550 | +++ b/lib/lp/registry/browser/distributionmirror.py | |||
551 | @@ -211,6 +211,7 @@ class DistributionMirrorAddView(LaunchpadFormView): | |||
552 | 211 | "ftp_base_url", "rsync_base_url", "speed", "country", "content", | 211 | "ftp_base_url", "rsync_base_url", "speed", "country", "content", |
553 | 212 | "official_candidate", | 212 | "official_candidate", |
554 | 213 | ] | 213 | ] |
555 | 214 | invariant_context = None | ||
556 | 214 | 215 | ||
557 | 215 | @property | 216 | @property |
558 | 216 | def label(self): | 217 | def label(self): |
559 | diff --git a/lib/lp/registry/browser/poll.py b/lib/lp/registry/browser/poll.py | |||
560 | index c75a204..83d92b8 100644 | |||
561 | --- a/lib/lp/registry/browser/poll.py | |||
562 | +++ b/lib/lp/registry/browser/poll.py | |||
563 | @@ -396,6 +396,7 @@ class PollAddView(LaunchpadFormView): | |||
564 | 396 | schema = IPoll | 396 | schema = IPoll |
565 | 397 | field_names = ["name", "title", "proposition", "allowspoilt", "dateopens", | 397 | field_names = ["name", "title", "proposition", "allowspoilt", "dateopens", |
566 | 398 | "datecloses"] | 398 | "datecloses"] |
567 | 399 | invariant_context = None | ||
568 | 399 | 400 | ||
569 | 400 | page_title = 'New poll' | 401 | page_title = 'New poll' |
570 | 401 | 402 | ||
571 | diff --git a/lib/lp/registry/browser/team.py b/lib/lp/registry/browser/team.py | |||
572 | index 5a79d28..ba79b6c 100644 | |||
573 | --- a/lib/lp/registry/browser/team.py | |||
574 | +++ b/lib/lp/registry/browser/team.py | |||
575 | @@ -999,6 +999,7 @@ class TeamAddView(TeamFormMixin, HasRenewalPolicyMixin, LaunchpadFormView): | |||
576 | 999 | """View for adding a new team.""" | 999 | """View for adding a new team.""" |
577 | 1000 | 1000 | ||
578 | 1001 | schema = ITeam | 1001 | schema = ITeam |
579 | 1002 | invariant_context = None | ||
580 | 1002 | page_title = 'Register a new team in Launchpad' | 1003 | page_title = 'Register a new team in Launchpad' |
581 | 1003 | label = page_title | 1004 | label = page_title |
582 | 1004 | 1005 | ||
583 | diff --git a/lib/lp/scripts/helpers.py b/lib/lp/scripts/helpers.py | |||
584 | index 38583a6..a534c6c 100644 | |||
585 | --- a/lib/lp/scripts/helpers.py | |||
586 | +++ b/lib/lp/scripts/helpers.py | |||
587 | @@ -78,7 +78,7 @@ class TransactionFreeOperation: | |||
588 | 78 | 78 | ||
589 | 79 | @staticmethod | 79 | @staticmethod |
590 | 80 | def any_active_transactions(): | 80 | def any_active_transactions(): |
592 | 81 | return transaction.manager._txn | 81 | return transaction.manager.manager._txn |
593 | 82 | 82 | ||
594 | 83 | @classmethod | 83 | @classmethod |
595 | 84 | def __enter__(cls): | 84 | def __enter__(cls): |
596 | diff --git a/lib/lp/services/messaging/tests/test_rabbit.py b/lib/lp/services/messaging/tests/test_rabbit.py | |||
597 | index ae5a89c..6cd9f99 100644 | |||
598 | --- a/lib/lp/services/messaging/tests/test_rabbit.py | |||
599 | +++ b/lib/lp/services/messaging/tests/test_rabbit.py | |||
600 | @@ -391,7 +391,7 @@ class TestRabbit(RabbitTestCase): | |||
601 | 391 | 391 | ||
602 | 392 | def get_synced_sessions(self): | 392 | def get_synced_sessions(self): |
603 | 393 | try: | 393 | try: |
605 | 394 | syncs_set = transaction.manager._synchs | 394 | syncs_set = transaction.manager.manager._synchs |
606 | 395 | except KeyError: | 395 | except KeyError: |
607 | 396 | return set() | 396 | return set() |
608 | 397 | else: | 397 | else: |
609 | diff --git a/lib/lp/services/verification/browser/logintoken.py b/lib/lp/services/verification/browser/logintoken.py | |||
610 | index b17c6b8..c15321d 100644 | |||
611 | --- a/lib/lp/services/verification/browser/logintoken.py | |||
612 | +++ b/lib/lp/services/verification/browser/logintoken.py | |||
613 | @@ -175,6 +175,7 @@ class ClaimTeamView( | |||
614 | 175 | field_names = [ | 175 | field_names = [ |
615 | 176 | 'teamowner', 'display_name', 'description', 'membership_policy', | 176 | 'teamowner', 'display_name', 'description', 'membership_policy', |
616 | 177 | 'defaultmembershipperiod', 'renewal_policy', 'defaultrenewalperiod'] | 177 | 'defaultmembershipperiod', 'renewal_policy', 'defaultrenewalperiod'] |
617 | 178 | invariant_context = None | ||
618 | 178 | label = 'Claim Launchpad team' | 179 | label = 'Claim Launchpad team' |
619 | 179 | custom_widget_description = CustomWidgetFactory( | 180 | custom_widget_description = CustomWidgetFactory( |
620 | 180 | TextAreaWidget, height=10, width=30) | 181 | TextAreaWidget, height=10, width=30) |
621 | diff --git a/lib/lp/services/webapp/doc/test_adapter.txt b/lib/lp/services/webapp/doc/test_adapter.txt | |||
622 | index 2adc5fe..656e4b1 100644 | |||
623 | --- a/lib/lp/services/webapp/doc/test_adapter.txt | |||
624 | +++ b/lib/lp/services/webapp/doc/test_adapter.txt | |||
625 | @@ -367,7 +367,7 @@ transaction will be doomed: | |||
626 | 367 | >>> transaction.commit() | 367 | >>> transaction.commit() |
627 | 368 | Traceback (most recent call last): | 368 | Traceback (most recent call last): |
628 | 369 | ... | 369 | ... |
630 | 370 | DoomedTransaction | 370 | DoomedTransaction: transaction doomed, cannot commit |
631 | 371 | <BLANKLINE> | 371 | <BLANKLINE> |
632 | 372 | 372 | ||
633 | 373 | Cleanup: | 373 | Cleanup: |
634 | diff --git a/lib/lp/services/webapp/doc/webapp-authorization.txt b/lib/lp/services/webapp/doc/webapp-authorization.txt | |||
635 | index 0a116c8..7269cbd 100644 | |||
636 | --- a/lib/lp/services/webapp/doc/webapp-authorization.txt | |||
637 | +++ b/lib/lp/services/webapp/doc/webapp-authorization.txt | |||
638 | @@ -25,7 +25,7 @@ If the permission doesn't exist, it raises an error: | |||
639 | 25 | >>> check_permission('mushroom.Badger', sample_person) | 25 | >>> check_permission('mushroom.Badger', sample_person) |
640 | 26 | Traceback (most recent call last): | 26 | Traceback (most recent call last): |
641 | 27 | ... | 27 | ... |
643 | 28 | ValueError: ('Undefined permission id', 'mushroom.Badger') | 28 | ValueError: ('Undefined permission ID', 'mushroom.Badger') |
644 | 29 | >>> logout() | 29 | >>> logout() |
645 | 30 | 30 | ||
646 | 31 | 31 | ||
647 | diff --git a/lib/lp/services/webapp/doc/webapp-publication.txt b/lib/lp/services/webapp/doc/webapp-publication.txt | |||
648 | index 2c2c608..5028368 100644 | |||
649 | --- a/lib/lp/services/webapp/doc/webapp-publication.txt | |||
650 | +++ b/lib/lp/services/webapp/doc/webapp-publication.txt | |||
651 | @@ -872,8 +872,8 @@ The user attribute is an empty string, when no user is logged in. | |||
652 | 872 | >>> request._publication_start = 1.345 | 872 | >>> request._publication_start = 1.345 |
653 | 873 | >>> request._publication_thread_start = None | 873 | >>> request._publication_thread_start = None |
654 | 874 | >>> publication.afterCall(request, None) | 874 | >>> publication.afterCall(request, None) |
657 | 875 | >>> txn.user | 875 | >>> print txn.user |
658 | 876 | '' | 876 | <BLANKLINE> |
659 | 877 | 877 | ||
660 | 878 | But if there is a logged in user, the transaction user attribute will | 878 | But if there is a logged in user, the transaction user attribute will |
661 | 879 | contain its ID (as well as an empty '/' path, which is a Zope artefact | 879 | contain its ID (as well as an empty '/' path, which is a Zope artefact |
662 | diff --git a/lib/lp/services/webapp/publication.py b/lib/lp/services/webapp/publication.py | |||
663 | index 716dd2e..1a1c1a4 100644 | |||
664 | --- a/lib/lp/services/webapp/publication.py | |||
665 | +++ b/lib/lp/services/webapp/publication.py | |||
666 | @@ -219,7 +219,12 @@ class LaunchpadBrowserPublication( | |||
667 | 219 | # It is possible that request.principal is None if the principal has | 219 | # It is possible that request.principal is None if the principal has |
668 | 220 | # not been set yet. | 220 | # not been set yet. |
669 | 221 | if request.principal is not None: | 221 | if request.principal is not None: |
671 | 222 | txn.setUser(request.principal.id) | 222 | # Zope sets the transaction's user attribute to a |
672 | 223 | # space-separated pair of path and user ID, where the path is a | ||
673 | 224 | # record of traversed objects. This is mostly a ZODB thing that | ||
674 | 225 | # we don't care about, so just use something minimal that fits | ||
675 | 226 | # the syntax. | ||
676 | 227 | txn.user = u"/ %s" % (request.principal.id,) | ||
677 | 223 | 228 | ||
678 | 224 | return txn | 229 | return txn |
679 | 225 | 230 | ||
680 | diff --git a/lib/lp/services/webapp/session.py b/lib/lp/services/webapp/session.py | |||
681 | index 2d7161d..2861dec 100644 | |||
682 | --- a/lib/lp/services/webapp/session.py | |||
683 | +++ b/lib/lp/services/webapp/session.py | |||
684 | @@ -51,6 +51,8 @@ class LaunchpadCookieClientIdManager(CookieClientIdManager): | |||
685 | 51 | # It should be larger than our session expiry time. | 51 | # It should be larger than our session expiry time. |
686 | 52 | self.cookieLifetime = 1 * YEARS | 52 | self.cookieLifetime = 1 * YEARS |
687 | 53 | self._secret = None | 53 | self._secret = None |
688 | 54 | # Forbid browsers from exposing it to JS. | ||
689 | 55 | self.httpOnly = True | ||
690 | 54 | 56 | ||
691 | 55 | def getClientId(self, request): | 57 | def getClientId(self, request): |
692 | 56 | sid = self.getRequestId(request) | 58 | sid = self.getRequestId(request) |
693 | @@ -104,9 +106,6 @@ class LaunchpadCookieClientIdManager(CookieClientIdManager): | |||
694 | 104 | cookie = request.response.getCookie(self.namespace) | 106 | cookie = request.response.getCookie(self.namespace) |
695 | 105 | uri = URI(request.getURL()) | 107 | uri = URI(request.getURL()) |
696 | 106 | 108 | ||
697 | 107 | # Forbid browsers from exposing it to JS. | ||
698 | 108 | cookie['HttpOnly'] = True | ||
699 | 109 | |||
700 | 110 | # Set secure flag on cookie. | 109 | # Set secure flag on cookie. |
701 | 111 | if uri.scheme != 'http': | 110 | if uri.scheme != 'http': |
702 | 112 | cookie['secure'] = True | 111 | cookie['secure'] = True |
703 | diff --git a/lib/lp/translations/browser/language.py b/lib/lp/translations/browser/language.py | |||
704 | index cced791..ac18a36 100644 | |||
705 | --- a/lib/lp/translations/browser/language.py | |||
706 | +++ b/lib/lp/translations/browser/language.py | |||
707 | @@ -163,6 +163,7 @@ class LanguageAddView(LaunchpadFormView): | |||
708 | 163 | schema = ILanguage | 163 | schema = ILanguage |
709 | 164 | field_names = ['code', 'englishname', 'nativename', 'pluralforms', | 164 | field_names = ['code', 'englishname', 'nativename', 'pluralforms', |
710 | 165 | 'pluralexpression', 'visible', 'direction'] | 165 | 'pluralexpression', 'visible', 'direction'] |
711 | 166 | invariant_context = None | ||
712 | 166 | language = None | 167 | language = None |
713 | 167 | 168 | ||
714 | 168 | page_title = "Register a language" | 169 | page_title = "Register a language" |
715 | diff --git a/setup.py b/setup.py | |||
716 | index 6a72cb8..30391e6 100644 | |||
717 | --- a/setup.py | |||
718 | +++ b/setup.py | |||
719 | @@ -242,9 +242,14 @@ setup( | |||
720 | 242 | 'zope.app.publication', | 242 | 'zope.app.publication', |
721 | 243 | 'zope.app.publisher', | 243 | 'zope.app.publisher', |
722 | 244 | 'zope.app.server', | 244 | 'zope.app.server', |
724 | 245 | 'zope.app.wsgi', | 245 | 'zope.app.wsgi[testlayer]', |
725 | 246 | 'zope.authentication', | 246 | 'zope.authentication', |
726 | 247 | 'zope.browser', | ||
727 | 248 | 'zope.browsermenu', | ||
728 | 249 | 'zope.browserpage', | ||
729 | 250 | 'zope.browserresource', | ||
730 | 247 | 'zope.component[zcml]', | 251 | 'zope.component[zcml]', |
731 | 252 | 'zope.configuration', | ||
732 | 248 | 'zope.contenttype', | 253 | 'zope.contenttype', |
733 | 249 | 'zope.datetime', | 254 | 'zope.datetime', |
734 | 250 | 'zope.error', | 255 | 'zope.error', |
735 | @@ -270,7 +275,7 @@ setup( | |||
736 | 270 | 'zope.session', | 275 | 'zope.session', |
737 | 271 | 'zope.tal', | 276 | 'zope.tal', |
738 | 272 | 'zope.tales', | 277 | 'zope.tales', |
740 | 273 | 'zope.testbrowser[wsgi]', | 278 | 'zope.testbrowser', |
741 | 274 | 'zope.testing', | 279 | 'zope.testing', |
742 | 275 | 'zope.testrunner[subunit]', | 280 | 'zope.testrunner[subunit]', |
743 | 276 | 'zope.traversing', | 281 | 'zope.traversing', |
Nicely done, just one thing...