From f30e6c22f0f0bce4351b8af2af60d2cf22464e64 Mon Sep 17 00:00:00 2001 From: andrewhn Date: Tue, 5 Apr 2016 22:07:23 +1000 Subject: [PATCH 1/2] name + extension for generated csv and json files --- caravel/views.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/caravel/views.py b/caravel/views.py index f6ce8613037c..50e5e38cfeee 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) @@ -470,6 +479,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": @@ -478,6 +488,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": From 1c840f7776e51987d5d7a11f9e6ba2a51b472253 Mon Sep 17 00:00:00 2001 From: andrewhn Date: Tue, 5 Apr 2016 22:07:43 +1000 Subject: [PATCH 2/2] write csv index where data is meaningful --- caravel/viz.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/caravel/viz.py b/caravel/viz.py index de49266d6b2c..440a4c226e99 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 []