=== modified file 'lib/lp/translations/doc/poimport.txt'
--- lib/lp/translations/doc/poimport.txt 2009-09-18 13:48:00 +0000
+++ lib/lp/translations/doc/poimport.txt 2009-09-21 18:58:48 +0000
@@ -16,8 +16,8 @@
>>> from lp.registry.model.sourcepackagename import SourcePackageName
>>> from lp.translations.model.potemplate import POTemplateSubset
>>> from lp.translations.scripts.po_import import ImportProcess
- >>> from lp.translations.scripts.import_approval import (
- ... AutoApproveProcess)
+ >>> from lp.translations.scripts.import_queue_gardener import (
+ ... ImportQueueGardener)
>>> import datetime
>>> import pytz
>>> UTC = pytz.timezone('UTC')
@@ -674,7 +674,7 @@
<BLANKLINE>
The Launchpad team
-Now the auto-approval script runs. This can happen anytime, since it's
+Now the queue gardener runs. This can happen anytime, since it's
asynchronous to the po-import script. The script tries to approve any
entries that have not been approved, but look like they could be,
without human intervention. This involves a bit of guesswork about what
@@ -685,7 +685,7 @@
-The auto-approval script runs again. This time it sees the two
-submitted translations and approves them for import based on some
-heuristic intelligence.
+The queue gardener runs again. This time it sees the two submitted
+translations and approves them for import based on some heuristic
+intelligence.
- >>> process = AutoApproveProcess('approver', test_args=[])
+ >>> process = ImportQueueGardener('approver', test_args=[])
>>> process.logger = MockLogger()
>>> process.logger.setLevel(logging.INFO)
>>> process.main()
from zope.component import getUtility
@@ -16,7 +16,7 @@
ITranslationImportQueue)
-class AutoApproveProcess(LaunchpadCronScript):
+class ImportQueueGardener(LaunchpadCronScript):
"""Automated gardening for the Translations import queue."""
def main(self):
"""Manage import queue.
@@ -25,7 +25,7 @@ Garbage-collect ones that are no longer needed. Block translations on the queue for templates that are blocked.
"""
- self.logger.debug("Starting auto-approval of translation imports")
+ self.logger.debug("Starting gardening of translation imports")
=== modified file 'cronscripts/ rosetta- approve- imports. py' rosetta- approve- imports. py 2009-09-18 07:39:51 +0000 rosetta- approve- imports. py 2009-09-21 19:14:06 +0000
--- cronscripts/
+++ cronscripts/
@@ -9,11 +9,11 @@
import _pythonpath
-from canonical.config import config .scripts. import_ approval import AutoApproveProcess .scripts. import_ queue_gardener import ImportQueueGardener
-from lp.translations
+from lp.translations
if __name__ == '__main__': approve- imports' , dbuser= config. poimport. dbuser) ener( import- queue-gardener' , 'translations_ import_ queue_gardener' ) lock_and_ run()
- script = AutoApproveProcess(
- 'rosetta-
+ script = ImportQueueGard
+ 'translations-
+ dbuser=
script.
=== modified file 'database/ schema/ security. cfg' schema/ security. cfg 2009-09-02 19:06:19 +0000 schema/ security. cfg 2009-09-21 18:55:31 +0000 customlanguagec ode = SELECT translationgrou p = SELECT translationimpo rtqueueentry = SELECT, DELETE translationimpo rtqueueentry = SELECT translationmess age = SELECT, INSERT, UPDATE translationreli censingagreemen t = SELECT validpersoncach e = SELECT validpersonorte amcache = SELECT
--- database/
+++ database/
@@ -435,13 +435,29 @@
public.account = SELECT, INSERT
public.
public.
-public.
+public.
public.
public.
public.translator = SELECT
public.
public.
+[translations_ import_ queue_gardener] customlanguagec ode = SELECT distribution = SELECT distroseries = SELECT productseries = SELECT sourcepackagena me = SELECT translationimpo rtqueueentry = SELECT, DELETE, UPDATE
+# Translations import queue management
+type=user
+groups=script
+public.
+public.
+public.
+public.language = SELECT
+public.person = SELECT
+public.pofile = SELECT
+public.potemplate = SELECT
+public.product = SELECT
+public.
+public.
+public.
+
[poexport]
# Rosetta export script
type=user
=== modified file 'lib/lp/ translations/ doc/poimport. txt' translations/ doc/poimport. txt 2009-09-18 13:48:00 +0000 translations/ doc/poimport. txt 2009-09-21 18:58:48 +0000 model.sourcepac kagename import SourcePackageName .model. potemplate import POTemplateSubset .scripts. po_import import ImportProcess .scripts. import_ approval import ( .scripts. import_ queue_gardener import ( ener) 'UTC')
--- lib/lp/
+++ lib/lp/
@@ -16,8 +16,8 @@
>>> from lp.registry.
>>> from lp.translations
>>> from lp.translations
- >>> from lp.translations
- ... AutoApproveProcess)
+ >>> from lp.translations
+ ... ImportQueueGard
>>> import datetime
>>> import pytz
>>> UTC = pytz.timezone(
@@ -674,7 +674,7 @@
<BLANKLINE>
The Launchpad team
-Now the auto-approval script runs. This can happen anytime, since it's
+Now the queue gardener runs. This can happen anytime, since it's
asynchronous to the po-import script. The script tries to approve any
entries that have not been approved, but look like they could be,
without human intervention. This involves a bit of guesswork about what
@@ -685,7 +685,7 @@
>>> import logging launchpad. ftests. logger import MockLogger ess('approver' , test_args=[]) ener('approver' , test_args=[]) logger. setLevel( logging. INFO)
>>> from canonical.
- >>> process = AutoApproveProc
+ >>> process = ImportQueueGard
>>> process.logger = MockLogger()
>>> process.
>>> process.main()
@@ -766,11 +766,11 @@
>>> print entry.status.name
NEEDS_REVIEW
-The auto-approval script runs again. This time it sees the two
-submitted translations and approves them for import based on some
-heuristic intelligence.
+The queue gardener runs again. This time it sees the two submitted
+translations and approves them for import based on some heuristic
+intelligence.
- >>> process = AutoApproveProc ess('approver' , test_args=[]) ener('approver' , test_args=[]) logger. setLevel( logging. INFO)
+ >>> process = ImportQueueGard
>>> process.logger = MockLogger()
>>> process.
>>> process.main()
=== modified file 'lib/lp/ translations/ model/translati onimportqueue. py' translations/ model/translati onimportqueue. py 2009-09-18 14:11:35 +0000 translations/ model/translati onimportqueue. py 2009-09-21 18:42:58 +0000 interfaces. person import validate_ public_ person
--- lib/lp/
+++ lib/lp/
@@ -64,8 +64,8 @@
from lp.registry.
-# Number of days when entries with terminal statuses are removed from the ortStatus. DELETED: datetime. timedelta( days=3) , ortStatus. IMPORTED: datetime. timedelta( days=3) , datetime. now(pytz. UTC) age.iteritems( ): rtQueueEntry. status == status, rtQueueEntry. date_status_ changed < cutoff)) TranslationImpo rtQueueEntry, deletion_criteria) clauses. append( And( rtQueueEntry. status == status, rtQueueEntry. date_status_ changed < cutoff)) rtQueueEntry, Or(*deletion_ clauses) )
-# queue.
+# Period to wait before entries with terminal statuses are removed from
+# the queue.
entry_gc_age = {
RosettaImp
RosettaImp
@@ -1163,15 +1163,16 @@
:return: Number of entries deleted.
"""
now = datetime.
- deletion_criteria = False
+ deletion_clauses = []
for status, gc_age in entry_gc_
cutoff = now - gc_age
- deletion_criteria = Or(
- deletion_criteria, And(
- TranslationImpo
- TranslationImpo
-
- entries = store.find(
+ deletion_
+ TranslationImpo
+ TranslationImpo
+
+ entries = store.find(
+ TranslationImpo
+
return entries.remove()
def _cleanUpInactiv eProductEntries (self, store):
=== renamed file 'lib/lp/ translations/ scripts/ import_ approval. py' => 'lib/lp/ translations/ scripts/ import_ queue_gardener. py' translations/ scripts/ import_ approval. py 2009-09-18 13:48:00 +0000 translations/ scripts/ import_ queue_gardener. py 2009-09-21 18:57:20 +0000
--- lib/lp/
+++ lib/lp/
@@ -6,7 +6,7 @@
__metaclass__ = type
__all__ = [ cess', dener',
- 'AutoApprovePro
+ 'ImportQueueGar
]
from zope.component import getUtility onImportQueue)
@@ -16,7 +16,7 @@
ITranslati
-class AutoApproveProc ess(LaunchpadCr onScript) : ener(LaunchpadC ronScript) :
Garbage- collect ones that are no longer needed. Block
translations on the queue for templates that are blocked. debug(" Starting auto-approval of translation imports") debug(" Starting gardening of translation imports")
+class ImportQueueGard
"""Automated gardening for the Translations import queue."""
def main(self):
"""Manage import queue.
@@ -25,7 +25,7 @@
"""
- self.logger.
+ self.logger.
@@ -47,4 +47,4 @@
self. logger. info('Blocked %d entries from the queue.' %
blocked_ entries)
- self.logger. debug(" Completed auto-approval of translation imports.") debug(" Completed gardening of translation imports.")
+ self.logger.