Merge pull request #11645 from eviljeff/10785-remove-lwt-from-devhub
rm all the persona stuff from devhub
This commit is contained in:
Коммит
64ee56ef4a
|
@ -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'])
|
||||
|
|
Загрузка…
Ссылка в новой задаче