From a36da2df09ed16885eb1919e9efae11d398dabde Mon Sep 17 00:00:00 2001 From: kaiba Date: Tue, 13 Sep 2022 22:23:04 +0900 Subject: [PATCH 1/3] Mount postgresql/data --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 92d07882a2..9e492635ee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -62,6 +62,8 @@ services: restart: unless-stopped environment: POSTGRES_HOST_AUTH_METHOD: "trust" + volumes: + - ./postgres_data:/var/lib/postgresql/data email: image: djfarrelly/maildev ports: From 7a5530bae795f77c2eee8225f59796f6a6b05bcf Mon Sep 17 00:00:00 2001 From: kaiba Date: Tue, 13 Sep 2022 22:45:02 +0900 Subject: [PATCH 2/3] Use REDASH_CSV_WRITER_ENCODING for downloading CSV --- redash/handlers/query_results.py | 6 +++-- redash/serializers/query_result.py | 2 +- redash/utils/__init__.py | 36 ------------------------------ 3 files changed, 5 insertions(+), 39 deletions(-) diff --git a/redash/handlers/query_results.py b/redash/handlers/query_results.py index cb8b8d14f2..a3348f8221 100644 --- a/redash/handlers/query_results.py +++ b/redash/handlers/query_results.py @@ -1,4 +1,5 @@ import logging +import os import time import unicodedata @@ -37,6 +38,7 @@ serialize_job, ) +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 @@ -431,9 +433,9 @@ def make_json_response(query_result): @staticmethod def make_csv_response(query_result): - headers = {"Content-Type": "text/csv; charset=UTF-8"} + headers = {"Content-Type": f"text/csv; charset={WRITER_ENCODING.upper()}"} return make_response( - serialize_query_result_to_dsv(query_result, ","), 200, headers + serialize_query_result_to_dsv(query_result, ",").encode(WRITER_ENCODING), 200, headers ) @staticmethod diff --git a/redash/serializers/query_result.py b/redash/serializers/query_result.py index 9eab2a1a42..3f20818704 100644 --- a/redash/serializers/query_result.py +++ b/redash/serializers/query_result.py @@ -3,7 +3,7 @@ import xlsxwriter from funcy import rpartial, project from dateutil.parser import isoparse as parse_date -from redash.utils import json_loads, UnicodeWriter +from redash.utils import json_loads from redash.query_runner import TYPE_BOOLEAN, TYPE_DATE, TYPE_DATETIME from redash.authentication.org_resolving import current_org diff --git a/redash/utils/__init__.py b/redash/utils/__init__.py index 26eae7dfa1..7fa29c203d 100644 --- a/redash/utils/__init__.py +++ b/redash/utils/__init__.py @@ -135,42 +135,6 @@ def build_url(request, host, path): return "{}://{}{}".format(request.scheme, host, path) -class UnicodeWriter: - """ - A CSV writer which will write rows to CSV file "f", - which is encoded in the given encoding. - """ - - def __init__(self, f, dialect=csv.excel, encoding=WRITER_ENCODING, **kwds): - # Redirect output to a queue - self.queue = io.StringIO() - self.writer = csv.writer(self.queue, dialect=dialect, **kwds) - self.stream = f - self.encoder = codecs.getincrementalencoder(encoding)() - - def _encode_utf8(self, val): - if isinstance(val, str): - return val.encode(WRITER_ENCODING, WRITER_ERRORS) - - return val - - def writerow(self, row): - self.writer.writerow([self._encode_utf8(s) for s in row]) - # Fetch UTF-8 output from the queue ... - data = self.queue.getvalue() - data = data.decode(WRITER_ENCODING) - # ... and reencode it into the target encoding - data = self.encoder.encode(data) - # write to the target stream - self.stream.write(data) - # empty queue - self.queue.truncate(0) - - def writerows(self, rows): - for row in rows: - self.writerow(row) - - def collect_parameters_from_request(args): parameters = {} From e7d934eb886ccc1be6d474483b5fb4c00fba5cb9 Mon Sep 17 00:00:00 2001 From: kaiba Date: Sun, 18 Sep 2022 12:12:21 +0900 Subject: [PATCH 3/3] Use port 8000 --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9e492635ee..f45e26e269 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,7 +28,7 @@ services: - postgres - redis ports: - - "5000:5000" + - "8000:5000" - "5678:5678" environment: <<: *redash-environment