Non ascii slugs are now displayed right on Step 7 of submission (bug 621568)
This commit is contained in:
Родитель
8741056401
Коммит
47a73a73b9
|
@ -1,5 +1,7 @@
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
import urllib
|
||||||
|
|
||||||
|
import chardet
|
||||||
import jinja2
|
import jinja2
|
||||||
from jingo import register
|
from jingo import register
|
||||||
from tower import ugettext as _, ungettext as ngettext
|
from tower import ugettext as _, ungettext as ngettext
|
||||||
|
@ -113,3 +115,18 @@ def summarize_validation(validation):
|
||||||
warnings = ngettext('{0} warning', '{0} warnings',
|
warnings = ngettext('{0} warning', '{0} warnings',
|
||||||
validation.warnings).format(validation.warnings)
|
validation.warnings).format(validation.warnings)
|
||||||
return "%s, %s" % (errors, warnings)
|
return "%s, %s" % (errors, warnings)
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter
|
||||||
|
def display_url(url):
|
||||||
|
"""Display a URL like the browser URL bar would.
|
||||||
|
|
||||||
|
Note: returns a Unicode object, not a valid URL.
|
||||||
|
"""
|
||||||
|
if isinstance(url, unicode):
|
||||||
|
# Byte sequences will be url encoded so convert
|
||||||
|
# to bytes here just to stop auto decoding.
|
||||||
|
url = url.encode('utf8')
|
||||||
|
bytes = urllib.unquote(url)
|
||||||
|
c = chardet.detect(bytes)
|
||||||
|
return bytes.decode(c['encoding'], 'replace')
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a id="submitted-addon-url" href="{{ addon.get_url_path() }}">
|
<a id="submitted-addon-url" href="{{ addon.get_url_path() }}">
|
||||||
{{ addon.get_url_path()|absolutify }}</a>
|
{{ addon.get_url_path()|absolutify|display_url }}</a>
|
||||||
</p>
|
</p>
|
||||||
<div class="done-next-steps">
|
<div class="done-next-steps">
|
||||||
<p><strong>{{ _('Next steps:') }}</strong></p>
|
<p><strong>{{ _('Next steps:') }}</strong></p>
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
# -*- coding: utf8 -*-
|
||||||
import unittest
|
import unittest
|
||||||
|
import urllib
|
||||||
|
|
||||||
from django.utils import translation
|
from django.utils import translation
|
||||||
|
|
||||||
|
@ -117,3 +119,25 @@ def test_summarize_validation():
|
||||||
eq_(render('{{ summarize_validation(validation) }}',
|
eq_(render('{{ summarize_validation(validation) }}',
|
||||||
{'validation': v}),
|
{'validation': v}),
|
||||||
u'2 errors, 2 warnings')
|
u'2 errors, 2 warnings')
|
||||||
|
|
||||||
|
|
||||||
|
class TestDisplayUrl(unittest.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.raw_url = u'http://host/%s' % 'フォクすけといっしょ'.decode('utf8')
|
||||||
|
|
||||||
|
def test_utf8(self):
|
||||||
|
url = urllib.quote(self.raw_url.encode('utf8'))
|
||||||
|
eq_(render('{{ url|display_url }}', {'url':url}),
|
||||||
|
self.raw_url)
|
||||||
|
|
||||||
|
def test_unicode(self):
|
||||||
|
url = urllib.quote(self.raw_url.encode('utf8'))
|
||||||
|
url = unicode(url, 'utf8')
|
||||||
|
eq_(render('{{ url|display_url }}', {'url':url}),
|
||||||
|
self.raw_url)
|
||||||
|
|
||||||
|
def test_euc_jp(self):
|
||||||
|
url = urllib.quote(self.raw_url.encode('euc_jp'))
|
||||||
|
eq_(render('{{ url|display_url }}', {'url':url}),
|
||||||
|
self.raw_url)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# -*- coding: utf8 -*-
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
@ -2840,6 +2841,17 @@ class TestSubmitStep7(TestSubmitBase):
|
||||||
follow=True)
|
follow=True)
|
||||||
self.assertRedirects(r, reverse('devhub.versions', args=['a3615']))
|
self.assertRedirects(r, reverse('devhub.versions', args=['a3615']))
|
||||||
|
|
||||||
|
def test_display_non_ascii_url(self):
|
||||||
|
addon = Addon.objects.get(pk=3615)
|
||||||
|
addon.update(slug='フォクすけといっしょ')
|
||||||
|
r = self.client.get(reverse('devhub.submit.7', args=['フォクすけといっしょ']))
|
||||||
|
eq_(r.status_code, 200)
|
||||||
|
# The meta charset will always be utf-8.
|
||||||
|
doc = pq(r.content.decode('utf-8'))
|
||||||
|
eq_(doc('#submitted-addon-url').text(),
|
||||||
|
u'%s/en-US/firefox/addon/%s/' % (settings.SITE_URL,
|
||||||
|
'フォクすけといっしょ'.decode('utf8')))
|
||||||
|
|
||||||
|
|
||||||
class TestResumeStep(TestSubmitBase):
|
class TestResumeStep(TestSubmitBase):
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче