def test_notify_new_string(self): notify_new_string(self.get_translation()) # Check mail self.assertEqual(len(mail.outbox), 1) self.assertEqual( mail.outbox[0].subject, '[Weblate] New string to translate in Test/Test - Czech')
def test_notify_new_string(self): notify_new_string(self.get_translation()) # Check mail self.assertEqual(len(mail.outbox), 1) self.assertEqual( mail.outbox[0].subject, '[Weblate] New string to translate in Test/Test - Czech' )
def check_sync(self, force=False, request=None, change=None): ''' Checks whether database is in sync with git and possibly does update. ''' if change is None: change = Change.ACTION_UPDATE if request is None: user = None else: user = request.user # Check if we're not already up to date if self.revision != self.get_git_blob_hash(): reason = 'revision has changed' elif force: reason = 'check forced' else: return self.log_info( 'processing %s, %s', self.filename, reason, ) # List of created units (used for cleanup and duplicates detection) created_units = set() # Was there change? was_new = False # Position of current unit pos = 1 for unit in self.store.all_units(): if not unit.is_translatable(): continue newunit, is_new = Unit.objects.update_from_unit( self, unit, pos ) # Check if unit is new and untranslated was_new = ( was_new or (is_new and not newunit.translated) or ( not newunit.translated and newunit.translated != newunit.old_translated ) or (newunit.fuzzy and newunit.fuzzy != newunit.old_fuzzy) ) # Update position pos += 1 # Check for possible duplicate units if newunit.id in created_units: self.log_error( 'duplicate string to translate: %s (%s)', newunit, repr(newunit.source) ) Change.objects.create( unit=newunit, translation=self, action=Change.ACTION_DUPLICATE_STRING, user=user, author=user ) # Store current unit ID created_units.add(newunit.id) # Following query can get huge, so we should find better way # to delete stale units, probably sort of garbage collection # We should also do cleanup on source strings tracking objects # Get lists of stale units to delete units_to_delete = self.unit_set.exclude( id__in=created_units ) # We need to resolve this now as otherwise list will become empty after # delete deleted_units = units_to_delete.count() # Actually delete units units_to_delete.delete() # Update revision and stats self.update_stats() # Cleanup checks cache if there were some deleted units if deleted_units: self.invalidate_cache() # Store change entry Change.objects.create( translation=self, action=change, user=user, author=user ) # Notify subscribed users if was_new: notify_new_string(self)
def check_sync(self, force=False, request=None, change=None): ''' Checks whether database is in sync with git and possibly does update. ''' from weblate.trans.models.unit import Unit from weblate.trans.models.changes import Change if change is None: change = Change.ACTION_UPDATE # Check if we're not already up to date if self.revision != self.get_git_blob_hash(): weblate.logger.info( 'processing %s in %s, revision has changed', self.filename, self.subproject.__unicode__() ) elif force: weblate.logger.info( 'processing %s in %s, check forced', self.filename, self.subproject.__unicode__() ) else: return # List of created units (used for cleanup and duplicates detection) created_units = set() # Was there change? was_new = False # Position of current unit pos = 1 for unit in self.store.all_units(): if not unit.is_translatable(): continue newunit, is_new = Unit.objects.update_from_unit( self, unit, pos ) # Check if unit is new and untranslated was_new = was_new or (is_new and not newunit.translated) # Update position pos += 1 # Check for possible duplicate units if newunit.id in created_units: weblate.logger.error( 'Duplicate string to translate in %s: %s (%s)', self, newunit, repr(newunit.source) ) # Store current unit ID created_units.add(newunit.id) # Following query can get huge, so we should find better way # to delete stale units, probably sort of garbage collection # We should also do cleanup on source stings tracking objects # Get lists of stale units to delete units_to_delete = self.unit_set.exclude( id__in=created_units ) # We need to resolve this now as otherwise list will become empty after # delete deleted_contentsums = list( units_to_delete.values_list('contentsum', flat=True) ) # Actually delete units units_to_delete.delete() # Cleanup checks for deleted units self.cleanup_deleted(deleted_contentsums) # Update revision and stats self.update_stats() # Cleanup checks cache if there were some deleted units if len(deleted_contentsums) > 0: self.invalidate_cache() # Store change entry if request is None: user = None else: user = request.user Change.objects.create( translation=self, action=change, user=user, author=user ) # Notify subscribed users if was_new: from weblate.accounts.models import notify_new_string notify_new_string(self)
def check_sync(self, force=False, request=None, change=None): ''' Checks whether database is in sync with git and possibly does update. ''' from weblate.trans.models.unit import Unit from weblate.trans.models.changes import Change if change is None: change = Change.ACTION_UPDATE # Check if we're not already up to date if self.revision != self.get_git_blob_hash(): weblate.logger.info('processing %s in %s, revision has changed', self.filename, self.subproject.__unicode__()) elif force: weblate.logger.info('processing %s in %s, check forced', self.filename, self.subproject.__unicode__()) else: return # List of created units (used for cleanup and duplicates detection) created_units = set() # Was there change? was_new = False # Position of current unit pos = 1 for unit in self.store.all_units(): if not unit.is_translatable(): continue newunit, is_new = Unit.objects.update_from_unit(self, unit, pos) # Check if unit is new and untranslated was_new = was_new or (is_new and not newunit.translated) # Update position pos += 1 # Check for possible duplicate units if newunit.id in created_units: weblate.logger.error( 'Duplicate string to translate in %s: %s (%s)', self, newunit, repr(newunit.source)) # Store current unit ID created_units.add(newunit.id) # Following query can get huge, so we should find better way # to delete stale units, probably sort of garbage collection # We should also do cleanup on source stings tracking objects # Get lists of stale units to delete units_to_delete = self.unit_set.exclude(id__in=created_units) # We need to resolve this now as otherwise list will become empty after # delete deleted_contentsums = list( units_to_delete.values_list('contentsum', flat=True)) # Actually delete units units_to_delete.delete() # Cleanup checks for deleted units self.cleanup_deleted(deleted_contentsums) # Update revision and stats self.update_stats() # Cleanup checks cache if there were some deleted units if len(deleted_contentsums) > 0: self.invalidate_cache() # Store change entry if request is None: user = None else: user = request.user Change.objects.create(translation=self, action=change, user=user, author=user) # Notify subscribed users if was_new: from weblate.accounts.models import notify_new_string notify_new_string(self)