From 91adb6e0b2fa05d4f52983d7143b533f9ed86cb8 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Mon, 28 Sep 2020 10:15:50 +0200 Subject: [PATCH] misc: set Content-Disposition header for exports (#47060) --- bijoe/visualization/views.py | 7 +++++++ tests/test_views.py | 6 +++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/bijoe/visualization/views.py b/bijoe/visualization/views.py index 6500458..05d18a7 100644 --- a/bijoe/visualization/views.py +++ b/bijoe/visualization/views.py @@ -23,6 +23,7 @@ from django.conf import settings from django.contrib import messages from django.utils.encoding import force_bytes, force_text from django.utils.text import slugify +from django.utils.timezone import now from django.utils.translation import ungettext, ugettext as _ from django.views.generic.edit import CreateView, DeleteView, UpdateView, FormView from django.views.generic.list import MultipleObjectMixin @@ -369,6 +370,9 @@ class ExportVisualizationView(views.AuthorizationMixin, DetailView): def get(self, request, *args, **kwargs): response = HttpResponse(content_type='application/json') + response['Content-Disposition'] = ( + 'attachment; filename="%s"' % 'export_stats_%s.json' % now().strftime('%Y%m%d') + ) json.dump({'visualizations': [self.get_object().export_json()]}, response, indent=2) return response @@ -414,6 +418,9 @@ class VisualizationsExportView(views.AuthorizationMixin, View): def get(self, request, *args, **kwargs): response = HttpResponse(content_type='application/json') + response['Content-Disposition'] = ( + 'attachment; filename="%s"' % 'export_stats_%s.json' % now().strftime('%Y%m%d') + ) json.dump(export_site(), response, indent=2) return response diff --git a/tests/test_views.py b/tests/test_views.py index 42a66ce..154dec1 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -167,12 +167,14 @@ def test_visualization_cube_view_errors(schema1, app, admin): app.get('/visualization/warehouse/schema1/fact1/', status=404) -def test_import_visualization(schema1, app, admin, visualization, settings): +def test_import_visualization(schema1, app, admin, visualization, settings, freezer): + freezer.move_to('2020-01-01T00:00:00Z') settings.LANGUAGE_CODE = 'en-us' login(app, admin) resp = app.get('/visualization/%s/' % visualization.id) resp = resp.click('Export as JSON') assert resp.headers['content-type'] == 'application/json' + assert resp.headers['content-disposition'] == 'attachment; filename="export_stats_20200101.json"' visualization_export = resp.text # invalid json @@ -226,6 +228,8 @@ def test_import_visualization(schema1, app, admin, visualization, settings): # global export/import resp = app.get('/').click('Export') + assert resp.headers['content-type'] == 'application/json' + assert resp.headers['content-disposition'] == 'attachment; filename="export_stats_20200101.json"' visualizations_export = resp.text Visualization.objects.all().delete()