Projet

Général

Profil

0001-assets-add-ckeditor-s-media-files-serving-46262.patch

Serghei Mihai (congés, retour 15/05), 09 novembre 2020 20:30

Télécharger (3,01 ko)

Voir les différences:

Subject: [PATCH] assets: add ckeditor's media files serving (#46262)

 combo/apps/assets/urls.py  |  1 +
 combo/apps/assets/views.py | 21 +++++++++++++++++++++
 tests/test_assets.py       |  7 +++++++
 3 files changed, 29 insertions(+)
combo/apps/assets/urls.py
34 34
]
35 35

  
36 36
urlpatterns = [
37
    url(r'^assets/media/(?P<key>[\w_-]+)$', views.serve_media_asset),
37 38
    url(r'^assets/(?P<key>[\w_:-]+)$', views.serve_asset),
38 39
    url(r'^manage/assets/', decorated_includes(manager_required,
39 40
        include(assets_manager_urls))),
combo/apps/assets/views.py
59 59
    def size(self):
60 60
        return os.stat(default_storage.path(self.filepath)).st_size
61 61

  
62
    def url(self):
63
        return ckeditor.utils.get_media_url(self.filepath)
64

  
62 65
    def thumb(self):
63 66
        if getattr(settings, 'CKEDITOR_IMAGE_BACKEND', None):
64 67
            thumb = ckeditor.utils.get_media_url(
......
355 358

  
356 359

  
357 360
def serve_asset(request, key):
361

  
362
    if key.startswith('media:'):
363
        # search for file in CKEditor media
364
        for asset in CkEditorAsset.get_assets(request):
365
            if not asset.is_image():
366
                continue
367
            root, ext = os.path.splitext(asset.name)
368
            if root == key.replace('media:', ''):
369
                return redirect(asset.url())
370
        raise Http404()
371

  
358 372
    asset = get_object_or_404(Asset, key=key)
359 373

  
360 374
    if not os.path.exists(asset.asset.path):
......
379 393
    return redirect(get_thumbnail(asset.asset, geometry_string, **thumb_options).url)
380 394

  
381 395

  
396
def serve_media_asset(request, key):
397
    for asset in CkEditorAsset.get_assets(request):
398
        if os.path.splitext(asset.name)[0] == key:
399
            return redirect(asset.url())
400
    raise Http404()
401

  
402

  
382 403
class AssetsExportSize(TemplateView):
383 404
    template_name = 'combo/manager_assets_export_size.html'
384 405

  
tests/test_assets.py
143 143
def test_assets_export_size_view(app, some_assets):
144 144
    resp = app.get(reverse('combo-manager-assets-export-size'))
145 145
    assert resp.text.split() == ['(9', 'bytes)']
146

  
147

  
148
def test_serve_media_assets(app, settings):
149
    resp = app.get('/assets/media/test', status=404)
150
    default_storage.save('uploads/test.png', BytesIO(b'test'))
151
    resp = app.get('/assets/media/test', status=302)
152
    assert resp.location == '/media/uploads/test.png'
146
-