From d4b29ce4e46587a8daff459d333bad944f72726e Mon Sep 17 00:00:00 2001 From: Bui Nguyen Kim Hai <108981453+whynotkimhari@users.noreply.github.com> Date: Wed, 15 Apr 2026 18:12:47 +0200 Subject: [PATCH 1/2] Decode bytes to string in CSV writer Clean bytes in rows before writing to CSV. --- base_import_async/models/base_import_import.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/base_import_async/models/base_import_import.py b/base_import_async/models/base_import_import.py index eab3833b77..b0cb4a9b3c 100644 --- a/base_import_async/models/base_import_import.py +++ b/base_import_async/models/base_import_import.py @@ -89,7 +89,13 @@ def _create_csv_attachment(self, fields, data, options, file_name): encoding = options.get(OPT_ENCODING) or "utf-8" writer.writerow(fields) for row in data: - writer.writerow(row) + cleaned_row = [] + for cell in row: + if isinstance(cell, bytes): + # bytes from base64.b64encode() -> decode to base64 string + cell = cell.decode('ascii') + cleaned_row.append(cell) + writer.writerow(cleaned_row) # create attachment. Remove default values from context context = self.env.context context_copy = {} From 708e469e9264841fa934b0381802c0861a5c46b7 Mon Sep 17 00:00:00 2001 From: Bui Nguyen Kim Hai <108981453+whynotkimhari@users.noreply.github.com> Date: Wed, 15 Apr 2026 18:25:29 +0200 Subject: [PATCH 2/2] Update cell decoding to handle bytearray and utf-8 --- base_import_async/models/base_import_import.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/base_import_async/models/base_import_import.py b/base_import_async/models/base_import_import.py index b0cb4a9b3c..e02a7df37c 100644 --- a/base_import_async/models/base_import_import.py +++ b/base_import_async/models/base_import_import.py @@ -91,9 +91,8 @@ def _create_csv_attachment(self, fields, data, options, file_name): for row in data: cleaned_row = [] for cell in row: - if isinstance(cell, bytes): - # bytes from base64.b64encode() -> decode to base64 string - cell = cell.decode('ascii') + if isinstance(cell, (bytes, bytearray)): + cell = cell.decode("utf-8") cleaned_row.append(cell) writer.writerow(cleaned_row) # create attachment. Remove default values from context