예제 #1
0
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()
예제 #2
0
    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_)
예제 #3
0
 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'
             }
         }
     }
예제 #4
0
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()
예제 #5
0
파일: test_utils.py 프로젝트: diox/olympia
    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_)
예제 #6
0
파일: test_utils.py 프로젝트: diox/olympia
 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'
             }
         }
     }