def repack_themes_for_69(addon_ids, **kw): log.info( '[%s@%s] Repacking themes to use 69+ properties starting at id: %s...' % (len(addon_ids), recreate_theme_previews.rate_limit, addon_ids[0])) addons = Addon.objects.filter(pk__in=addon_ids).no_transforms() olympia.core.set_user(UserProfile.objects.get(pk=settings.TASK_USER_ID)) for addon in addons: version = addon.current_version log.info('[CHECK] theme [%r] for deprecated properties' % addon) if not version: log.info('[INVALID] theme [%r] has no current_version' % addon) continue pause_all_tasks() try: timer = StopWatch('addons.tasks.repack_themes_for_69') timer.start() old_xpi = get_filepath(version.all_files[0]) old_data = parse_addon(old_xpi, minimal=True) new_data = new_69_theme_properties_from_old(old_data) if new_data != old_data: # if the manifest isn't the same let's repack new_version = new_theme_version_with_69_properties(version) log.info('[SUCCESS] Theme [%r], version [%r] updated to [%r]' % (addon, version, new_version)) else: log.info('[SKIP] No need for theme repack [%s]' % addon.id) timer.log_interval('') except (IOError, ValidationError, JSONDecodeError, SigningError) as ex: log.debug('[FAIL] Theme repack for [%r]:', addon, exc_info=ex) finally: resume_all_tasks()
def test_new_theme_version_with_69_properties(self): core.set_user(user_factory()) addon = addon_factory(type=amo.ADDON_STATICTHEME, version_kw={'version': '1.0'}) old_version = addon.current_version old_file_path = old_version.all_files[0].current_file_path amo.storage_utils.copy_stored_file(self.file_obj_dep, old_file_path) assert os.path.isfile(old_file_path) new_version = new_theme_version_with_69_properties(old_version) assert addon.versions.all().count() == 2 assert addon.current_version == new_version new_file_path = new_version.all_files[0].current_file_path with zipfile.ZipFile(self.file_obj_dep, 'r') as old_xpi: with zipfile.ZipFile(new_file_path, 'r') as new_xpi: assert len(old_xpi.infolist()) == len(new_xpi.infolist()) for entry in old_xpi.infolist(): file_ = entry.filename if file_ == 'manifest.json': old_manifest = json.loads(old_xpi.read(file_)) new_manifest = json.loads(new_xpi.read(file_)) assert old_manifest != new_manifest # need to pop the version as it's been bumped old_ver_num = old_manifest.pop('version') new_ver_num = new_manifest.pop('version') assert old_ver_num != new_ver_num assert new_manifest == ( new_69_theme_properties_from_old(old_manifest)) else: assert old_xpi.read(file_) == new_xpi.read(file_)
def test_new_69_theme_properties_from_old(self): old = { 'theme': { 'colors': { 'accentcolor': '#dfa672', 'textcolor': '#fff', 'toolbar_text': 'rgb(0,12,34)', }, 'images': { 'headerURL': 'path/to/image' } } } new_ = new_69_theme_properties_from_old(old) assert new_ == { 'theme': { 'colors': { 'frame': '#dfa672', 'tab_background_text': '#fff', 'bookmark_text': 'rgb(0,12,34)', }, 'images': { 'theme_frame': 'path/to/image' } } }
def repack_themes_for_69(addon_ids, **kw): log.info( '[%s@%s] Repacking themes to use 69+ properties starting at id: %s...' % (len(addon_ids), recreate_theme_previews.rate_limit, addon_ids[0])) addons = Addon.objects.filter(pk__in=addon_ids).no_transforms() olympia.core.set_user(UserProfile.objects.get(pk=settings.TASK_USER_ID)) for addon in addons: version = addon.current_version log.info('[CHECK] theme [%r] for deprecated properties' % addon) if not version: log.info('[INVALID] theme [%r] has no current_version' % addon) continue pause_all_tasks() try: timer = StopWatch('addons.tasks.repack_themes_for_69') timer.start() old_xpi = get_filepath(version.all_files[0]) old_data = parse_addon(old_xpi, minimal=True) new_data = new_69_theme_properties_from_old(old_data) if new_data != old_data: # if the manifest isn't the same let's repack new_version = new_theme_version_with_69_properties(version) log.info('[SUCCESS] Theme [%r], version [%r] updated to [%r]' % (addon, version, new_version)) else: log.info('[SKIP] No need for theme repack [%s]' % addon.id) timer.log_interval('') except (IOError, ValidationError, JSONDecodeError, SigningError) as ex: log.debug('[FAIL] Theme repack for [%r]:', addon, exc_info=ex) finally: resume_all_tasks()
def test_new_theme_version_with_69_properties(self): core.set_user(user_factory()) addon = addon_factory( type=amo.ADDON_STATICTHEME, version_kw={'version': '1.0'}) old_version = addon.current_version old_file_path = old_version.all_files[0].current_file_path amo.storage_utils.copy_stored_file(self.file_obj_dep, old_file_path) assert os.path.isfile(old_file_path) new_version = new_theme_version_with_69_properties(old_version) assert addon.versions.all().count() == 2 assert addon.current_version == new_version new_file_path = new_version.all_files[0].current_file_path with zipfile.ZipFile(self.file_obj_dep, 'r') as old_xpi: with zipfile.ZipFile(new_file_path, 'r') as new_xpi: assert len(old_xpi.infolist()) == len(new_xpi.infolist()) for entry in old_xpi.infolist(): file_ = entry.filename if file_ == 'manifest.json': old_manifest = json.loads(old_xpi.read(file_)) new_manifest = json.loads(new_xpi.read(file_)) assert old_manifest != new_manifest # need to pop the version as it's been bumped old_ver_num = old_manifest.pop('version') new_ver_num = new_manifest.pop('version') assert old_ver_num != new_ver_num assert new_manifest == ( new_69_theme_properties_from_old(old_manifest)) else: assert old_xpi.read(file_) == new_xpi.read(file_)
def test_new_69_theme_properties_from_old(self): old = { 'theme': { 'colors': { 'accentcolor': '#dfa672', 'textcolor': '#fff', 'toolbar_text': 'rgb(0,12,34)', }, 'images': { 'headerURL': 'path/to/image' } } } new_ = new_69_theme_properties_from_old(old) assert new_ == { 'theme': { 'colors': { 'frame': '#dfa672', 'tab_background_text': '#fff', 'bookmark_text': 'rgb(0,12,34)', }, 'images': { 'theme_frame': 'path/to/image' } } }