From db54ff435e0663fa601270d5d85767f024be07d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com>
Date: Tue, 12 Mar 2024 21:54:35 +0100
Subject: [PATCH] wip

---
 .../table_json_conversion/fill_xlsx.py        | 27 ++++++++++---------
 .../table_json_conversion/table_generator.py  |  2 +-
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
index 75a67e02..f58cb876 100644
--- a/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
+++ b/src/caosadvancedtools/table_json_conversion/fill_xlsx.py
@@ -54,11 +54,10 @@ def _get_column_types(sheet: Worksheet) -> OrderedDict:
     type_row_index = _get_row_type_column_index(sheet)
     for idx, col in enumerate(sheet.columns):
         type_cell = col[type_row_index]
-        result[idx] = type_cell.value
-        assert (hasattr(ColumnType, type_cell.value)
-                or type_cell.value == RowType.COL_TYPE.name
-                or type_cell.value is None), (
-            f"Unexpected column type value: {type_cell.value}")
+        result[idx] = type_cell.value if type_cell.value is not None else ColumnType.IGNORE.name
+        assert (hasattr(ColumnType, result[idx])
+                or result[idx] == RowType.COL_TYPE.name), (
+            f"Unexpected column type value ({idx}{type_row_index}): {type_cell.value}")
     return result
 
 
@@ -281,16 +280,17 @@ out: union[dict, None]
             next_context = context.next_level(name)
             # preprocessing
             if isinstance(content, list):
-                if not content:
+                if not content:  # empty list
                     continue
-                # Must be all of the same type.
+                # list elements must be all of the same type.
                 assert len(set(type(entry) for entry in content)) == 1
-                if isinstance(content[0], dict):
+
+                if isinstance(content[0], dict):  # all elements are dicts
                     # An array of objects: must go into exploded sheet
                     for entry in content:
                         self._handle_data(data=entry, current_path=path, context=next_context)
                     continue
-            elif isinstance(content, dict):
+            elif isinstance(content, dict):  # we recurse and simply use the result
                 if not current_path:  # Special handling for top level
                     self._handle_data(content, current_path=path, context=next_context)
                     continue
@@ -301,26 +301,27 @@ out: union[dict, None]
                 insertables.update(insert)
                 continue
             else:  # scalars
-                content = [content]
+                content = [content]  # make list for unified treatment below
 
             # collecting the data
-            assert isinstance(content, list)
+            assert isinstance(content, list)  # TODO do we want this??? make list non-lists?
             if len(content) == 1:
                 value = content[0]
             else:
-                value = ";".join(content)
+                value = ";".join(content)  # TODO we need escaping of values
             path_str = p2s(path)
             assert path_str not in insertables
             insertables[path_str] = value
         if only_collect_insertables:
             return insertables
-        if not current_path:
+        if not current_path:  # top level returns (?)
             return None
 
         # actual data insertion
         insert_row = None
         sheet = None
         for path_str, value in insertables.items():
+
             sheet_meta = self._sheet_index[path_str]
             if sheet is None:
                 sheet = sheet_meta.sheet
diff --git a/src/caosadvancedtools/table_json_conversion/table_generator.py b/src/caosadvancedtools/table_json_conversion/table_generator.py
index 15e1eac8..1f1267f3 100644
--- a/src/caosadvancedtools/table_json_conversion/table_generator.py
+++ b/src/caosadvancedtools/table_json_conversion/table_generator.py
@@ -42,7 +42,7 @@ class ColumnType(Enum):
     SCALAR = 1
     LIST = 2
     FOREIGN = 3
-    IGNORE = 3
+    IGNORE = 4
 
 
 class RowType(Enum):
-- 
GitLab