=== modified file 'cronscripts/rosetta-approve-imports.py' --- cronscripts/rosetta-approve-imports.py 2009-09-18 07:39:51 +0000 +++ cronscripts/rosetta-approve-imports.py 2009-09-21 19:14:06 +0000 @@ -9,11 +9,11 @@ import _pythonpath -from canonical.config import config -from lp.translations.scripts.import_approval import AutoApproveProcess +from lp.translations.scripts.import_queue_gardener import ImportQueueGardener if __name__ == '__main__': - script = AutoApproveProcess( - 'rosetta-approve-imports', dbuser=config.poimport.dbuser) + script = ImportQueueGardener( + 'translations-import-queue-gardener', + dbuser='translations_import_queue_gardener') script.lock_and_run() === modified file 'database/schema/security.cfg' --- database/schema/security.cfg 2009-09-02 19:06:19 +0000 +++ database/schema/security.cfg 2009-09-21 18:55:31 +0000 @@ -435,13 +435,29 @@ public.account = SELECT, INSERT public.customlanguagecode = SELECT public.translationgroup = SELECT -public.translationimportqueueentry = SELECT, DELETE +public.translationimportqueueentry = SELECT public.translationmessage = SELECT, INSERT, UPDATE public.translationrelicensingagreement = SELECT public.translator = SELECT public.validpersoncache = SELECT public.validpersonorteamcache = SELECT +[translations_import_queue_gardener] +# Translations import queue management +type=user +groups=script +public.customlanguagecode = SELECT +public.distribution = SELECT +public.distroseries = SELECT +public.language = SELECT +public.person = SELECT +public.pofile = SELECT +public.potemplate = SELECT +public.product = SELECT +public.productseries = SELECT +public.sourcepackagename = SELECT +public.translationimportqueueentry = SELECT, DELETE, UPDATE + [poexport] # Rosetta export script type=user === 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 @@ 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 >>> from canonical.launchpad.ftests.logger import MockLogger - >>> process = AutoApproveProcess('approver', test_args=[]) + >>> process = ImportQueueGardener('approver', test_args=[]) >>> process.logger = MockLogger() >>> process.logger.setLevel(logging.INFO) >>> 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 = AutoApproveProcess('approver', test_args=[]) + >>> process = ImportQueueGardener('approver', test_args=[]) >>> process.logger = MockLogger() >>> process.logger.setLevel(logging.INFO) >>> process.main() === modified file 'lib/lp/translations/model/translationimportqueue.py' --- lib/lp/translations/model/translationimportqueue.py 2009-09-18 14:11:35 +0000 +++ lib/lp/translations/model/translationimportqueue.py 2009-09-21 18:42:58 +0000 @@ -64,8 +64,8 @@ from lp.registry.interfaces.person import validate_public_person -# Number of days when entries with terminal statuses are removed from the -# queue. +# Period to wait before entries with terminal statuses are removed from +# the queue. entry_gc_age = { RosettaImportStatus.DELETED: datetime.timedelta(days=3), RosettaImportStatus.IMPORTED: datetime.timedelta(days=3), @@ -1163,15 +1163,16 @@ :return: Number of entries deleted. """ now = datetime.datetime.now(pytz.UTC) - deletion_criteria = False + deletion_clauses = [] for status, gc_age in entry_gc_age.iteritems(): cutoff = now - gc_age - deletion_criteria = Or( - deletion_criteria, And( - TranslationImportQueueEntry.status == status, - TranslationImportQueueEntry.date_status_changed < cutoff)) - - entries = store.find(TranslationImportQueueEntry, deletion_criteria) + deletion_clauses.append(And( + TranslationImportQueueEntry.status == status, + TranslationImportQueueEntry.date_status_changed < cutoff)) + + entries = store.find( + TranslationImportQueueEntry, Or(*deletion_clauses)) + return entries.remove() def _cleanUpInactiveProductEntries(self, store): === renamed file 'lib/lp/translations/scripts/import_approval.py' => 'lib/lp/translations/scripts/import_queue_gardener.py' --- lib/lp/translations/scripts/import_approval.py 2009-09-18 13:48:00 +0000 +++ lib/lp/translations/scripts/import_queue_gardener.py 2009-09-21 18:57:20 +0000 @@ -6,7 +6,7 @@ __metaclass__ = type __all__ = [ - 'AutoApproveProcess', + 'ImportQueueGardener', ] 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") translation_import_queue = getUtility(ITranslationImportQueue) @@ -47,4 +47,4 @@ self.logger.info('Blocked %d entries from the queue.' % blocked_entries) - self.logger.debug("Completed auto-approval of translation imports.") + self.logger.debug("Completed gardening of translation imports.")