0001-assets-add-ckeditor-s-media-files-serving-46262.patch
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 |
- |