From 0f15935c48edabe43c7af945e5f4f84e8dd09889 Mon Sep 17 00:00:00 2001 From: Pavol Date: Tue, 20 Jan 2026 12:25:43 +0100 Subject: [PATCH 1/2] fix: make sheet heads payload list friendly --- forloop_modules/utils/various.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/forloop_modules/utils/various.py b/forloop_modules/utils/various.py index 2057265..0340854 100644 --- a/forloop_modules/utils/various.py +++ b/forloop_modules/utils/various.py @@ -69,7 +69,8 @@ def serialize_dataframe_to_api(variable_value_df: pd.DataFrame) -> dict: "columns": list(df.columns), "values": df.values.tolist(), "attrs": df.attrs, - "column_metadata": column_metadata + "column_metadata": column_metadata, + "logical_types": logical_types } return result From f9bf35c5251efe2ab438bca5e58e15bb42bb9c0d Mon Sep 17 00:00:00 2001 From: Pavol Date: Wed, 21 Jan 2026 17:35:15 +0100 Subject: [PATCH 2/2] fix: do not duplicate the dtype in variable editor in UI --- forloop_modules/utils/various.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/forloop_modules/utils/various.py b/forloop_modules/utils/various.py index 0340854..02299e5 100644 --- a/forloop_modules/utils/various.py +++ b/forloop_modules/utils/various.py @@ -54,16 +54,18 @@ def serialize_dataframe_to_api(variable_value_df: pd.DataFrame) -> dict: df = df.replace(np.nan, None) # Extract logical_types from attrs if available - logical_types = getattr(df, "attrs", {}).get("logical_types", {}) + logical_types = getattr(df, "attrs", {}).get("logical_types", []) # Create column_metadata array with separate name and dtype - column_metadata = [ - { - "name": col, - "dtype": logical_types.get(col, str(dtype)) - } - for col, dtype in zip(df.columns, df.dtypes) - ] + column_metadata = [] + for i, (col, dtype) in enumerate(zip(df.columns, df.dtypes)): + dtype_str = logical_types[i] if i < len(logical_types) else str(dtype) + column_metadata.append( + { + "name": col, + "dtype": dtype_str + } + ) result = { "columns": list(df.columns),