Merge ~cjwatson/launchpad:stormify-pofiletranslator into launchpad:master

Proposed by Colin Watson
Status: Merged
Approved by: Colin Watson
Approved revision: c71395dc3af39748789558724d05d8677333d49d
Merge reported by: Otto Co-Pilot
Merged at revision: not available
Proposed branch: ~cjwatson/launchpad:stormify-pofiletranslator
Merge into: launchpad:master
Diff against target: 196 lines (+45/-25)
7 files modified
lib/lp/registry/model/distroseries.py (+2/-2)
lib/lp/translations/doc/translationmessage-destroy.rst (+1/-1)
lib/lp/translations/interfaces/pofiletranslator.py (+3/-0)
lib/lp/translations/model/pofiletranslator.py (+30/-13)
lib/lp/translations/model/translationsperson.py (+3/-3)
lib/lp/translations/scripts/scrub_pofiletranslator.py (+5/-5)
lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py (+1/-1)
Reviewer Review Type Date Requested Status
Guruprasad Approve
Review via email: mp+435888@code.launchpad.net

Commit message

Convert POFileTranslator to Storm

To post a comment you must log in.
Revision history for this message
Guruprasad (lgp171188) wrote :

LGTM 👍

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/lib/lp/registry/model/distroseries.py b/lib/lp/registry/model/distroseries.py
2index 68f102f..31df52d 100644
3--- a/lib/lp/registry/model/distroseries.py
4+++ b/lib/lp/registry/model/distroseries.py
5@@ -1534,8 +1534,8 @@ class DistroSeries(
6
7 contributors = IStore(Person).find(
8 Person,
9- POFileTranslator.personID == Person.id,
10- POFile.id == POFileTranslator.pofileID,
11+ POFileTranslator.person_id == Person.id,
12+ POFile.id == POFileTranslator.pofile_id,
13 POFile.language == language,
14 POTemplate.id == POFile.potemplateID,
15 POTemplate.distroseries == self,
16diff --git a/lib/lp/translations/doc/translationmessage-destroy.rst b/lib/lp/translations/doc/translationmessage-destroy.rst
17index 9bba5b5..0841544 100644
18--- a/lib/lp/translations/doc/translationmessage-destroy.rst
19+++ b/lib/lp/translations/doc/translationmessage-destroy.rst
20@@ -63,7 +63,7 @@ translation, we get two POFileTranslator records for each of the POFiles.
21 ... IStore(POFileTranslator)
22 ... .find(
23 ... POFileTranslator,
24- ... POFileTranslator.pofileID.is_in(
25+ ... POFileTranslator.pofile_id.is_in(
26 ... (devel_sr_pofile.id, stable_sr_pofile.id)
27 ... ),
28 ... )
29diff --git a/lib/lp/translations/interfaces/pofiletranslator.py b/lib/lp/translations/interfaces/pofiletranslator.py
30index 64331c8..a5d05eb 100644
31--- a/lib/lp/translations/interfaces/pofiletranslator.py
32+++ b/lib/lp/translations/interfaces/pofiletranslator.py
33@@ -40,6 +40,9 @@ class IPOFileTranslator(Interface):
34 readonly=True,
35 )
36
37+ def destroySelf():
38+ """Delete this record."""
39+
40
41 class IPOFileTranslatorSet(Interface):
42 """Interface representing the set of `IPOFileTranslator`records.
43diff --git a/lib/lp/translations/model/pofiletranslator.py b/lib/lp/translations/model/pofiletranslator.py
44index 772b8a9..260c5d8 100644
45--- a/lib/lp/translations/model/pofiletranslator.py
46+++ b/lib/lp/translations/model/pofiletranslator.py
47@@ -8,7 +8,9 @@ __all__ = [
48
49 from operator import itemgetter
50
51+import pytz
52 from storm.expr import And, Join, LeftJoin
53+from storm.locals import DateTime, Int, Reference
54 from storm.store import Store
55 from zope.interface import implementer
56
57@@ -17,11 +19,9 @@ from lp.registry.model.distroseries import DistroSeries
58 from lp.registry.model.product import Product
59 from lp.registry.model.productseries import ProductSeries
60 from lp.registry.model.sourcepackagename import SourcePackageName
61-from lp.services.database.datetimecol import UtcDateTimeCol
62 from lp.services.database.decoratedresultset import DecoratedResultSet
63 from lp.services.database.interfaces import IStore
64-from lp.services.database.sqlbase import SQLBase
65-from lp.services.database.sqlobject import ForeignKey
66+from lp.services.database.stormbase import StormBase
67 from lp.translations.interfaces.pofiletranslator import (
68 IPOFileTranslator,
69 IPOFileTranslatorSet,
70@@ -31,20 +31,37 @@ from lp.translations.model.potemplate import POTemplate
71
72
73 @implementer(IPOFileTranslator)
74-class POFileTranslator(SQLBase):
75+class POFileTranslator(StormBase):
76 """See `IPOFileTranslator`."""
77
78- pofile = ForeignKey(foreignKey="POFile", dbName="pofile", notNull=True)
79- person = ForeignKey(
80- dbName="person",
81- foreignKey="Person",
82- storm_validator=validate_public_person,
83- notNull=True,
84+ __storm_table__ = "POFileTranslator"
85+
86+ id = Int(primary=True)
87+ pofile_id = Int(name="pofile", allow_none=False)
88+ pofile = Reference(pofile_id, "POFile.id")
89+ person_id = Int(
90+ name="person", validator=validate_public_person, allow_none=False
91 )
92- date_last_touched = UtcDateTimeCol(
93- dbName="date_last_touched", notNull=False, default=None
94+ person = Reference(person_id, "Person.id")
95+ date_last_touched = DateTime(
96+ name="date_last_touched",
97+ allow_none=True,
98+ default=None,
99+ tzinfo=pytz.UTC,
100 )
101
102+ def __init__(self, pofile, person_id, date_last_touched=None):
103+ super().__init__()
104+ self.pofile = pofile
105+ # Taking `Person.ID` rather than `Person` is unusual, but it fits
106+ # better with how `lp.translators.scripts.scrub_pofiletranslator` is
107+ # designed.
108+ self.person_id = person_id
109+ self.date_last_touched = date_last_touched
110+
111+ def destroySelf(self):
112+ IStore(self).remove(self)
113+
114
115 @implementer(IPOFileTranslatorSet)
116 class POFileTranslatorSet:
117@@ -107,6 +124,6 @@ class POFileTranslatorSet:
118 """See `IPOFileTranslatorSet`."""
119 return Store.of(potemplate).find(
120 POFileTranslator,
121- POFileTranslator.pofileID == POFile.id,
122+ POFileTranslator.pofile_id == POFile.id,
123 POFile.potemplateID == potemplate.id,
124 )
125diff --git a/lib/lp/translations/model/translationsperson.py b/lib/lp/translations/model/translationsperson.py
126index 6126a9f..d978f90 100644
127--- a/lib/lp/translations/model/translationsperson.py
128+++ b/lib/lp/translations/model/translationsperson.py
129@@ -189,8 +189,8 @@ class TranslationsPerson:
130 tables = self._composePOFileReviewerJoins(expect_reviewer_status=False)
131
132 join_condition = And(
133- POFileTranslator.personID == self.person.id,
134- POFileTranslator.pofileID == POFile.id,
135+ POFileTranslator.person == self.person,
136+ POFileTranslator.pofile_id == POFile.id,
137 POFile.language != getUtility(ILaunchpadCelebrities).english,
138 )
139
140@@ -261,7 +261,7 @@ class TranslationsPerson:
141 Returns a list of Storm CTEs, much the same as
142 _composePOFileReviewerJoins."""
143 clause = [
144- POFileTranslator.personID == self.person.id,
145+ POFileTranslator.person == self.person,
146 POFile.language != getUtility(ILaunchpadCelebrities).english,
147 ]
148 if no_older_than:
149diff --git a/lib/lp/translations/scripts/scrub_pofiletranslator.py b/lib/lp/translations/scripts/scrub_pofiletranslator.py
150index debbb2f..fbf8add 100644
151--- a/lib/lp/translations/scripts/scrub_pofiletranslator.py
152+++ b/lib/lp/translations/scripts/scrub_pofiletranslator.py
153@@ -135,8 +135,8 @@ def get_pofiletranslators(pofile_ids):
154 store = IStore(POFileTranslator)
155 pofts = {pofile_id: set() for pofile_id in pofile_ids}
156 for pofile_id, person_id in store.find(
157- (POFileTranslator.pofileID, POFileTranslator.personID),
158- POFileTranslator.pofileID.is_in(pofile_ids),
159+ (POFileTranslator.pofile_id, POFileTranslator.person_id),
160+ POFileTranslator.pofile_id.is_in(pofile_ids),
161 ):
162 pofts[pofile_id].add(person_id)
163 return pofts
164@@ -152,8 +152,8 @@ def remove_pofiletranslators(logger, pofile, person_ids):
165 store = IStore(pofile)
166 pofts = store.find(
167 POFileTranslator,
168- POFileTranslator.pofileID == pofile.id,
169- POFileTranslator.personID.is_in(person_ids),
170+ POFileTranslator.pofile == pofile,
171+ POFileTranslator.person_id.is_in(person_ids),
172 )
173 pofts.remove()
174
175@@ -178,7 +178,7 @@ def create_missing_pofiletranslators(logger, pofile, pofts, contribs):
176 store.add(
177 POFileTranslator(
178 pofile=pofile,
179- personID=missing_contributor,
180+ person_id=missing_contributor,
181 date_last_touched=contribs[missing_contributor],
182 )
183 )
184diff --git a/lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py b/lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py
185index f753106..f1db5d1 100644
186--- a/lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py
187+++ b/lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py
188@@ -73,7 +73,7 @@ class TestScrubPOFileTranslator(TestCaseWithFactory):
189 pofile = self.factory.makePOFile()
190 poft = POFileTranslator(
191 pofile=pofile,
192- person=self.factory.makePerson(),
193+ person_id=self.factory.makePerson().id,
194 date_last_touched=UTC_NOW,
195 )
196 IStore(poft.pofile).add(poft)

Subscribers

People subscribed via source and target branches

to status/vote changes: