general: give assets a stable URI (#24676)

This commit is contained in:
Frédéric Péters 2018-06-20 20:29:56 +02:00
parent 111a5116ab
commit 8fdd36ee31
3 changed files with 13 additions and 0 deletions

View File

@ -30,6 +30,7 @@ assets_manager_urls = [
]
urlpatterns = [
url(r'^assets/(?P<key>[\w_:-]+)$', views.serve_asset),
url(r'^manage/assets/', decorated_includes(manager_required,
include(assets_manager_urls))),
]

View File

@ -20,6 +20,7 @@ from django.conf import settings
from django.core.exceptions import PermissionDenied
from django.core.files.storage import default_storage
from django.core.urlresolvers import reverse, reverse_lazy
from django.http import Http404
from django.shortcuts import redirect
from django.views.generic import TemplateView, ListView, FormView
@ -202,3 +203,11 @@ class SlotAssetDelete(TemplateView):
return redirect(reverse('combo-manager-assets'))
slot_asset_delete = SlotAssetDelete.as_view()
def serve_asset(request, key):
try:
asset = Asset.objects.get(key=key)
return redirect(asset.asset.url)
except (Asset.DoesNotExist, AttributeError):
raise Http404()

View File

@ -676,6 +676,8 @@ def test_asset_slots_management(app, admin_user):
assert '>Delete<' in resp.body
assert Asset.objects.filter(key='collectivity:banner').count() == 1
assert app.get('/assets/collectivity:banner', status=302)['location'].endswith('test.png')
# upload a new version of image
resp = resp.click('Overwrite')
resp.form['upload'] = Upload('test2.png',
@ -692,6 +694,7 @@ def test_asset_slots_management(app, admin_user):
assert '>Delete<' not in resp.body
assert Asset.objects.filter(key='collectivity:banner').count() == 0
resp = app.get('/assets/collectivity:banner', status=404)
def test_menu_json(app, admin_user):
app.get('/manage/menu.json', status=302)