← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~jtv/launchpad/recife-pre-resetCurrentTranslation into lp:~launchpad/launchpad/recife

 

Jeroen T. Vermeulen has proposed merging lp:~jtv/launchpad/recife-pre-resetCurrentTranslation into lp:~launchpad/launchpad/recife.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers): code


= Helpers for resetCurrentTranslation work =

This goes into the Recife feature branch.  It adds two helpers that became necessary for a later branch:

1. LaunchpadObjectFactory.makeDivergedTranslationMessage.  Creates a TranslationMessage that's current and diverged.  In the Recife work's current transient state, we have no proper way of doing this.  At least this way we get to sweep all the dirt under a single rug until we can clean it up properly.

2. POFile.markChanged updates a POFile's last-change date and, optionally, the last translator.  This is cleaner than messing with the POFile's attributes directly elsewhere.

Finally (but all the way at the top) it fixes an omission that causes trouble in later branches:

3. LaunchpadObjectFactory.makeCurrentTranslation neglected to set the new message's reviewer as expected.

To test,
{{{
./bin/test -vvc -m lp.testing.tests.test_factory
}}}

No lint.


Jeroen
-- 
https://code.launchpad.net/~jtv/launchpad/recife-pre-resetCurrentTranslation/+merge/33490
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~jtv/launchpad/recife-pre-resetCurrentTranslation into lp:~launchpad/launchpad/recife.
=== modified file 'lib/lp/testing/factory.py'
--- lib/lp/testing/factory.py	2010-08-19 09:37:13 +0000
+++ lib/lp/testing/factory.py	2010-08-24 06:28:45 +0000
@@ -165,6 +165,7 @@
     time_counter,
     )
 from lp.translations.interfaces.potemplate import IPOTemplateSet
+from lp.translations.interfaces.side import ITranslationSideTraitsSet
 from lp.translations.interfaces.translationimportqueue import (
     RosettaImportStatus)
 from lp.translations.interfaces.translationfileformat import (
@@ -2196,6 +2197,26 @@
         if diverged:
             removeSecurityProxy(message).potemplate = pofile.potemplate
 
+        message.markReviewed(reviewer)
+        return message
+
+    def makeDivergedTranslationMessage(self, pofile=None, potmsgset=None,
+                                       translator=None, reviewer=None,
+                                       translations=None):
+        """Create a diverged, current `TranslationMessage`."""
+        if pofile is None:
+            pofile = self.makePOFile('lt')
+
+        # XXX JeroenVermeulen 2010-08-24: This creates a suggestion,
+        # then diverges it, then activates it.  Once we have a method
+        # for diverging messages, do this in a more proper way.
+        message = self.makeSharedTranslationMessage(
+            pofile=pofile, potmsgset=potmsgset, translator=translator,
+            reviewer=reviewer, translations=translations, suggestion=True)
+        traits = getUtility(ITranslationSideTraitsSet).getTraits(
+            pofile.potemplate.translation_side)
+        removeSecurityProxy(message).potemplate = pofile.potemplate
+        traits.setFlag(message, True)
         return message
 
     def makeTranslation(self, pofile, sequence,

=== modified file 'lib/lp/testing/tests/test_factory.py'
--- lib/lp/testing/tests/test_factory.py	2010-08-19 09:37:13 +0000
+++ lib/lp/testing/tests/test_factory.py	2010-08-24 06:28:45 +0000
@@ -517,6 +517,41 @@
             translations, [tm.msgstr0.translation, tm.msgstr1.translation])
         self.assertIs(None, tm.msgstr2)
 
+    def test_makeCurrentTranslationMessage_sets_reviewer(self):
+        reviewer = self.factory.makePerson()
+
+        tm = self.factory.makeCurrentTranslationMessage(reviewer=reviewer)
+
+        self.assertEqual(reviewer, tm.reviewer)
+
+    def test_makeCurrentTranslationMessage_creates_reviewer(self):
+        tm = self.factory.makeCurrentTranslationMessage(reviewer=None)
+
+        self.assertNotEqual(None, tm.reviewer)
+
+    def test_makeDivergedTranslationMessage_upstream(self):
+        pofile = self.factory.makePOFile('ca')
+
+        tm = self.factory.makeDivergedTranslationMessage(pofile=pofile)
+
+        self.assertTrue(tm.is_current_upstream)
+        self.assertFalse(tm.is_current_ubuntu)
+        self.assertTrue(tm.is_diverged)
+        self.assertEqual(pofile.potemplate, tm.potemplate)
+
+    def test_makeDivergedTranslationMessage_ubuntu(self):
+        potemplate = self.factory.makePOTemplate(
+            distroseries=self.factory.makeDistroSeries(),
+            sourcepackagename=self.factory.makeSourcePackageName())
+        pofile = self.factory.makePOFile('eu', potemplate=potemplate)
+
+        tm = self.factory.makeDivergedTranslationMessage(pofile=pofile)
+
+        self.assertTrue(tm.is_current_ubuntu)
+        self.assertFalse(tm.is_current_upstream)
+        self.assertTrue(tm.is_diverged)
+        self.assertEqual(pofile.potemplate, tm.potemplate)
+
 
 class TestFactoryWithLibrarian(TestCaseWithFactory):
 

=== modified file 'lib/lp/translations/interfaces/pofile.py'
--- lib/lp/translations/interfaces/pofile.py	2010-08-10 14:39:46 +0000
+++ lib/lp/translations/interfaces/pofile.py	2010-08-24 06:28:45 +0000
@@ -281,6 +281,9 @@
         :return: a list of `VPOExport` objects.
         """
 
+    def markChanged(translator=None, timestamp=None):
+        """Note a change to this `POFile` or its contents."""
+
 
 class AlternativeLanguageVocabularyFactory:
     """Gets vocab for user's preferred languages, or all languages if not set.

=== modified file 'lib/lp/translations/model/pofile.py'
--- lib/lp/translations/model/pofile.py	2010-08-17 09:55:30 +0000
+++ lib/lp/translations/model/pofile.py	2010-08-24 06:28:45 +0000
@@ -417,6 +417,14 @@
         """See `IPOFile`."""
         return TranslatableMessage(potmsgset, self)
 
+    def markChanged(self, translator=None, timestamp=None):
+        """See `IPOFile`."""
+        if timestamp is None:
+            timestamp = UTC_NOW
+        self.date_changed = timestamp
+        if translator is not None:
+            self.lasttranslator = translator
+
 
 class POFile(SQLBase, POFileMixIn):
     implements(IPOFile)

=== modified file 'lib/lp/translations/tests/test_pofile.py'
--- lib/lp/translations/tests/test_pofile.py	2010-08-17 09:55:30 +0000
+++ lib/lp/translations/tests/test_pofile.py	2010-08-24 06:28:45 +0000
@@ -11,6 +11,8 @@
 from zope.interface.verify import verifyObject
 from zope.security.proxy import removeSecurityProxy
 
+from canonical.database.constants import UTC_NOW
+
 from lp.translations.interfaces.pofile import IPOFileSet
 from lp.translations.interfaces.translatablemessage import (
     ITranslatableMessage)
@@ -1776,6 +1778,26 @@
                 "getTranslationRows does not sort obsolete messages "
                 "(sequence=0) to the end of the file.")
 
+    def test_markChanged_sets_date(self):
+        timestamp = datetime.now(pytz.UTC) - timedelta(days=14)
+        self.pofile.markChanged(timestamp=timestamp)
+        self.assertEqual(timestamp, self.pofile.date_changed)
+
+    def test_markChanged_defaults_to_now(self):
+        self.pofile.date_changed = datetime.now(pytz.UTC) - timedelta(days=99)
+        self.pofile.markChanged()
+        self.assertEqual(UTC_NOW, self.pofile.date_changed)
+
+    def test_markChanged_leaves_lasttranslator_unchanged(self):
+        old_lasttranslator = self.pofile.lasttranslator
+        self.pofile.markChanged()
+        self.assertEqual(old_lasttranslator, self.pofile.lasttranslator)
+
+    def test_markChanged_sets_lasttranslator(self):
+        translator = self.factory.makePerson()
+        self.pofile.markChanged(translator=translator)
+        self.assertEqual(translator, self.pofile.lasttranslator)
+
 
 class TestPOFileToTranslationFileDataAdapter(TestCaseWithFactory):
     """Test POFile being adapted to IPOFileToTranslationFileData."""


Follow ups