From 973f99282e37a4ce02ddc6d1c998621f7b9b7fb5 Mon Sep 17 00:00:00 2001
From: Daniel Hornung <d.hornung@indiscale.com>
Date: Thu, 21 Mar 2024 11:09:13 +0100
Subject: [PATCH] ENH: Handling illegal characters.

---
 .../table_json_conversion/fill_xlsx.py           |   7 +++++--
 .../data/simple_data_ascii_chars.json            |  14 +++++++-------
 .../data/simple_data_ascii_chars.xlsx            | Bin 0 -> 8890 bytes
 .../table_json_conversion/test_fill_xlsx.py      |   3 +--
 4 files changed, 13 insertions(+), 11 deletions(-)
 create mode 100644 unittests/table_json_conversion/data/simple_data_ascii_chars.xlsx

diff --git a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
index 511c006d..88356ccc 100644
--- a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
+++ b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
@@ -32,6 +32,7 @@ from warnings import warn
 from jsonschema import FormatChecker, validate
 from jsonschema.exceptions import ValidationError
 from openpyxl import Workbook, load_workbook
+from openpyxl.cell.cell import ILLEGAL_CHARACTERS_RE
 from openpyxl.worksheet.worksheet import Worksheet
 
 from .table_generator import ColumnType, RowType
@@ -332,7 +333,8 @@ out: union[dict, None]
             if insert_row is None:
                 insert_row = _next_row_index(sheet)
 
-            sheet.cell(row=insert_row+1, column=col_index+1, value=value)
+            sheet.cell(row=insert_row+1, column=col_index+1,
+                       value=ILLEGAL_CHARACTERS_RE.sub("", value))
 
         # Insert foreign keys
         if insert_row is not None and sheet is not None and _is_exploded_sheet(sheet):
@@ -343,7 +345,8 @@ out: union[dict, None]
                 raise
             for index, path in ((f.index, f.path) for f in foreigns.values()):
                 value = context[path]
-                sheet.cell(row=insert_row+1, column=index+1, value=value)
+                sheet.cell(row=insert_row+1, column=index+1,
+                           value=ILLEGAL_CHARACTERS_RE.sub("", value))
 
         return None
 
diff --git a/unittests/table_json_conversion/data/simple_data_ascii_chars.json b/unittests/table_json_conversion/data/simple_data_ascii_chars.json
index 049b7203..b1d13ebe 100644
--- a/unittests/table_json_conversion/data/simple_data_ascii_chars.json
+++ b/unittests/table_json_conversion/data/simple_data_ascii_chars.json
@@ -1,17 +1,17 @@
 {
   "Training": {
     "date": "2023-01-01",
-    "url": "char: \u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009",
+    "url": "char: >\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009<",
     "subjects": [
-      "\u000a\u000b\u000c\u000d\u000e\u000f",
-      "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017",
-      "\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f",
-      "\u0020\u0021\u0022\u0023\u0024\u0025\u0026\u0027",
-      "\u0028\u0029\u002a\u002b\u002c\u002d\u002e\u002f"
+      ">\u000a\u000b\u000c\u000e\u000f<",
+      ">\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017<",
+      ">\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f<",
+      ">\u0020\u0021\u0022\u0023\u0024\u0025\u0026\u0027<",
+      ">\u0028\u0029\u002a\u002b\u002c\u002d\u002e\u002f<"
     ]
   },
   "Person": {
-    "family_name": "Steve:",
+    "family_name": "Steve",
     "given_name": "Stevie",
     "Organisation": "IMF"
   }
diff --git a/unittests/table_json_conversion/data/simple_data_ascii_chars.xlsx b/unittests/table_json_conversion/data/simple_data_ascii_chars.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..bdf60b568bf51726a0a25e599bb6c7e70988d287
GIT binary patch
literal 8890
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

literal 0
HcmV?d00001

diff --git a/unittests/table_json_conversion/test_fill_xlsx.py b/unittests/table_json_conversion/test_fill_xlsx.py
index 8609a6eb..946336da 100644
--- a/unittests/table_json_conversion/test_fill_xlsx.py
+++ b/unittests/table_json_conversion/test_fill_xlsx.py
@@ -134,10 +134,9 @@ def test_fill_xlsx():
                      template_file=rfp("data/indirect_template.xlsx"),
                      known_good=rfp("data/indirect_data.xlsx"),
                      schema=rfp("data/indirect_schema.json"))
-
     fill_and_compare(json_file=rfp("data/simple_data_ascii_chars.json"),
                      template_file=rfp("data/simple_template.xlsx"),
-                     known_good=rfp("data/simple_data.xlsx"),
+                     known_good=rfp("data/simple_data_ascii_chars.xlsx"),
                      schema=rfp("data/simple_schema.json"))
 
 
-- 
GitLab