0001-manager-load-ajax-assets-size-on-export-site-popup-4.patch
combo/apps/assets/templates/combo/manager_assets_export_size.html | ||
---|---|---|
1 |
({{ size|filesizeformat }}) |
combo/apps/assets/urls.py | ||
---|---|---|
35 | 35 | |
36 | 36 |
urlpatterns = [ |
37 | 37 |
url(r'^assets/(?P<key>[\w_:-]+)$', views.serve_asset), |
38 | 38 |
url(r'^manage/assets/', decorated_includes(manager_required, |
39 | 39 |
include(assets_manager_urls))), |
40 | 40 | |
41 | 41 |
url(r'^api/assets/set/(?P<key>[\w_:-]+)/$', api_views.view_set, |
42 | 42 |
name='api-assets-set'), |
43 |
url(r'^ajax/assets-export-size/$', |
|
44 |
views.assets_export_size, name='combo-manager-assets-export-size'), |
|
43 | 45 |
] |
combo/apps/assets/views.py | ||
---|---|---|
372 | 372 |
geometry_string += 'x%s' % height |
373 | 373 | |
374 | 374 |
# no thumbnail whithout geometry_string or for a svg file |
375 | 375 |
if not geometry_string or asset.asset.name.endswith('svg'): |
376 | 376 |
return redirect(asset.asset.url) |
377 | 377 | |
378 | 378 |
# get or create thumbnail and return url |
379 | 379 |
return redirect(get_thumbnail(asset.asset, geometry_string, **thumb_options).url) |
380 | ||
381 | ||
382 |
class AssetsExportSize(TemplateView): |
|
383 |
template_name = 'combo/manager_assets_export_size.html' |
|
384 | ||
385 |
def get_context_data(self, **kwargs): |
|
386 |
context = super(AssetsExportSize, self).get_context_data(**kwargs) |
|
387 |
media_prefix = default_storage.path('') |
|
388 |
computed_size = 0 |
|
389 |
for basedir, dirnames, filenames in os.walk(media_prefix): |
|
390 |
for filename in filenames: |
|
391 |
computed_size += os.stat(os.path.join(basedir, filename)).st_size |
|
392 |
context['size'] = computed_size |
|
393 |
return context |
|
394 | ||
395 |
assets_export_size = AssetsExportSize.as_view() |
combo/manager/forms.py | ||
---|---|---|
188 | 188 |
self.instance.restricted_to_unlogged = True |
189 | 189 |
self.instance.groups.set(self.cleaned_data['groups']) |
190 | 190 |
self.instance.save() |
191 | 191 |
return self.instance |
192 | 192 | |
193 | 193 | |
194 | 194 |
class SiteImportForm(forms.Form): |
195 | 195 |
site_file = forms.FileField(label=_('Site Export File')) |
196 | ||
197 | ||
198 |
class SiteExportForm(forms.Form): |
|
199 |
include_asset = forms.BooleanField(label=_('Include assets into the export'), required=False) |
combo/manager/templates/combo/site_export.html | ||
---|---|---|
3 | 3 | |
4 | 4 |
{% block appbar %} |
5 | 5 |
<h2>{% trans "Site Export" %}</h2> |
6 | 6 |
{% endblock %} |
7 | 7 | |
8 | 8 |
{% block content %} |
9 | 9 |
<form method="post"> |
10 | 10 |
{% csrf_token %} |
11 |
{{ form.as_p }} |
|
11 |
<p> |
|
12 |
<input type="checkbox" name="include_asset" id="id_include_asset"> |
|
13 |
{% trans 'Include assets into the export' %} |
|
14 |
<span id="assets-export-size-value"></span> |
|
15 |
</input> |
|
16 |
</p> |
|
12 | 17 |
<div class="buttons"> |
13 | 18 |
<button>{% trans 'Export' %}</button> |
14 | 19 |
<a class="cancel" href="{% url 'combo-manager-homepage' %}">{% trans 'Cancel' %}</a> |
15 | 20 |
</div> |
21 |
<script> |
|
22 |
$("#assets-export-size-value").load("{% url 'combo-manager-assets-export-size' %}"); |
|
23 |
</script> |
|
16 | 24 |
</form> |
17 | 25 |
{% endblock %} |
combo/manager/views.py | ||
---|---|---|
39 | 39 |
CreateView, UpdateView, ListView, DeleteView, FormView, TemplateView) |
40 | 40 | |
41 | 41 |
from combo.data.models import Page, CellBase, ParentContentCell, PageSnapshot, LinkListCell |
42 | 42 |
from combo.data.library import get_cell_class |
43 | 43 |
from combo.data.utils import (export_site, export_site_tar, import_site, import_site_tar, |
44 | 44 |
ImportSiteError, MissingGroups) |
45 | 45 |
from combo import plugins |
46 | 46 | |
47 |
from .forms import (PageEditTitleForm, PageVisibilityForm, SiteImportForm, SiteExportForm,
|
|
47 |
from .forms import (PageEditTitleForm, PageVisibilityForm, SiteImportForm, |
|
48 | 48 |
PageEditRedirectionForm, PageSelectTemplateForm, PageEditSlugForm, |
49 | 49 |
PageEditPictureForm, PageEditIncludeInNavigationForm, |
50 | 50 |
PageEditDescriptionForm, CellVisibilityForm, PageDuplicateForm) |
51 | 51 | |
52 | 52 | |
53 | 53 |
class HomepageView(ListView): |
54 | 54 |
model = Page |
55 | 55 |
template_name = 'combo/manager_home.html' |
... | ... | |
60 | 60 |
context['extra_actions'] = plugins.get_extra_manager_actions() |
61 | 61 |
context['collapse_pages'] = settings.COMBO_MANAGE_HOME_COLLAPSE_PAGES |
62 | 62 |
return context |
63 | 63 | |
64 | 64 | |
65 | 65 |
homepage = HomepageView.as_view() |
66 | 66 | |
67 | 67 | |
68 |
class SiteExportView(FormView): |
|
69 |
form_class = SiteExportForm |
|
68 |
class SiteExportView(TemplateView): |
|
70 | 69 |
template_name = 'combo/site_export.html' |
71 | 70 | |
72 | 71 |
def post(self, request, *args, **kwargs): |
73 | 72 |
if request.POST.get('include_asset'): |
74 | 73 |
fd = BytesIO() |
75 | 74 |
export_site_tar(fd) |
76 | 75 |
response = HttpResponse(content=fd.getvalue(), content_type='application/x-tar') |
77 | 76 |
response['Content-Disposition'] = 'attachment; filename="site-export.tar"' |
tests/test_assets.py | ||
---|---|---|
129 | 129 |
fd = open(filename, 'rb') |
130 | 130 |
import_assets(fd, overwrite=True) |
131 | 131 |
assert count_asset_files() == 2 |
132 | 132 |
assert open('%s/assets/test.png' % path, 'r').read() == 'test' |
133 | 133 |
assert open('%s/assets/test2.png' % path, 'r').read() == 'test2' |
134 | 134 |
clean_assets_files() |
135 | 135 |
assert count_asset_files() == 0 |
136 | 136 |
clean_assets_files() |
137 | ||
138 | ||
139 |
def test_assets_export_size_view(app, some_assets): |
|
140 |
resp = app.get(reverse('combo-manager-assets-export-size')) |
|
141 |
assert resp.text.split() == ['(9', 'bytes)'] |
|
137 |
- |