def mergeTranslationMessages(self): """Share `TranslationMessage`s between templates where possible.""" order_check = OrderingCheck( key=methodcaller('sharingKey'), reverse=True) for template_number, template in enumerate(self.potemplates): log.info("Merging template %d/%d." % ( template_number + 1, len(self.potemplates))) deletions = 0 order_check.check(template) potmsgset_ids = self._getPOTMsgSetIds(template) for potmsgset_id in potmsgset_ids: potmsgset = POTMsgSet.get(potmsgset_id) tm_ids = self._partitionTranslationMessageIds(potmsgset) before = sum([len(sublist) for sublist in tm_ids], 0) for ids in tm_ids: for id in ids: message = TranslationMessage.get(id) removeSecurityProxy(message).shareIfPossible() self.tm.endTransaction(intermediate=True) after = potmsgset.getAllTranslationMessages().count() deletions += max(0, before - after) report = "Deleted TranslationMessages: %d." % deletions if deletions > 0: log.info(report) else: log.log(DEBUG2, report)
def mergeTranslationMessages(self): """Share `TranslationMessage`s between templates where possible.""" order_check = OrderingCheck(key=methodcaller('sharingKey'), reverse=True) for template_number, template in enumerate(self.potemplates): log.info("Merging template %d/%d." % (template_number + 1, len(self.potemplates))) deletions = 0 order_check.check(template) potmsgset_ids = self._getPOTMsgSetIds(template) for potmsgset_id in potmsgset_ids: potmsgset = POTMsgSet.get(potmsgset_id) tm_ids = self._partitionTranslationMessageIds(potmsgset) before = sum([len(sublist) for sublist in tm_ids], 0) for ids in tm_ids: for id in ids: message = TranslationMessage.get(id) removeSecurityProxy(message).shareIfPossible() self.tm.endTransaction(intermediate=True) after = potmsgset.getAllTranslationMessages().count() deletions += max(0, before - after) report = "Deleted TranslationMessages: %d." % deletions if deletions > 0: log.info(report) else: log.log(DEBUG2, report)
def _scrubPOTMsgSetTranslations(self, potmsgset): """Map out translations for `potmsgset`, and eliminate duplicates. In the transition period for message sharing, there may be duplicate TranslationMessages that may upset assumptions in the code. Clean those up. """ # XXX JeroenVermeulen 2009-06-15 # spec=message-sharing-prevent-duplicates: We're going to have a # unique index again at some point that will prevent this. When # it becomes impossible to test this function, this whole # migration phase can be scrapped. ids_per_language = self._partitionTranslationMessageIds(potmsgset) self.tm.endTransaction(intermediate=True) deletions = 0 for ids in ids_per_language: translations = {} for tm_id in ids: tm = TranslationMessage.get(tm_id) key = self._getPOTMsgSetTranslationMessageKey(tm) if key in translations: language_code = tm.language.code log.info( "Cleaning up identical '%s' message for: \"%s\"" % ( language_code, potmsgset.singular_text)) existing_tm = translations[key] assert tm != existing_tm, ( "Message is duplicate of itself.") assert tm.potmsgset == existing_tm.potmsgset, ( "Different potmsgsets considered identical.") assert tm.potemplate == existing_tm.potemplate, ( "Different potemplates considered identical.") # Transfer any current/imported flags to the existing # message, and delete the duplicate. bequeathe_flags(tm, existing_tm) deletions += 1 else: translations[key] = tm self.tm.endTransaction(intermediate=True) report = "Deleted TranslationMessages: %d" % deletions if deletions > 0: log.info(report) else: log.log(DEBUG2, report)
def _scrubPOTMsgSetTranslations(self, potmsgset): """Map out translations for `potmsgset`, and eliminate duplicates. In the transition period for message sharing, there may be duplicate TranslationMessages that may upset assumptions in the code. Clean those up. """ # XXX JeroenVermeulen 2009-06-15 # spec=message-sharing-prevent-duplicates: We're going to have a # unique index again at some point that will prevent this. When # it becomes impossible to test this function, this whole # migration phase can be scrapped. ids_per_language = self._partitionTranslationMessageIds(potmsgset) self.tm.endTransaction(intermediate=True) deletions = 0 for ids in ids_per_language: translations = {} for tm_id in ids: tm = TranslationMessage.get(tm_id) key = self._getPOTMsgSetTranslationMessageKey(tm) if key in translations: language_code = tm.language.code log.info("Cleaning up identical '%s' message for: \"%s\"" % (language_code, potmsgset.singular_text)) existing_tm = translations[key] assert tm != existing_tm, ( "Message is duplicate of itself.") assert tm.potmsgset == existing_tm.potmsgset, ( "Different potmsgsets considered identical.") assert tm.potemplate == existing_tm.potemplate, ( "Different potemplates considered identical.") # Transfer any current/imported flags to the existing # message, and delete the duplicate. bequeathe_flags(tm, existing_tm) deletions += 1 else: translations[key] = tm self.tm.endTransaction(intermediate=True) report = "Deleted TranslationMessages: %d" % deletions if deletions > 0: log.info(report) else: log.log(DEBUG2, report)