Projet

Général

Profil

0001-general-give-assets-a-stable-URI-24676.patch

Frédéric Péters, 20 juin 2018 20:30

Télécharger (2,67 ko)

Voir les différences:

Subject: [PATCH] general: give assets a stable URI (#24676)

 combo/apps/assets/urls.py  |  1 +
 combo/apps/assets/views.py | 11 +++++++++++
 tests/test_manager.py      |  3 +++
 3 files changed, 15 insertions(+)
combo/apps/assets/urls.py
30 30
]
31 31

  
32 32
urlpatterns = [
33
    url(r'^assets/(?P<key>[\w_:-]+)$', views.serve_asset),
33 34
    url(r'^manage/assets/', decorated_includes(manager_required,
34 35
        include(assets_manager_urls))),
35 36
]
combo/apps/assets/views.py
20 20
from django.core.exceptions import PermissionDenied
21 21
from django.core.files.storage import default_storage
22 22
from django.core.urlresolvers import reverse, reverse_lazy
23
from django.http import Http404
23 24
from django.shortcuts import redirect
25
from django.views import static
24 26
from django.views.generic import TemplateView, ListView, FormView
25 27

  
26 28
import ckeditor
......
202 204
        return redirect(reverse('combo-manager-assets'))
203 205

  
204 206
slot_asset_delete = SlotAssetDelete.as_view()
207

  
208

  
209
def serve_asset(request, *args, **kwargs):
210
    try:
211
        asset = Asset.objects.get(key=kwargs['key'])
212
        path = asset.asset.path
213
    except (Asset.DoesNotExist, AttributeError):
214
        raise Http404()
215
    return static.serve(request, path, document_root='/')
tests/test_manager.py
676 676
        assert '>Delete<' in resp.body
677 677
        assert Asset.objects.filter(key='collectivity:banner').count() == 1
678 678

  
679
        assert app.get('/assets/collectivity:banner')['content-type'] == 'image/png'
680

  
679 681
        # upload a new version of image
680 682
        resp = resp.click('Overwrite')
681 683
        resp.form['upload'] = Upload('test2.png',
......
692 694
        assert '>Delete<' not in resp.body
693 695
        assert Asset.objects.filter(key='collectivity:banner').count() == 0
694 696

  
697
        resp = app.get('/assets/collectivity:banner', status=404)
695 698

  
696 699
def test_menu_json(app, admin_user):
697 700
    app.get('/manage/menu.json', status=302)
698
-