Projet

Général

Profil

0001-manager-load-ajax-assets-size-on-export-site-popup-4.patch

Nicolas Roche, 28 juillet 2020 11:10

Télécharger (6,91 ko)

Voir les différences:

Subject: [PATCH] manager: load (ajax) assets size on export site popup
 (#45466)

 .../combo/manager_assets_export_size.html        |  1 +
 combo/apps/assets/urls.py                        |  2 ++
 combo/apps/assets/views.py                       | 16 ++++++++++++++++
 combo/manager/forms.py                           |  4 ----
 combo/manager/templates/combo/site_export.html   | 10 +++++++++-
 combo/manager/views.py                           |  5 ++---
 tests/test_assets.py                             |  5 +++++
 7 files changed, 35 insertions(+), 8 deletions(-)
 create mode 100644 combo/apps/assets/templates/combo/manager_assets_export_size.html
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
-