← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] ~ilasc/launchpad:stormify-person-language into launchpad:master

 

Ioana Lasc has proposed merging ~ilasc/launchpad:stormify-person-language into launchpad:master.

Commit message:
Stormify PersonLanguage

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~ilasc/launchpad/+git/launchpad/+merge/390173
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of ~ilasc/launchpad:stormify-person-language into launchpad:master.
diff --git a/lib/lp/answers/model/question.py b/lib/lp/answers/model/question.py
index de38575..31c4ed7 100644
--- a/lib/lp/answers/model/question.py
+++ b/lib/lp/answers/model/question.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2017 Canonical Ltd.  This software is licensed under the
+# Copyright 2009-2020 Canonical Ltd.  This software is licensed under the
 # GNU Affero General Public License version 3 (see the file LICENSE).
 
 """Question models."""
@@ -1367,9 +1367,9 @@ class QuestionTargetMixin:
             AnswerContact,
             LeftJoin(Person, AnswerContact.person == Person.id),
             LeftJoin(PersonLanguage,
-                     AnswerContact.personID == PersonLanguage.personID),
+                     AnswerContact.personID == PersonLanguage.person_id),
             LeftJoin(Language,
-                     PersonLanguage.language == Language.id)]
+                     PersonLanguage.language_id == Language.id)]
         columns = [Person, Language]
         conditions = self._getConditionsToQueryAnswerContacts()
         results = self._store.using(*origin).find(tuple(columns), conditions)
diff --git a/lib/lp/registry/model/person.py b/lib/lp/registry/model/person.py
index 2b1b8cf..9173612 100644
--- a/lib/lp/registry/model/person.py
+++ b/lib/lp/registry/model/person.py
@@ -258,6 +258,7 @@ from lp.services.database.sqlbase import (
     SQLBase,
     sqlvalues,
     )
+from lp.services.database.stormbase import StormBase
 from lp.services.database.stormexpr import fti_search
 from lp.services.helpers import (
     ensure_unicode,
@@ -654,8 +655,8 @@ class Person(
     def languages(self):
         """See `IPerson`."""
         results = Store.of(self).find(
-            Language, And(Language.id == PersonLanguage.languageID,
-                          PersonLanguage.personID == self.id))
+            Language, And(Language.id == PersonLanguage.language_id,
+                          PersonLanguage.person_id == self.id))
         results.order_by(Language.englishname)
         return list(results)
 
@@ -681,8 +682,8 @@ class Person(
     def addLanguage(self, language):
         """See `IPerson`."""
         person_language = Store.of(self).find(
-            PersonLanguage, And(PersonLanguage.languageID == language.id,
-                                PersonLanguage.personID == self.id)).one()
+            PersonLanguage, And(PersonLanguage.language_id == language.id,
+                                PersonLanguage.person_id == self.id)).one()
         if person_language is not None:
             # Nothing to do.
             return
@@ -692,12 +693,12 @@ class Person(
     def removeLanguage(self, language):
         """See `IPerson`."""
         person_language = Store.of(self).find(
-            PersonLanguage, And(PersonLanguage.languageID == language.id,
-                                PersonLanguage.personID == self.id)).one()
+            PersonLanguage, And(PersonLanguage.language_id == language.id,
+                                PersonLanguage.person_id == self.id)).one()
         if person_language is None:
             # Nothing to do.
             return
-        PersonLanguage.delete(person_language.id)
+        person_language.delete()
         self.deleteLanguagesCache()
 
     def _init(self, *args, **kw):
@@ -4062,12 +4063,21 @@ class PersonSet:
 Owner = ClassAlias(Person, 'Owner')
 
 
-class PersonLanguage(SQLBase):
-    _table = 'PersonLanguage'
+class PersonLanguage(StormBase):
+    __storm_table__ = 'PersonLanguage'
+    id = Int(primary=True)
+    person_id = Int(name='person', allow_none=False)
+    person = Reference(person_id, 'Person.id')
 
-    person = ForeignKey(foreignKey='Person', dbName='person', notNull=True)
-    language = ForeignKey(foreignKey='Language', dbName='language',
-                          notNull=True)
+    language_id = Int(name='language', allow_none=False)
+    language = Reference(language_id, 'Language.id')
+
+    def __init__(self, person, language):
+        self.person = person
+        self.language = language
+
+    def delete(self):
+        Store.of(self).remove(self)
 
 
 @implementer(ISSHKey)
diff --git a/lib/lp/services/worlddata/model/language.py b/lib/lp/services/worlddata/model/language.py
index 800b219..9cb3c36 100644
--- a/lib/lp/services/worlddata/model/language.py
+++ b/lib/lp/services/worlddata/model/language.py
@@ -1,4 +1,4 @@
-# Copyright 2009-2011 Canonical Ltd.  This software is licensed under
+# Copyright 2009-2020 Canonical Ltd.  This software is licensed under
 # the GNU Affero General Public License version 3 (see the file
 # LICENSE).
 
@@ -165,7 +165,7 @@ class Language(SQLBase):
             Join(
                 Person,
                 LanguageSet._getTranslatorJoins(),
-                Person.id == PersonLanguage.personID),
+                Person.id == PersonLanguage.person_id),
             ).find(
                 Person,
                 PersonLanguage.language == self,
@@ -200,7 +200,7 @@ class LanguageSet:
                     KarmaCache.projectgroupID == None,
                     KarmaCache.sourcepackagenameID == None,
                     KarmaCache.distributionID == None)),
-            PersonLanguage.personID ==
+            PersonLanguage.person_id ==
                 KarmaCache.personID)
 
     @property
@@ -237,7 +237,7 @@ class LanguageSet:
                     LeftJoin(
                         Language,
                         self._getTranslatorJoins(),
-                        PersonLanguage.languageID == Language.id),
+                        PersonLanguage.language_id == Language.id),
                     ).find(
                         (Language, Count(PersonLanguage)),
                         Language.id.is_in(ids),