Merge pull request #11645 from eviljeff/10785-remove-lwt-from-devhub

rm all the persona stuff from devhub
This commit is contained in:
Andrew Williamson 2019-06-20 02:06:10 +01:00 коммит произвёл GitHub
Родитель ad86204ec5 781db8aeb5
Коммит 64ee56ef4a
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
14 изменённых файлов: 27 добавлений и 353 удалений

Просмотреть файл

@ -657,9 +657,8 @@ class Addon(OnChangeMixin, ModelBase):
def get_dev_url(self, action='edit', args=None, prefix_only=False):
args = args or []
prefix = 'devhub'
type_ = 'themes' if self.type == amo.ADDON_PERSONA else 'addons'
if not prefix_only:
prefix += '.%s' % type_
prefix += '.addons'
view_name = '{prefix}.{action}'.format(prefix=prefix,
action=action)
return reverse(view_name, args=[self.slug] + args)

Просмотреть файл

@ -11,7 +11,7 @@ from olympia.addons.models import Addon
from olympia.amo.decorators import login_required
def dev_required(owner_for_post=False, allow_reviewers=False, theme=False,
def dev_required(owner_for_post=False, allow_reviewers=False,
submitting=False):
"""Requires user to be add-on owner or admin.
@ -22,12 +22,6 @@ def dev_required(owner_for_post=False, allow_reviewers=False, theme=False,
@login_required
@functools.wraps(f)
def wrapper(request, addon, *args, **kw):
if theme:
kw['theme'] = addon.is_persona()
elif addon.is_persona():
# Don't allow theme views if theme not passed in.
raise http.Http404
def fun():
return f(request, addon_id=addon.id, addon=addon, *args, **kw)

Просмотреть файл

@ -26,7 +26,7 @@ from django_statsd.clients import statsd
import olympia.core.logger
from olympia import amo
from olympia.addons.models import Addon, Persona, Preview
from olympia.addons.models import Addon, Preview
from olympia.amo.celery import task
from olympia.amo.decorators import set_modified_on, use_primary_db
from olympia.amo.urlresolvers import reverse
@ -267,7 +267,7 @@ def handle_upload_validation_result(
upload = FileUpload.objects.get(pk=upload_pk)
# Check for API keys in submissions.
# Make sure it is extension-like, e.g. no LWT or search plugin
# Make sure it is extension-like, e.g. no search plugin
try:
results = check_for_api_keys_in_file(results=results, upload=upload)
except (ValidationError, BadZipfile, IOError):
@ -534,30 +534,6 @@ def pngcrush_existing_preview(preview_id):
# automatically if the task was called with set_modified_on_obj=[preview].
@task
@use_primary_db
@set_modified_on
def pngcrush_existing_theme(persona_id):
"""
Call pngcrush_image() on the images of a given Persona object.
"""
log.info('Crushing images for Persona %s', persona_id)
persona = Persona.objects.get(pk=persona_id)
# Only do this on "new" Personas with persona_id = 0, the older ones (with
# a persona_id) have jpeg and not pngs.
if not persona.is_new():
log.info('Aborting images crush for Persona %s (too old).', persona_id)
return
pngcrush_image(persona.preview_path)
# No need to crush thumb_path, it's the same as preview_path for "new"
# Personas.
pngcrush_image(persona.icon_path)
if persona.header:
pngcrush_image(persona.header_path)
if persona.footer:
pngcrush_image(persona.footer_path)
@task
@set_modified_on
def resize_icon(source, dest_folder, target_sizes, **kw):

Просмотреть файл

@ -24,13 +24,8 @@
class="button prominent">{{ _('Submit a New Add-on') }}</a>
</p>
<p class="submit-theme submit-cta">
{% if waffle.switch('disable-lwt-uploads') %}
<a href="{{ url('devhub.submit.agreement') }}"
class="button prominent">{{ _('Submit a New Theme') }}</a>
{% else %}
<a href="{{ url('devhub.themes.submit') }}"
class="button prominent">{{ _('Submit a New Theme') }}</a>
{% endif %}
</p>
<div class="item recent-activity">
<h3>

Просмотреть файл

@ -1,5 +1,5 @@
{% from 'includes/forms.html' import optional %}
{% set title = _('Delete Theme') if addon.is_persona() else _('Delete Add-on') %}
{% set title = _('Delete Add-on') %}
<form method="post" action="{{ addon.get_dev_url('delete') }}">
{% csrf_token %}
<h3>
@ -7,18 +7,14 @@
</h3>
{% if addon.is_soft_deleteable() %}
<p class="warning">
{% if addon.is_persona() %}
{{ _('Deleting your theme will permanently remove it from the site.') }}
{% else %}
<b>
<b>
{% trans %}
Deleting your add-on will permanently delete all versions and files you
have submitted for this add-on, listed or not. The add-on ID will
continue to be linked to your account, so others won't be able to submit
versions using the same ID.
{% endtrans %}
</b>
{% endif %}
</b>
</p>
{% endif %}
<p>
@ -31,11 +27,7 @@
<input type="hidden" name="addon_id" class="addon_id" value="{{ addon.id }}">
<p>
<label for="id_reason">
{% if addon.is_persona() %}
{{ _('Please tell us why you are deleting your theme:') }}
{% else %}
{{ _('Please tell us why you are deleting your add-on:') }}
{% endif %}
{{ _('Please tell us why you are deleting your add-on:') }}
{{ optional() -}}
</label>
<textarea name="reason" id="id_reason"></textarea>

Просмотреть файл

@ -1,35 +0,0 @@
<h5>{{ _('Actions') }}</h5>
<ul>
{% if check_addon_ownership(request, addon, dev=True) %}
<li>
<a href="{{ addon.get_dev_url() }}" class="tooltip"
title="{{ _("Edit details on this theme's product page") }}">
{{ _('Edit Product Page') }}</a>
</li>
{% endif %}
<li>
<a href="{{ url('devhub.feed', addon.slug) }}">
{{ _('View Recent Changes') }}</a>
</li>
<li>
<a href="{{ url('stats.usage', addon.slug) }}" class="tooltip"
title="{{ _("View the popularity of this theme over time") }}">
{{ _('View Statistics') }}</a>
</li>
{% if check_addon_ownership(request, addon) %}
<li>
<a href="{{ addon.get_dev_url() }}#ownership" class="tooltip"
title="{{ _("Change the owner of this theme") }}">
{{ _('Transfer Ownership') }}</a>
</li>
{% if addon.can_be_deleted() %}
<li>
<a href="#" class="delete-addon tooltip"
title="{{ _('Delete this theme') }}">{{ _('Delete') }}</a>
<div class="modal-delete modal hidden">
{% include "devhub/addons/listing/delete_form.html" %}
</div>
</li>
{% endif %}
{% endif %}
</ul>

Просмотреть файл

@ -19,38 +19,11 @@
</div>
{% endif %}
<ul class="item-details">
{% if addon.is_persona() %}
{# L10n: {0} is a date. #}
<li class="date-created">{{ _('<strong>Created:</strong> {0}'|format_html(addon.created|date)) }}</li>
<li id="version-status-item">
<strong>{{ _('Status:') }}</strong>
{% if addon.disabled_by_user %}
<span class="{{ status_class(addon) }}"><b>{{ _('Disabled') }}</b></span>
{% else %}
<span class="{{ status_class(addon) }}">
<b>{{ addon.STATUS_CHOICES[addon.status] }}</b></span>
{% endif %}
</li>
{% with position = get_position(addon) %}
{% if position.pos and position.total %}
<li class="queue-position">
{% trans pos=position.pos|numberfmt, total=position.total|numberfmt %}
<b>Queue position:</b> {{ pos }} of {{ total }}
{% endtrans %}
</li>
{% endif %}
{% endwith %}
{% else %}
{% include "devhub/includes/addon_details.html" %}
{% endif %}
{% include "devhub/includes/addon_details.html" %}
</ul>
{% endif %}
<div class="item-actions">
{% if addon.is_persona() %}
{% include "devhub/addons/listing/item_actions_theme.html" %}
{% else %}
{% include "devhub/addons/listing/item_actions.html" %}
{% endif %}
{% include "devhub/addons/listing/item_actions.html" %}
</div>
</div>
</div>

Просмотреть файл

@ -4,8 +4,6 @@
{% if is_complete %}<a href="{{ addon.get_dev_url() }}">{% endif %}
{% if addon.type == amo.ADDON_STATICTHEME and addon.current_previews %}
{% set icon_url = addon.current_previews[0].thumbnail_url %}
{% elif addon.type == amo.ADDON_PERSONA %}
{% set icon_url = addon.persona.preview_url %}
{% else %}
{% set icon_url = addon.get_icon_url(64) %}
{% endif %}

Просмотреть файл

@ -5,16 +5,10 @@
{% set status_text = addon.STATUS_CHOICES[addon.status] %}
{% endif %}
{% if addon.is_persona() %}
<span class="DevHub-MyAddons-version-{{ status_class(addon) }} DevHub-MyAddons-VersionStatus">
{{ status_text }}
</span>
{% else %}
{% set url = addon.get_dev_url('versions') %}
{% set url = addon.get_dev_url('versions') %}
<a class="DevHub-MyAddons-version-{{ status_class(addon) }} DevHub-MyAddons-VersionStatus" href="{{ url }}">
{{ status_text }}
</a>
{% endif %}
{% endmacro %}
<div class="DevHub-MyAddons content">
@ -126,11 +120,7 @@
<a class="DevHub-MyAddons-item-buttons-all" href="{{ url('devhub.addons') }}">{{ _('View All Submissions') }}</a>
<div class="DevHub-MyAddons-item-buttons-submit">
<a href="{{ url('devhub.submit.agreement') }}" class="Button">{{ _('Submit a New Add-on') }}</a>
{% if waffle.switch('disable-lwt-uploads') %}
<a href="{{ url('devhub.submit.agreement') }}" class="Button">{{ _('Submit a New Theme') }}</a>
{% else %}
<a href="{{ url('devhub.themes.submit') }}" class="Button">{{ _('Submit a New Theme') }}</a>
{% endif %}
<a href="{{ url('devhub.submit.agreement') }}" class="Button">{{ _('Submit a New Theme') }}</a>
</div>
</div>
{% else %}
@ -142,11 +132,7 @@
{% endtrans %}
</p>
<a href="{{ url('devhub.submit.agreement') }}" class="Button">{{ _('Submit Your First Add-on') }}</a>
{% if waffle.switch('disable-lwt-uploads') %}
<a href="{{ url('devhub.submit.agreement') }}" class="Button">{{ _('Submit Your First Theme') }}</a>
{% else %}
<a href="{{ url('devhub.themes.submit') }}" class="Button">{{ _('Submit Your First Theme') }}</a>
{% endif %}
<a href="{{ url('devhub.submit.agreement') }}" class="Button">{{ _('Submit Your First Theme') }}</a>
{% endif %}
</div>
</div>

Просмотреть файл

@ -1,66 +0,0 @@
{% extends "devhub/base_impala.html" %}
{% from "includes/forms.html" import pretty_field, required, tip %}
{% from "devhub/includes/macros.html" import some_html_tip %}
{% set title = _('Edit Product Page') %}
{% block title %}
{{ dev_page_title(title, addon) }}
{% endblock %}
{% set can_delete = check_addon_ownership(request, addon) and addon.can_be_deleted() %}
{% block content %}
<section class="primary full">
{{ l10n_menu(addon.default_locale) }}
<h1>{{ title }}</h1>
<div class="island swagger theme-info c">
<div class="addon-name-and-icon c">
<img class="addon-icon" src="{{ addon.get_icon_url(32) }}" alt="">
<h2 class="addon-name">{{ addon.name }}</h2>
</div>
<div>
{{ persona_preview(persona, linked=False) }}
<div class="info">
<p>
<strong>{{ _('Status:') }}</strong>
<span class="{{ status_class(addon) }}"><b>{{ addon.STATUS_CHOICES[addon.status] }}</b></span>
</p>
{% set position = get_position(addon) %}
{% if position and position.pos and position.total %}
<p>
<strong>{{ _('Queue Position:') }}</strong>
{% trans position=position.pos|numberfmt,
total=position.total|numberfmt %}
{{ position }} of {{ total }}
{% endtrans %}
</p>
{% endif %}
{% if addon.status == amo.STATUS_APPROVED or addon.status == amo.STATUS_PENDING %}
<p><a href="{{ addon.get_url_path() }}">{{ _('View Product Page') }}</a></p>
{% endif %}
<p><a href="{{ url('devhub.feed', addon.slug) }}">
{{ _('View Recent Changes') }}</a></p>
{% if waffle.switch('theme-stats') %}
<p><a href="{{ url('stats.usage', addon.slug) }}">{{ _('View Statistics') }}</a></p>
{% endif %}
{% if can_delete %}
<a href="#" class="button scary delete-addon">{{ _('Delete Theme') }}</a>
<div class="modal-delete modal hidden">
{% include 'devhub/addons/listing/delete_form.html' %}
</div>
{% endif %}
</div>
</div>
<p>
<h1 class="error">{{ _('Lightweight Theme editing has been disabled.') }}</h1>
</p>
</div>
</section>
{% endblock %}

Просмотреть файл

@ -135,12 +135,6 @@ class TestDashboard(HubTest):
def test_themes(self):
"""Check themes show on dashboard."""
# Create 2 themes.
lwts = []
for x in range(2):
addon = addon_factory(
type=amo.ADDON_PERSONA, users=[self.user_profile])
lwts.append(addon)
# And 2 static themes.
staticthemes = []
for x in range(2):
addon = addon_factory(
@ -149,32 +143,12 @@ class TestDashboard(HubTest):
staticthemes.append(addon)
response = self.client.get(self.themes_url)
doc = pq(response.content)
assert len(doc('.item .item-info')) == 4
assert len(doc('.item .info.persona')) == 2
assert len(doc('.item .item-info')) == 2
assert len(doc('.item .info.statictheme')) == 2
for addon in lwts:
assert addon.persona.preview_url in [
img.attrib['src'] for img in doc('.item .info.persona h3 img')]
for addon in staticthemes:
assert addon.current_previews[0].thumbnail_url in [
img.attrib['src'] for img in doc('.info.statictheme h3 img')]
@override_switch('disable-lwt-uploads', active=False)
def test_disable_lwt_uploads_waffle_disabled(self):
response = self.client.get(self.themes_url)
doc = pq(response.content)
assert doc('.submit-theme.submit-cta a').attr('href') == (
reverse('devhub.themes.submit')
)
@override_switch('disable-lwt-uploads', active=True)
def test_disable_lwt_uploads_waffle_enabled(self):
response = self.client.get(self.themes_url)
doc = pq(response.content)
assert doc('.submit-theme.submit-cta a').attr('href') == (
reverse('devhub.submit.agreement')
)
def test_show_hide_statistics_and_new_version_for_disabled(self):
# Not disabled: show statistics and new version links.
self.addon.update(disabled_by_user=False)
@ -240,25 +214,6 @@ class TestDashboard(HubTest):
trim_whitespace(
format_date(self.addon.last_updated)))
def test_no_sort_updated_filter_for_themes(self):
# Create a theme.
addon = addon_factory(type=amo.ADDON_PERSONA)
addon.addonuser_set.create(user=self.user_profile)
# There's no "updated" sort filter, so order by the default: "Created".
response = self.client.get(self.themes_url + '?sort=updated')
doc = pq(response.content)
assert doc('#sorter li.selected').text() == 'Created'
sorts = doc('#sorter li a.opt')
assert not any('?sort=updated' in a.attrib['href'] for a in sorts)
# No "updated" in details.
assert doc('.item-details .date-updated') == []
# There's no "last updated" for themes, so always display "created".
elm = doc('.item-details .date-created')
assert elm.remove('strong').text() == (
trim_whitespace(format_date(addon.created)))
def test_purely_unlisted_addon_are_not_shown_as_incomplete(self):
self.make_addon_unlisted(self.addon)
assert self.addon.has_complete_metadata()
@ -470,28 +425,6 @@ class TestDelete(TestCase):
assert self.get_addon().exists()
self.assert3xx(response, self.get_addon()[0].get_dev_url('versions'))
def test_post_lwtheme(self):
theme = addon_factory(
name='xpi name', type=amo.ADDON_PERSONA, slug='theme-slug',
users=[self.user])
response = self.client.post(
theme.get_dev_url('delete'), {'slug': 'theme-slug'}, follow=True)
assert pq(response.content)('.notification-box').text() == (
'Theme deleted.')
assert not Addon.objects.filter(id=theme.id).exists()
self.assert3xx(response, reverse('devhub.themes'))
def test_post_lwtheme_wrong_slug(self):
theme = addon_factory(
name='xpi name', type=amo.ADDON_PERSONA, slug='theme-slug',
users=[self.user])
response = self.client.post(
theme.get_dev_url('delete'), {'slug': 'addon-slug'}, follow=True)
assert pq(response.content)('.notification-box').text() == (
'URL name was incorrect. Theme was not deleted.')
assert Addon.objects.filter(id=theme.id).exists()
self.assert3xx(response, theme.get_dev_url())
def test_post_statictheme(self):
theme = addon_factory(
name='xpi name', type=amo.ADDON_STATICTHEME, slug='stheme-slug',
@ -557,25 +490,6 @@ class TestHome(TestCase):
href = addon_list.find('.DevHub-MyAddons-item-versions a').attr('href')
assert href == self.addon.get_dev_url('versions')
def test_my_addons_persona_versions_link(self):
"""References https://github.com/mozilla/addons-server/issues/4283
Make sure that a call to a persona doesn't result in a 500."""
assert self.client.login(email='del@icio.us')
user_profile = UserProfile.objects.get(email='del@icio.us')
addon_factory(type=amo.ADDON_PERSONA, users=[user_profile])
doc = self.get_pq()
addon_list = doc('.DevHub-MyAddons-list')
assert len(addon_list.find('.DevHub-MyAddons-item')) == 2
span_text = (
addon_list.find('.DevHub-MyAddons-item')
.eq(0)
.find('span.DevHub-MyAddons-VersionStatus').text())
assert span_text == 'Approved'
def test_my_addons(self):
statuses = [
(amo.STATUS_NOMINATED, amo.STATUS_AWAITING_REVIEW,
@ -1717,19 +1631,12 @@ class TestRedirects(TestCase):
self.assert3xx(
response, reverse('devhub.addons.versions', args=['a3615']), 301)
@override_switch('disable-lwt-uploads', active=True)
def test_lwt_submit_redirects_to_addon_submit(self):
url = reverse('devhub.themes.submit')
response = self.client.get(url, follow=True)
self.assert3xx(
response, reverse('devhub.submit.distribution'), 302)
@override_switch('disable-lwt-uploads', active=False)
def test_lwt_submit_no_redirect_when_waffle_offf(self):
url = reverse('devhub.themes.submit')
response = self.client.get(url, follow=True)
assert response.status_code == 200
class TestHasCompleteMetadataRedirects(TestCase):
"""Make sure Addons that are not complete in some way are correctly

Просмотреть файл

@ -1073,13 +1073,6 @@ class TestEditMedia(BaseTestEdit):
result = json.loads(force_text(self.client.get(self.url).content))
assert not result['previews']
def test_image_status_persona(self):
self.setup_image_status()
storage.delete(self.icon_dest)
self.get_addon().update(type=amo.ADDON_PERSONA)
result = json.loads(force_text(self.client.get(self.url).content))
assert result['icons']
def test_image_status_default(self):
self.setup_image_status()
storage.delete(self.icon_dest)
@ -1544,7 +1537,7 @@ class TestEditAdditionalDetailsUnlisted(BaseTestEditAdditionalDetails):
class TestEditTechnical(BaseTestEdit):
__test__ = True
fixtures = BaseTestEdit.fixtures + [
'addons/persona', 'base/addon_40', 'base/addon_1833_yoono',
'base/addon_40', 'base/addon_1833_yoono',
'base/addon_4664_twitterbar.json',
'base/addon_5299_gcal', 'base/addon_6113']

Просмотреть файл

@ -9,16 +9,6 @@ from olympia.lib.misc.urlconf_decorator import decorate
from . import views
# These will all start with /theme/<slug>/
theme_detail_patterns = [
url(r'^$', lambda r,
addon_id: redirect('devhub.themes.edit', addon_id, permanent=True)),
url(r'^delete$', views.delete, name='devhub.themes.delete'),
url(r'^edit$', views.edit_theme, name='devhub.themes.edit'),
url(r'^rmlocale$', views.remove_locale,
name='devhub.themes.remove-locale'),
]
# These will all start with /addon/<addon_id>/
detail_patterns = [
# Redirect to the edit page from the base.
@ -186,10 +176,9 @@ urlpatterns = decorate(use_primary_db, [
url(r'^ajax/addon/%s/' % ADDON_ID, include(ajax_patterns)),
# Themes submission.
# Old LWT Theme submission.
url(r'^theme/submit/?$', lambda r: redirect('devhub.submit.agreement'),
name='devhub.themes.submit'),
url(r'^theme/%s/' % ADDON_ID, include(theme_detail_patterns)),
# Add-on SDK page
url(r'builder$', lambda r: redirect(views.MDN_BASE)),

Просмотреть файл

@ -95,13 +95,13 @@ class ThemeFilter(BaseFilter):
def addon_listing(request, theme=False):
"""Set up the queryset and filtering for addon listing for Dashboard."""
if theme:
qs = request.user.addons.filter(
type__in=[amo.ADDON_PERSONA, amo.ADDON_STATICTHEME])
qs = Addon.objects.filter(
authors=request.user, type=amo.ADDON_STATICTHEME)
filter_cls = ThemeFilter
default = 'created'
else:
qs = Addon.objects.filter(authors=request.user).exclude(
type__in=[amo.ADDON_PERSONA, amo.ADDON_STATICTHEME])
type=amo.ADDON_STATICTHEME)
filter_cls = AddonFilter
default = 'updated'
filter_ = filter_cls(request, qs, 'sort', default)
@ -332,15 +332,9 @@ def edit(request, addon_id, addon):
return render(request, 'devhub/addons/edit.html', data)
@dev_required(theme=True)
def edit_theme(request, addon_id, addon, theme=False):
return render(request, 'devhub/personas/edit.html', {
'addon': addon, 'persona': addon.persona})
@dev_required(owner_for_post=True, theme=True)
@dev_required(owner_for_post=True)
@post_required
def delete(request, addon_id, addon, theme=False):
def delete(request, addon_id, addon):
# Database deletes only allowed for free or incomplete addons.
if not addon.can_be_deleted():
msg = ugettext(
@ -348,7 +342,7 @@ def delete(request, addon_id, addon, theme=False):
messages.error(request, msg)
return redirect(addon.get_dev_url('versions'))
any_theme = theme or addon.type == amo.ADDON_STATICTHEME
any_theme = addon.type == amo.ADDON_STATICTHEME
form = forms.DeleteForm(request.POST, addon=addon)
if form.is_valid():
reason = form.cleaned_data.get('reason', '')
@ -364,8 +358,7 @@ def delete(request, addon_id, addon, theme=False):
ugettext('URL name was incorrect. Theme was not deleted.')
if any_theme else
ugettext('URL name was incorrect. Add-on was not deleted.'))
return redirect(
addon.get_dev_url() if theme else addon.get_dev_url('versions'))
return redirect(addon.get_dev_url('versions'))
@dev_required
@ -844,15 +837,12 @@ def addons_section(request, addon_id, addon, section, editable=False):
@never_cache
@dev_required(theme=True)
@dev_required
@json_view
def image_status(request, addon_id, addon, theme=False):
def image_status(request, addon_id, addon):
# Default icon needs no checking.
if not addon.icon_type or addon.icon_type.split('/')[0] == 'icon':
icons = True
# Persona icon is handled differently.
elif addon.type == amo.ADDON_PERSONA:
icons = True
else:
icons = storage.exists(os.path.join(addon.get_icon_dir(),
'%s-32.png' % addon.id))
@ -880,7 +870,6 @@ def upload_image(request, addon_id, addon, upload_type):
fd.write(chunk)
is_icon = upload_type == 'icon'
is_persona = upload_type.startswith('persona_')
is_preview = upload_type == 'preview'
image_check = amo_utils.ImageCheck(upload_preview)
is_animated = image_check.is_animated() # will also cache .is_image()
@ -900,8 +889,6 @@ def upload_image(request, addon_id, addon, upload_type):
if is_icon:
max_size = settings.MAX_ICON_UPLOAD_SIZE
elif is_persona:
max_size = settings.MAX_PERSONA_UPLOAD_SIZE
else:
max_size = None
@ -910,20 +897,6 @@ def upload_image(request, addon_id, addon, upload_type):
errors.append(
ugettext('Please use images smaller than %dMB.')
% (max_size // 1024 // 1024))
if is_persona:
errors.append(
ugettext('Images cannot be larger than %dKB.')
% (max_size // 1024))
if image_check.is_image() and is_persona:
persona, img_type = upload_type.split('_') # 'header' or 'footer'
expected_size = amo.PERSONA_IMAGE_SIZES.get(img_type)[1]
actual_size = image_check.size
if actual_size != expected_size:
# L10n: {0} is an image width (in pixels), {1} is a height.
errors.append(ugettext('Image must be exactly {0} pixels '
'wide and {1} pixels tall.')
.format(expected_size[0], expected_size[1]))
content_waffle = waffle.switch_is_active('content-optimization')
if image_check.is_image() and content_waffle and is_preview:
@ -1617,9 +1590,9 @@ def submit_version_finish(request, addon_id, addon, version_id):
return _submit_finish(request, addon, version)
@dev_required(theme=True)
@dev_required
@post_required
def remove_locale(request, addon_id, addon, theme):
def remove_locale(request, addon_id, addon):
POST = request.POST
if 'locale' in POST and POST['locale'] != addon.default_locale:
addon.remove_locale(POST['locale'])