def recreate_theme_previews(addon_ids, **kw): log.info( '[%s@%s] Recreating previews for themes 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() only_missing = kw.get('only_missing', False) for addon in addons: version = addon.current_version if not version: continue try: if only_missing: with_size = ( VersionPreview.objects.filter(version=version) .exclude(sizes={}) .count() ) if with_size == len(amo.THEME_PREVIEW_RENDERINGS): continue log.info('Recreating previews for theme: %s' % addon.id) VersionPreview.objects.filter(version=version).delete() xpi = get_filepath(version.all_files[0]) theme_data = parse_addon(xpi, minimal=True).get('theme', {}) generate_static_theme_preview(theme_data, version.id) except IOError: pass
def recreate_theme_previews(addon_ids, **kw): log.info('[%s@%s] Recreating previews for themes 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() only_missing = kw.get('only_missing', False) for addon in addons: version = addon.current_version if not version: continue try: if only_missing: with_size = (VersionPreview.objects.filter(version=version) .exclude(sizes={}).count()) if with_size == len(amo.THEME_PREVIEW_SIZES): continue log.info('Recreating previews for theme: %s' % addon.id) VersionPreview.objects.filter(version=version).delete() xpi = get_filepath(version.all_files[0]) theme_data = parse_addon(xpi, minimal=True).get('theme', {}) generate_static_theme_preview(theme_data, version.id) except IOError: pass
def recreate_theme_previews(addon_ids, **kw): log.info( '[%s@%s] Recreating previews for themes starting at id: %s...' % (len(addon_ids), recreate_theme_previews.rate_limit, addon_ids[0])) version_ids = Addon.objects.filter( pk__in=addon_ids).values_list('_current_version') versions = Version.objects.filter(pk__in=version_ids) only_missing = kw.get('only_missing', False) renders = { render['full']: { 'thumb_size': render['thumbnail'], 'thumb_format': render['thumbnail_format'], } for render in amo.THEME_PREVIEW_RENDERINGS.values() } for version in versions: try: if only_missing: existing_full_sizes = { tuple(size.get('image', ())) for size in VersionPreview.objects.filter( version=version).values_list('sizes', flat=True) } all_full_sizes_present = not set( renders.keys()) - existing_full_sizes if all_full_sizes_present: # i.e. we have all renders log.info('Resizing thumbnails for theme: %s' % version.addon_id) for preview in list( VersionPreview.objects.filter(version=version)): # so check the thumbnail size/format for each preview render = renders.get(tuple(preview.image_dimensions)) if render and (render['thumb_size'] != tuple( preview.thumbnail_dimensions) or render['thumb_format'] != preview.get_format('thumbnail')): preview.sizes['thumbnail_format'] = render[ 'thumb_format'] preview.sizes['thumbnail'] = render['thumb_size'] resize_image( preview.image_path, preview.thumbnail_path, render['thumb_size'], format=render['thumb_format'], quality=35, ) preview.save() continue # else carry on with a full preview generation log.info('Recreating previews for theme: %s' % version.addon_id) VersionPreview.objects.filter(version=version).delete() xpi = get_filepath(version.all_files[0]) theme_data = parse_addon(xpi, minimal=True).get('theme', {}) generate_static_theme_preview(theme_data, version.id) except IOError: pass index_addons.delay(addon_ids)