From 017b6bd7aa0dbafd069563ac4ef655288e2cd306 Mon Sep 17 00:00:00 2001 From: kaiba Date: Sun, 6 Aug 2023 12:47:26 +0900 Subject: [PATCH 1/4] Use REDASH_CSV_WRITER_ENCODING for downloading CSV --- redash/handlers/query_results.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/redash/handlers/query_results.py b/redash/handlers/query_results.py index f4d2584441..3e5645af70 100644 --- a/redash/handlers/query_results.py +++ b/redash/handlers/query_results.py @@ -1,3 +1,4 @@ +import os import unicodedata from urllib.parse import quote @@ -35,6 +36,7 @@ to_filename, ) +WRITER_ENCODING = os.environ.get("REDASH_CSV_WRITER_ENCODING", "utf-8") def error_response(message, http_status=400): return {"job": {"status": 4, "error": message}}, http_status @@ -380,8 +382,8 @@ def make_json_response(query_result): @staticmethod def make_csv_response(query_result): - headers = {"Content-Type": "text/csv; charset=UTF-8"} - return make_response(serialize_query_result_to_dsv(query_result, ","), 200, headers) + headers = {"Content-Type": f"text/csv; charset={WRITER_ENCODING.upper()}"} + return make_response(serialize_query_result_to_dsv(query_result, ",").encode(WRITER_ENCODING), 200, headers) @staticmethod def make_tsv_response(query_result): From b1bbcc2cb24f58cae1fc62ca6b053aad2d0ad796 Mon Sep 17 00:00:00 2001 From: kaiba Date: Wed, 30 Aug 2023 16:50:06 +0900 Subject: [PATCH 2/4] Add WRITER_ENCODING to setting --- redash/settings/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/redash/settings/__init__.py b/redash/settings/__init__.py index 7fb4101b08..b809706c08 100644 --- a/redash/settings/__init__.py +++ b/redash/settings/__init__.py @@ -449,3 +449,5 @@ def email_server_is_configured(): # Email blocked domains, use delimiter comma to separated multiple domains BLOCKED_DOMAINS = set_from_string(os.environ.get("REDASH_BLOCKED_DOMAINS", "qq.com")) + +WRITER_ENCODING = os.environ.get("REDASH_CSV_WRITER_ENCODING", "utf-8") From 89fc84fc1467d8fc84b69f952dc920df371f67d9 Mon Sep 17 00:00:00 2001 From: kaiba Date: Wed, 30 Aug 2023 16:50:15 +0900 Subject: [PATCH 3/4] make format --- redash/handlers/query_results.py | 1 + 1 file changed, 1 insertion(+) diff --git a/redash/handlers/query_results.py b/redash/handlers/query_results.py index 3e5645af70..c6cd5e9bd3 100644 --- a/redash/handlers/query_results.py +++ b/redash/handlers/query_results.py @@ -38,6 +38,7 @@ WRITER_ENCODING = os.environ.get("REDASH_CSV_WRITER_ENCODING", "utf-8") + def error_response(message, http_status=400): return {"job": {"status": 4, "error": message}}, http_status From 5b5a50e9d1562b2294e12e7bf6961e4611d68542 Mon Sep 17 00:00:00 2001 From: kaiba Date: Wed, 30 Aug 2023 16:56:08 +0900 Subject: [PATCH 4/4] Read CSV_WRITER_ENCODING from settings --- redash/handlers/query_results.py | 9 ++++----- redash/settings/__init__.py | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/redash/handlers/query_results.py b/redash/handlers/query_results.py index c6cd5e9bd3..6ae70d5138 100644 --- a/redash/handlers/query_results.py +++ b/redash/handlers/query_results.py @@ -1,4 +1,3 @@ -import os import unicodedata from urllib.parse import quote @@ -36,8 +35,6 @@ to_filename, ) -WRITER_ENCODING = os.environ.get("REDASH_CSV_WRITER_ENCODING", "utf-8") - def error_response(message, http_status=400): return {"job": {"status": 4, "error": message}}, http_status @@ -383,8 +380,10 @@ def make_json_response(query_result): @staticmethod def make_csv_response(query_result): - headers = {"Content-Type": f"text/csv; charset={WRITER_ENCODING.upper()}"} - return make_response(serialize_query_result_to_dsv(query_result, ",").encode(WRITER_ENCODING), 200, headers) + headers = {"Content-Type": f"text/csv; charset={settings.CSV_WRITER_ENCODING.upper()}"} + return make_response( + serialize_query_result_to_dsv(query_result, ",").encode(settings.CSV_WRITER_ENCODING), 200, headers + ) @staticmethod def make_tsv_response(query_result): diff --git a/redash/settings/__init__.py b/redash/settings/__init__.py index b809706c08..61ee31a671 100644 --- a/redash/settings/__init__.py +++ b/redash/settings/__init__.py @@ -450,4 +450,4 @@ def email_server_is_configured(): # Email blocked domains, use delimiter comma to separated multiple domains BLOCKED_DOMAINS = set_from_string(os.environ.get("REDASH_BLOCKED_DOMAINS", "qq.com")) -WRITER_ENCODING = os.environ.get("REDASH_CSV_WRITER_ENCODING", "utf-8") +CSV_WRITER_ENCODING = os.environ.get("REDASH_CSV_WRITER_ENCODING", "utf-8")