From 65e72d0d075d158c6f4a934e04bfa90ce29ed0ee Mon Sep 17 00:00:00 2001 From: andrewhn Date: Thu, 7 Apr 2016 01:22:49 +1000 Subject: [PATCH] Csv download improvements * name + extension for generated csv and json files * write csv index where data is meaningful --- caravel/views.py | 11 +++++++++++ caravel/viz.py | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/caravel/views.py b/caravel/views.py index ad5fdbcf5f26..604a19839238 100644 --- a/caravel/views.py +++ b/caravel/views.py @@ -36,6 +36,15 @@ def validate_json(form, field): # noqa raise ValidationError("json isn't valid") +def generate_download_headers(extension): + filename = datetime.now().strftime("%Y%m%d_%H%M%S") + content_disp = "attachment; filename={}.{}".format(filename, extension) + headers = { + "Content-Disposition": content_disp, + } + return headers + + class DeleteMixin(object): @action( "muldelete", "Delete", "Delete all Really?", "fa-trash", single=False) @@ -477,6 +486,7 @@ def explore(self, datasource_type, datasource_id): resp = Response( payload, status=status, + headers=generate_download_headers("json"), mimetype="application/json") return resp elif request.args.get("csv") == "true": @@ -485,6 +495,7 @@ def explore(self, datasource_type, datasource_id): return Response( payload, status=status, + headers=generate_download_headers("csv"), mimetype="application/csv") else: if request.args.get("standalone") == "true": diff --git a/caravel/viz.py b/caravel/viz.py index 184e3b19847a..20224dc44693 100644 --- a/caravel/viz.py +++ b/caravel/viz.py @@ -257,7 +257,8 @@ def get_json(self): def get_csv(self): df = self.get_df() - return df.to_csv(index=False) + include_index = not isinstance(df.index, pd.RangeIndex) + return df.to_csv(index=include_index) def get_data(self): return []