Merge ~cjwatson/launchpad:storm-0.26 into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: a9f44ca9ee5d90d7f6252720e9433415349acab9
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:storm-0.26
Merge into: launchpad:master
Diff against target: 345 lines (+28/-69)
10 files modified
lib/lp/charms/model/charmrecipe.py (+4/-9)
lib/lp/registry/model/distroseries.py (+5/-5)
lib/lp/services/database/stormexpr.py (+0/-24)
lib/lp/services/statistics/tests/test_update_stats.py (+2/-3)
lib/lp/soyuz/scripts/expire_archive_files.py (+3/-3)
lib/lp/translations/model/distroserieslanguage.py (+2/-3)
lib/lp/translations/model/pofile.py (+3/-13)
lib/lp/translations/model/potmsgset.py (+6/-5)
lib/lp/translations/model/translationimportqueue.py (+2/-3)
requirements/launchpad.txt (+1/-1)
Reviewer Review Type Date Requested Status
Jürgen Gmach Approve
Review via email: mp+446345@code.launchpad.net

Commit message

Upgrade to storm 0.26+lp418

Description of the change

This also takes advantage of `Comparable.contains_string(case_sensitive=False)` (added in 0.25) and `storm.expr.Is` and `storm.expr.IsNot` (added in 0.26).

Dependencies MP: https://code.launchpad.net/~cjwatson/lp-source-dependencies/+git/lp-source-dependencies/+merge/446344

To post a comment you must log in.
Revision history for this message
Jürgen Gmach (jugmac00) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/charms/model/charmrecipe.py b/lib/lp/charms/model/charmrecipe.py
2index eb3891c..2195dab 100644
3--- a/lib/lp/charms/model/charmrecipe.py
4+++ b/lib/lp/charms/model/charmrecipe.py
5@@ -17,7 +17,7 @@ from lazr.lifecycle.event import ObjectCreatedEvent
6 from pymacaroons import Macaroon
7 from pymacaroons.serializers import JsonSerializer
8 from storm.databases.postgres import JSON
9-from storm.expr import Cast, Coalesce, Except
10+from storm.expr import Cast, Coalesce, Except, Is
11 from storm.locals import (
12 And,
13 Bool,
14@@ -112,12 +112,7 @@ from lp.services.database.decoratedresultset import DecoratedResultSet
15 from lp.services.database.enumcol import DBEnum
16 from lp.services.database.interfaces import IPrimaryStore, IStore
17 from lp.services.database.stormbase import StormBase
18-from lp.services.database.stormexpr import (
19- Greatest,
20- IsTrue,
21- JSONExtract,
22- NullsLast,
23-)
24+from lp.services.database.stormexpr import Greatest, JSONExtract, NullsLast
25 from lp.services.features import getFeatureFlag
26 from lp.services.job.interfaces.job import JobStatus
27 from lp.services.job.model.job import Job
28@@ -1190,8 +1185,8 @@ class CharmRecipeSet:
29 minutes=config.charms.auto_build_frequency
30 )
31 stale_clauses = [
32- IsTrue(CharmRecipe.is_stale),
33- IsTrue(CharmRecipe.auto_build),
34+ Is(CharmRecipe.is_stale, True),
35+ Is(CharmRecipe.auto_build, True),
36 ]
37 recent_clauses = [
38 CharmRecipeJob.recipe_id == CharmRecipe.id,
39diff --git a/lib/lp/registry/model/distroseries.py b/lib/lp/registry/model/distroseries.py
40index 68b7275..f0b7064 100644
41--- a/lib/lp/registry/model/distroseries.py
42+++ b/lib/lp/registry/model/distroseries.py
43@@ -17,7 +17,7 @@ from typing import List
44
45 import apt_pkg
46 from lazr.delegates import delegate_to
47-from storm.expr import SQL, And, Column, Desc, Join, Or, Select, Table
48+from storm.expr import SQL, And, Column, Desc, Is, Join, Or, Select, Table
49 from storm.locals import JSON, Int, Reference, ReferenceSet
50 from storm.store import Store
51 from zope.component import getUtility
52@@ -77,7 +77,7 @@ from lp.services.database.sqlobject import (
53 SQLObjectNotFound,
54 StringCol,
55 )
56-from lp.services.database.stormexpr import IsTrue, WithMaterialized, fti_search
57+from lp.services.database.stormexpr import WithMaterialized, fti_search
58 from lp.services.librarian.interfaces import ILibraryFileAliasSet
59 from lp.services.librarian.model import LibraryFileAlias
60 from lp.services.mail.signedmessage import signed_message_from_bytes
61@@ -760,7 +760,7 @@ class DistroSeries(
62 DistroSeriesLanguage,
63 DistroSeriesLanguage.language == Language.id,
64 DistroSeriesLanguage.distroseries == self,
65- IsTrue(Language.visible),
66+ Is(Language.visible, True),
67 )
68 .order_by(Language.englishname)
69 )
70@@ -1009,12 +1009,12 @@ class DistroSeries(
71 IStore(Language)
72 .find(
73 Language,
74- IsTrue(Language.visible),
75+ Is(Language.visible, True),
76 Language.id == POFile.languageID,
77 Language.code != "en",
78 POFile.potemplateID == POTemplate.id,
79 POTemplate.distroseries == self,
80- IsTrue(POTemplate.iscurrent),
81+ Is(POTemplate.iscurrent, True),
82 )
83 .config(distinct=True)
84 )
85diff --git a/lib/lp/services/database/stormexpr.py b/lib/lp/services/database/stormexpr.py
86index 92b3ce0..3a7aeb2 100644
87--- a/lib/lp/services/database/stormexpr.py
88+++ b/lib/lp/services/database/stormexpr.py
89@@ -16,8 +16,6 @@ __all__ = [
90 "get_where_for_reference",
91 "ImmutablePgJSON",
92 "IsDistinctFrom",
93- "IsFalse",
94- "IsTrue",
95 "JSONContains",
96 "JSONExtract",
97 "NullCount",
98@@ -231,28 +229,6 @@ class ArrayIntersects(CompoundOper):
99 oper = "&&"
100
101
102-class IsTrue(SuffixExpr):
103- """True iff the input Boolean expression is `TRUE`.
104-
105- Unlike `expr` or `expr == True`, this returns `FALSE` when
106- `expr IS NULL`.
107- """
108-
109- __slots__ = ()
110- suffix = "IS TRUE"
111-
112-
113-class IsFalse(SuffixExpr):
114- """True iff the input Boolean expression is `FALSE`.
115-
116- Unlike `Not(expr)` or `expr == False`, this returns `FALSE` when
117- `expr IS NULL`.
118- """
119-
120- __slots__ = ()
121- suffix = "IS FALSE"
122-
123-
124 class IsDistinctFrom(CompoundOper):
125 """True iff the left side is distinct from the right side."""
126
127diff --git a/lib/lp/services/statistics/tests/test_update_stats.py b/lib/lp/services/statistics/tests/test_update_stats.py
128index 9d7652e..577ff58 100644
129--- a/lib/lp/services/statistics/tests/test_update_stats.py
130+++ b/lib/lp/services/statistics/tests/test_update_stats.py
131@@ -8,7 +8,7 @@ import subprocess
132 import unittest
133 from datetime import timedelta
134
135-from storm.expr import Cast, Max, Select
136+from storm.expr import Cast, Is, Max, Select
137 from zope.component import getUtility
138
139 from lp.registry.interfaces.distribution import IDistributionSet
140@@ -17,7 +17,6 @@ from lp.registry.model.distroseries import DistroSeries
141 from lp.services.config import config
142 from lp.services.database.constants import UTC_NOW
143 from lp.services.database.interfaces import IStore
144-from lp.services.database.stormexpr import IsTrue
145 from lp.services.statistics.model.statistics import LaunchpadStatistic
146 from lp.services.worlddata.interfaces.language import ILanguageSet
147 from lp.services.worlddata.model.language import Language
148@@ -134,7 +133,7 @@ class UpdateStatsTest(unittest.TestCase):
149 store.find(
150 DistroSeriesLanguage,
151 DistroSeriesLanguage.language == Language.id,
152- IsTrue(Language.visible),
153+ Is(Language.visible, True),
154 term,
155 ).count(),
156 )
157diff --git a/lib/lp/soyuz/scripts/expire_archive_files.py b/lib/lp/soyuz/scripts/expire_archive_files.py
158index 13af377..6f1ef0f 100755
159--- a/lib/lp/soyuz/scripts/expire_archive_files.py
160+++ b/lib/lp/soyuz/scripts/expire_archive_files.py
161@@ -3,12 +3,12 @@
162 # Copyright 2009 Canonical Ltd. This software is licensed under the
163 # GNU Affero General Public License version 3 (see the file LICENSE).
164
165-from storm.expr import And, Cast, Except, Not, Or, Select
166+from storm.expr import And, Cast, Except, Is, Not, Or, Select
167
168 from lp.registry.model.person import Person
169 from lp.services.database.constants import UTC_NOW
170 from lp.services.database.interfaces import IStore
171-from lp.services.database.stormexpr import Concatenate, IsTrue
172+from lp.services.database.stormexpr import Concatenate
173 from lp.services.librarian.model import LibraryFileAlias
174 from lp.services.scripts.base import LaunchpadCronScript
175 from lp.soyuz.enums import ArchivePurpose
176@@ -190,7 +190,7 @@ class ArchiveExpirer(LaunchpadCronScript):
177 Archive.purpose == ArchivePurpose.PPA,
178 ),
179 And(
180- IsTrue(Archive.private),
181+ Is(Archive.private, True),
182 Not(full_archive_name.is_in(self.always_expire)),
183 ),
184 Not(Archive.purpose.is_in(archive_types)),
185diff --git a/lib/lp/translations/model/distroserieslanguage.py b/lib/lp/translations/model/distroserieslanguage.py
186index c0b1e79..d147f4b 100644
187--- a/lib/lp/translations/model/distroserieslanguage.py
188+++ b/lib/lp/translations/model/distroserieslanguage.py
189@@ -12,7 +12,7 @@ __all__ = [
190 from datetime import datetime, timezone
191 from operator import itemgetter
192
193-from storm.expr import LeftJoin
194+from storm.expr import Is, LeftJoin
195 from storm.locals import DateTime, Desc, Int, Join, Reference
196 from zope.interface import implementer
197
198@@ -21,7 +21,6 @@ from lp.services.database.constants import DEFAULT, UTC_NOW
199 from lp.services.database.decoratedresultset import DecoratedResultSet
200 from lp.services.database.interfaces import IStore
201 from lp.services.database.stormbase import StormBase
202-from lp.services.database.stormexpr import IsTrue
203 from lp.translations.interfaces.distroserieslanguage import (
204 IDistroSeriesLanguage,
205 IDistroSeriesLanguageSet,
206@@ -86,7 +85,7 @@ class DistroSeriesLanguage(StormBase, RosettaStats):
207 (POFile, SourcePackageName),
208 POFile.language == self.language,
209 POTemplate.distroseries == self.distroseries,
210- IsTrue(POTemplate.iscurrent),
211+ Is(POTemplate.iscurrent, True),
212 )
213 .order_by(Desc(POTemplate.priority), POFile.id)
214 )
215diff --git a/lib/lp/translations/model/pofile.py b/lib/lp/translations/model/pofile.py
216index 6539f65..e2e13b9 100644
217--- a/lib/lp/translations/model/pofile.py
218+++ b/lib/lp/translations/model/pofile.py
219@@ -22,12 +22,10 @@ from storm.expr import (
220 Exists,
221 Join,
222 LeftJoin,
223- Like,
224 Not,
225 Or,
226 Select,
227 Union,
228- like_escape,
229 )
230 from storm.info import ClassAlias
231 from storm.store import EmptyResultSet, Store
232@@ -167,11 +165,8 @@ class POFileMixIn(RosettaStats):
233 distinct=True,
234 )
235 ),
236- Like(
237- POTranslation.translation,
238- "%" + text.translate(like_escape) + "%",
239- "!",
240- case_sensitive=False,
241+ POTranslation.translation.contains_string(
242+ text, case_sensitive=False
243 ),
244 ]
245 return Select(
246@@ -221,12 +216,7 @@ class POFileMixIn(RosettaStats):
247 ),
248 )
249 ),
250- Like(
251- POMsgID.msgid,
252- "%" + text.translate(like_escape) + "%",
253- "!",
254- case_sensitive=False,
255- ),
256+ POMsgID.msgid.contains_string(text, case_sensitive=False),
257 ]
258 return Select(
259 POTMsgSet.id,
260diff --git a/lib/lp/translations/model/potmsgset.py b/lib/lp/translations/model/potmsgset.py
261index 4635d5c..ed9c0cb 100644
262--- a/lib/lp/translations/model/potmsgset.py
263+++ b/lib/lp/translations/model/potmsgset.py
264@@ -16,6 +16,8 @@ from storm.expr import (
265 Coalesce,
266 Column,
267 Desc,
268+ Is,
269+ IsNot,
270 Join,
271 Not,
272 Or,
273@@ -36,7 +38,6 @@ from lp.services.database.interfaces import IStore
274 from lp.services.database.sqlbase import SQLBase, sqlvalues
275 from lp.services.database.sqlobject import StringCol
276 from lp.services.database.stormexpr import (
277- IsTrue,
278 NullsFirst,
279 NullsLast,
280 WithMaterialized,
281@@ -325,8 +326,8 @@ class POTMsgSet(SQLBase):
282 ):
283 """See `IPOTMsgSet`."""
284 clauses = [
285- Not(IsTrue(TranslationMessage.is_current_ubuntu)),
286- Not(IsTrue(TranslationMessage.is_current_upstream)),
287+ IsNot(TranslationMessage.is_current_ubuntu, True),
288+ IsNot(TranslationMessage.is_current_upstream, True),
289 TranslationMessage.potmsgset == self,
290 TranslationMessage.language == language,
291 SQL(make_plurals_sql_fragment("msgstr%(form)d IS NOT NULL", "OR")),
292@@ -384,8 +385,8 @@ class POTMsgSet(SQLBase):
293 # a way so that indexes are indeed hit when the query is executed.
294 # Also note that there is a NOT(in_use_clause) index.
295 in_use_clause = Or(
296- IsTrue(TranslationMessage.is_current_ubuntu),
297- IsTrue(TranslationMessage.is_current_upstream),
298+ Is(TranslationMessage.is_current_ubuntu, True),
299+ Is(TranslationMessage.is_current_upstream, True),
300 )
301 # Present a list of language + usage constraints to sql. A language
302 # can either be unconstrained, used, or suggested depending on which
303diff --git a/lib/lp/translations/model/translationimportqueue.py b/lib/lp/translations/model/translationimportqueue.py
304index f27c939..3565e27 100644
305--- a/lib/lp/translations/model/translationimportqueue.py
306+++ b/lib/lp/translations/model/translationimportqueue.py
307@@ -17,7 +17,7 @@ from io import BytesIO
308 from operator import attrgetter
309 from textwrap import dedent
310
311-from storm.expr import SQL, Alias, And, Func, Or, Select
312+from storm.expr import SQL, Alias, And, Func, Is, Or, Select
313 from storm.locals import Bool, DateTime, Int, Reference, Unicode
314 from zope.component import getUtility, queryAdapter
315 from zope.interface import implementer
316@@ -42,7 +42,6 @@ from lp.services.database.interfaces import (
317 )
318 from lp.services.database.sqlbase import quote
319 from lp.services.database.stormbase import StormBase
320-from lp.services.database.stormexpr import IsFalse
321 from lp.services.librarian.interfaces.client import ILibrarianClient
322 from lp.services.worlddata.interfaces.language import ILanguageSet
323 from lp.translations.enums import RosettaImportStatus
324@@ -1477,7 +1476,7 @@ class TranslationImportQueue:
325 [
326 TranslationImportQueueEntry.distroseries
327 == DistroSeries.id,
328- IsFalse(DistroSeries.defer_translation_imports),
329+ Is(DistroSeries.defer_translation_imports, False),
330 ]
331 )
332
333diff --git a/requirements/launchpad.txt b/requirements/launchpad.txt
334index a76d45e..3392b12 100644
335--- a/requirements/launchpad.txt
336+++ b/requirements/launchpad.txt
337@@ -170,7 +170,7 @@ soupsieve==1.9
338 statsd==3.3.0
339 stevedore==1.32.0
340 # lp:~launchpad-committers/storm/lp
341-storm==0.24+lp417
342+storm==0.26+lp418
343 subprocess32==3.2.6
344 tenacity==6.1.0
345 testresources==0.2.7

Subscribers

People subscribed via source and target branches

to status/vote changes: