def test_transfield_changed(): initial = { 'some_field': 'some_val', 'name_en-us': Translation.objects.create( id=500, locale='en-us', localized_string='test_name') } data = {'some_field': 'some_val', 'name': {'init': '', 'en-us': 'test_name'}} # No change. assert transfield_changed('name', initial, data) == 0 # Changed localization. data['name']['en-us'] = 'test_name_changed' assert transfield_changed('name', initial, data) == 1 # New localization. data['name']['en-us'] = 'test_name' data['name']['en-af'] = Translation.objects.create( id=505, locale='en-af', localized_string='test_name_localized') assert transfield_changed('name', initial, data) == 1 # Deleted localization. del initial['name_en-us'] assert transfield_changed('name', initial, data) == 1
def save(self): addon = self.instance persona = addon.persona data = self.cleaned_data # Update Persona-specific data. persona_data = { 'license': int(data['license']), 'accentcolor': data['accentcolor'].lstrip('#'), 'textcolor': data['textcolor'].lstrip('#'), 'author': self.request.user.username, 'display_username': self.request.user.name } changed = False for k, v in persona_data.iteritems(): if v != getattr(persona, k): changed = True setattr(persona, k, v) if changed: persona.save() if self.changed_data: amo.log(amo.LOG.EDIT_PROPERTIES, addon) self.instance.modified = datetime.now() # Update Addon-specific data. changed = ( set(self.old_tags) != data['tags'] or # Check if tags changed. self.initial['slug'] != data['slug'] or # Check if slug changed. transfield_changed('description', self.initial, data) or transfield_changed('name', self.initial, data)) if changed: # Only save if addon data changed. super(EditThemeForm, self).save() # Update tags. tags_new = data['tags'] tags_old = [slugify(t, spaces=True) for t in self.old_tags] # Add new tags. for t in set(tags_new) - set(tags_old): Tag(tag_text=t).save_tag(addon) # Remove old tags. for t in set(tags_old) - set(tags_new): Tag(tag_text=t).remove_tag(addon) # Update category. if data['category'].id != self.initial['category']: addon_cat = addon.addoncategory_set.all()[0] addon_cat.category = data['category'] addon_cat.save() # Theme reupload. if not addon.is_pending(): if data['header_hash'] or data['footer_hash']: save_theme_reupload.delay(data['header_hash'], data['footer_hash'], addon) return data
def save(self): addon = self.instance persona = addon.persona data = self.cleaned_data # Update Persona-specific data. persona_data = { 'license': int(data['license']), 'accentcolor': data['accentcolor'].lstrip('#'), 'textcolor': data['textcolor'].lstrip('#'), 'author': self.request.user.username, 'display_username': self.request.user.name } changed = False for k, v in persona_data.iteritems(): if v != getattr(persona, k): changed = True setattr(persona, k, v) if changed: persona.save() if self.changed_data: amo.log(amo.LOG.EDIT_PROPERTIES, addon) self.instance.modified = datetime.now() # Update Addon-specific data. changed = ( set(self.old_tags) != data['tags'] or # Check if tags changed. self.initial['slug'] != data['slug'] or # Check if slug changed. transfield_changed('description', self.initial, data) or transfield_changed('name', self.initial, data)) if changed: # Only save if addon data changed. super(EditThemeForm, self).save() # Update tags. tags_new = data['tags'] tags_old = [slugify(t, spaces=True) for t in self.old_tags] # Add new tags. for t in set(tags_new) - set(tags_old): Tag(tag_text=t).save_tag(addon) # Remove old tags. for t in set(tags_old) - set(tags_new): Tag(tag_text=t).remove_tag(addon) # Update category. if data['category'].id != self.initial['category']: addon_cat = addon.addoncategory_set.all()[0] addon_cat.category = data['category'] addon_cat.save() # Theme reupload. if not addon.is_pending(): if data['header_hash'] or data['footer_hash']: save_theme_reupload.delay( data['header_hash'], data['footer_hash'], addon) return data
def test_transfield_changed(): initial = { "some_field": "some_val", "name_en-us": Translation.objects.create(id=500, locale="en-us", localized_string="test_name"), } data = {"some_field": "some_val", "name": {"init": "", "en-us": "test_name"}} # No change. eq_(transfield_changed("name", initial, data), 0) # Changed localization. data["name"]["en-us"] = "test_name_changed" eq_(transfield_changed("name", initial, data), 1) # New localization. data["name"]["en-us"] = "test_name" data["name"]["en-af"] = Translation.objects.create(id=505, locale="en-af", localized_string="test_name_localized") eq_(transfield_changed("name", initial, data), 1) # Deleted localization. del initial["name_en-us"] eq_(transfield_changed("name", initial, data), 1)