Projet

Général

Profil

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

Nicolas Roche, 21 septembre 2020 12:06

Télécharger (7,38 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                           |  7 +++----
 tests/test_assets.py                             |  5 +++++
 7 files changed, 36 insertions(+), 9 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
248 248
            self.instance.restricted_to_unlogged = True
249 249
            self.instance.groups.set(self.cleaned_data['groups'])
250 250
        self.instance.save()
251 251
        return self.instance
252 252

  
253 253

  
254 254
class SiteImportForm(forms.Form):
255 255
    site_file = forms.FileField(label=_('Site Export File'))
256

  
257

  
258
class SiteExportForm(forms.Form):
259
    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
30 30
from django.shortcuts import get_object_or_404
31 31
from django.utils.translation import ugettext_lazy as _
32 32
from django.utils.encoding import force_text, force_bytes
33 33
from django.utils.formats import date_format
34 34
from django.utils.six import BytesIO
35 35
from django.utils.timezone import localtime
36 36
from django.views.decorators.csrf import requires_csrf_token
37 37
from django.views.generic import (RedirectView, DetailView,
38
        CreateView, UpdateView, ListView, DeleteView, FormView)
38
        CreateView, UpdateView, ListView, DeleteView, FormView, TemplateView)
39 39

  
40 40
from combo.data.models import Page, CellBase, ParentContentCell, PageSnapshot, LinkListCell
41 41
from combo.data.library import get_cell_class
42 42
from combo.data.utils import (
43 43
    export_site, export_site_tar, import_site, import_site_tar, ImportSiteError)
44 44
from combo import plugins
45 45

  
46
from .forms import (PageAddForm, PageEditTitleForm, PageVisibilityForm, SiteImportForm, SiteExportForm,
46
from .forms import (PageAddForm, PageEditTitleForm, PageVisibilityForm, SiteImportForm,
47 47
        PageEditRedirectionForm, PageSelectTemplateForm, PageEditSlugForm,
48 48
        PageEditPictureForm, PageEditIncludeInNavigationForm,
49 49
        PageEditDescriptionForm, CellVisibilityForm, PageDuplicateForm, PageExportForm)
50 50

  
51 51

  
52 52
class HomepageView(ListView):
53 53
    model = Page
54 54
    template_name = 'combo/manager_home.html'
......
59 59
        context['extra_actions'] = plugins.get_extra_manager_actions()
60 60
        context['collapse_pages'] = settings.COMBO_MANAGE_HOME_COLLAPSE_PAGES
61 61
        return context
62 62

  
63 63

  
64 64
homepage = HomepageView.as_view()
65 65

  
66 66

  
67
class SiteExportView(FormView):
68
    form_class = SiteExportForm
67
class SiteExportView(TemplateView):
69 68
    template_name = 'combo/site_export.html'
70 69

  
71 70
    def post(self, request, *args, **kwargs):
72 71
        if request.POST.get('include_asset'):
73 72
            fd = BytesIO()
74 73
            export_site_tar(fd)
75 74
            response = HttpResponse(content=fd.getvalue(), content_type='application/x-tar')
76 75
            response['Content-Disposition'] = 'attachment; filename="site-export.tar"'
tests/test_assets.py
133 133
    fd = open(filename, 'rb')
134 134
    import_assets(fd, overwrite=True)
135 135
    assert count_asset_files() == 2
136 136
    assert open('%s/assets/test.png' % path, 'r').read() == 'test'
137 137
    assert open('%s/assets/test2.png' % path, 'r').read() == 'test2'
138 138
    clean_assets_files()
139 139
    assert count_asset_files() == 0
140 140
    clean_assets_files()
141

  
142

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