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
diff --git a/lib/lp/registry/model/distroseries.py b/lib/lp/registry/model/distroseries.py
index 68f102f..31df52d 100644
--- a/lib/lp/registry/model/distroseries.py
+++ b/lib/lp/registry/model/distroseries.py
@@ -1534,8 +1534,8 @@ class DistroSeries(
15341534
1535 contributors = IStore(Person).find(1535 contributors = IStore(Person).find(
1536 Person,1536 Person,
1537 POFileTranslator.personID == Person.id,1537 POFileTranslator.person_id == Person.id,
1538 POFile.id == POFileTranslator.pofileID,1538 POFile.id == POFileTranslator.pofile_id,
1539 POFile.language == language,1539 POFile.language == language,
1540 POTemplate.id == POFile.potemplateID,1540 POTemplate.id == POFile.potemplateID,
1541 POTemplate.distroseries == self,1541 POTemplate.distroseries == self,
diff --git a/lib/lp/translations/doc/translationmessage-destroy.rst b/lib/lp/translations/doc/translationmessage-destroy.rst
index 9bba5b5..0841544 100644
--- a/lib/lp/translations/doc/translationmessage-destroy.rst
+++ b/lib/lp/translations/doc/translationmessage-destroy.rst
@@ -63,7 +63,7 @@ translation, we get two POFileTranslator records for each of the POFiles.
63 ... IStore(POFileTranslator)63 ... IStore(POFileTranslator)
64 ... .find(64 ... .find(
65 ... POFileTranslator,65 ... POFileTranslator,
66 ... POFileTranslator.pofileID.is_in(66 ... POFileTranslator.pofile_id.is_in(
67 ... (devel_sr_pofile.id, stable_sr_pofile.id)67 ... (devel_sr_pofile.id, stable_sr_pofile.id)
68 ... ),68 ... ),
69 ... )69 ... )
diff --git a/lib/lp/translations/interfaces/pofiletranslator.py b/lib/lp/translations/interfaces/pofiletranslator.py
index 64331c8..a5d05eb 100644
--- a/lib/lp/translations/interfaces/pofiletranslator.py
+++ b/lib/lp/translations/interfaces/pofiletranslator.py
@@ -40,6 +40,9 @@ class IPOFileTranslator(Interface):
40 readonly=True,40 readonly=True,
41 )41 )
4242
43 def destroySelf():
44 """Delete this record."""
45
4346
44class IPOFileTranslatorSet(Interface):47class IPOFileTranslatorSet(Interface):
45 """Interface representing the set of `IPOFileTranslator`records.48 """Interface representing the set of `IPOFileTranslator`records.
diff --git a/lib/lp/translations/model/pofiletranslator.py b/lib/lp/translations/model/pofiletranslator.py
index 772b8a9..260c5d8 100644
--- a/lib/lp/translations/model/pofiletranslator.py
+++ b/lib/lp/translations/model/pofiletranslator.py
@@ -8,7 +8,9 @@ __all__ = [
88
9from operator import itemgetter9from operator import itemgetter
1010
11import pytz
11from storm.expr import And, Join, LeftJoin12from storm.expr import And, Join, LeftJoin
13from storm.locals import DateTime, Int, Reference
12from storm.store import Store14from storm.store import Store
13from zope.interface import implementer15from zope.interface import implementer
1416
@@ -17,11 +19,9 @@ from lp.registry.model.distroseries import DistroSeries
17from lp.registry.model.product import Product19from lp.registry.model.product import Product
18from lp.registry.model.productseries import ProductSeries20from lp.registry.model.productseries import ProductSeries
19from lp.registry.model.sourcepackagename import SourcePackageName21from lp.registry.model.sourcepackagename import SourcePackageName
20from lp.services.database.datetimecol import UtcDateTimeCol
21from lp.services.database.decoratedresultset import DecoratedResultSet22from lp.services.database.decoratedresultset import DecoratedResultSet
22from lp.services.database.interfaces import IStore23from lp.services.database.interfaces import IStore
23from lp.services.database.sqlbase import SQLBase24from lp.services.database.stormbase import StormBase
24from lp.services.database.sqlobject import ForeignKey
25from lp.translations.interfaces.pofiletranslator import (25from lp.translations.interfaces.pofiletranslator import (
26 IPOFileTranslator,26 IPOFileTranslator,
27 IPOFileTranslatorSet,27 IPOFileTranslatorSet,
@@ -31,20 +31,37 @@ from lp.translations.model.potemplate import POTemplate
3131
3232
33@implementer(IPOFileTranslator)33@implementer(IPOFileTranslator)
34class POFileTranslator(SQLBase):34class POFileTranslator(StormBase):
35 """See `IPOFileTranslator`."""35 """See `IPOFileTranslator`."""
3636
37 pofile = ForeignKey(foreignKey="POFile", dbName="pofile", notNull=True)37 __storm_table__ = "POFileTranslator"
38 person = ForeignKey(38
39 dbName="person",39 id = Int(primary=True)
40 foreignKey="Person",40 pofile_id = Int(name="pofile", allow_none=False)
41 storm_validator=validate_public_person,41 pofile = Reference(pofile_id, "POFile.id")
42 notNull=True,42 person_id = Int(
43 name="person", validator=validate_public_person, allow_none=False
43 )44 )
44 date_last_touched = UtcDateTimeCol(45 person = Reference(person_id, "Person.id")
45 dbName="date_last_touched", notNull=False, default=None46 date_last_touched = DateTime(
47 name="date_last_touched",
48 allow_none=True,
49 default=None,
50 tzinfo=pytz.UTC,
46 )51 )
4752
53 def __init__(self, pofile, person_id, date_last_touched=None):
54 super().__init__()
55 self.pofile = pofile
56 # Taking `Person.ID` rather than `Person` is unusual, but it fits
57 # better with how `lp.translators.scripts.scrub_pofiletranslator` is
58 # designed.
59 self.person_id = person_id
60 self.date_last_touched = date_last_touched
61
62 def destroySelf(self):
63 IStore(self).remove(self)
64
4865
49@implementer(IPOFileTranslatorSet)66@implementer(IPOFileTranslatorSet)
50class POFileTranslatorSet:67class POFileTranslatorSet:
@@ -107,6 +124,6 @@ class POFileTranslatorSet:
107 """See `IPOFileTranslatorSet`."""124 """See `IPOFileTranslatorSet`."""
108 return Store.of(potemplate).find(125 return Store.of(potemplate).find(
109 POFileTranslator,126 POFileTranslator,
110 POFileTranslator.pofileID == POFile.id,127 POFileTranslator.pofile_id == POFile.id,
111 POFile.potemplateID == potemplate.id,128 POFile.potemplateID == potemplate.id,
112 )129 )
diff --git a/lib/lp/translations/model/translationsperson.py b/lib/lp/translations/model/translationsperson.py
index 6126a9f..d978f90 100644
--- a/lib/lp/translations/model/translationsperson.py
+++ b/lib/lp/translations/model/translationsperson.py
@@ -189,8 +189,8 @@ class TranslationsPerson:
189 tables = self._composePOFileReviewerJoins(expect_reviewer_status=False)189 tables = self._composePOFileReviewerJoins(expect_reviewer_status=False)
190190
191 join_condition = And(191 join_condition = And(
192 POFileTranslator.personID == self.person.id,192 POFileTranslator.person == self.person,
193 POFileTranslator.pofileID == POFile.id,193 POFileTranslator.pofile_id == POFile.id,
194 POFile.language != getUtility(ILaunchpadCelebrities).english,194 POFile.language != getUtility(ILaunchpadCelebrities).english,
195 )195 )
196196
@@ -261,7 +261,7 @@ class TranslationsPerson:
261 Returns a list of Storm CTEs, much the same as261 Returns a list of Storm CTEs, much the same as
262 _composePOFileReviewerJoins."""262 _composePOFileReviewerJoins."""
263 clause = [263 clause = [
264 POFileTranslator.personID == self.person.id,264 POFileTranslator.person == self.person,
265 POFile.language != getUtility(ILaunchpadCelebrities).english,265 POFile.language != getUtility(ILaunchpadCelebrities).english,
266 ]266 ]
267 if no_older_than:267 if no_older_than:
diff --git a/lib/lp/translations/scripts/scrub_pofiletranslator.py b/lib/lp/translations/scripts/scrub_pofiletranslator.py
index debbb2f..fbf8add 100644
--- a/lib/lp/translations/scripts/scrub_pofiletranslator.py
+++ b/lib/lp/translations/scripts/scrub_pofiletranslator.py
@@ -135,8 +135,8 @@ def get_pofiletranslators(pofile_ids):
135 store = IStore(POFileTranslator)135 store = IStore(POFileTranslator)
136 pofts = {pofile_id: set() for pofile_id in pofile_ids}136 pofts = {pofile_id: set() for pofile_id in pofile_ids}
137 for pofile_id, person_id in store.find(137 for pofile_id, person_id in store.find(
138 (POFileTranslator.pofileID, POFileTranslator.personID),138 (POFileTranslator.pofile_id, POFileTranslator.person_id),
139 POFileTranslator.pofileID.is_in(pofile_ids),139 POFileTranslator.pofile_id.is_in(pofile_ids),
140 ):140 ):
141 pofts[pofile_id].add(person_id)141 pofts[pofile_id].add(person_id)
142 return pofts142 return pofts
@@ -152,8 +152,8 @@ def remove_pofiletranslators(logger, pofile, person_ids):
152 store = IStore(pofile)152 store = IStore(pofile)
153 pofts = store.find(153 pofts = store.find(
154 POFileTranslator,154 POFileTranslator,
155 POFileTranslator.pofileID == pofile.id,155 POFileTranslator.pofile == pofile,
156 POFileTranslator.personID.is_in(person_ids),156 POFileTranslator.person_id.is_in(person_ids),
157 )157 )
158 pofts.remove()158 pofts.remove()
159159
@@ -178,7 +178,7 @@ def create_missing_pofiletranslators(logger, pofile, pofts, contribs):
178 store.add(178 store.add(
179 POFileTranslator(179 POFileTranslator(
180 pofile=pofile,180 pofile=pofile,
181 personID=missing_contributor,181 person_id=missing_contributor,
182 date_last_touched=contribs[missing_contributor],182 date_last_touched=contribs[missing_contributor],
183 )183 )
184 )184 )
diff --git a/lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py b/lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py
index f753106..f1db5d1 100644
--- a/lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py
+++ b/lib/lp/translations/scripts/tests/test_scrub_pofiletranslator.py
@@ -73,7 +73,7 @@ class TestScrubPOFileTranslator(TestCaseWithFactory):
73 pofile = self.factory.makePOFile()73 pofile = self.factory.makePOFile()
74 poft = POFileTranslator(74 poft = POFileTranslator(
75 pofile=pofile,75 pofile=pofile,
76 person=self.factory.makePerson(),76 person_id=self.factory.makePerson().id,
77 date_last_touched=UTC_NOW,77 date_last_touched=UTC_NOW,
78 )78 )
79 IStore(poft.pofile).add(poft)79 IStore(poft.pofile).add(poft)

Subscribers

People subscribed via source and target branches

to status/vote changes: