fix(backend): pad ragged rows with None in tabular conversion helpers

_tabular_to_column_dict and _tabular_to_list_of_dicts now use None for
missing values in shorter rows instead of silently dropping them. This
ensures all columns have equal length in column-dict output.
This commit is contained in:
Zamil Majdy
2026-03-13 16:26:54 +07:00
parent a937433d8e
commit bce0214a6a

View File

@@ -302,19 +302,26 @@ def _is_tabular(parsed: Any) -> bool:
def _tabular_to_list_of_dicts(parsed: list) -> list[dict[str, Any]]:
"""Convert [[header], [row1], ...] → [{header[0]: row[0], ...}, ...]."""
"""Convert [[header], [row1], ...] → [{header[0]: row[0], ...}, ...].
Ragged rows (fewer columns than the header) get None for missing values.
"""
header = parsed[0]
return [
{header[i]: row[i] for i in range(len(header)) if i < len(row)}
{header[i]: (row[i] if i < len(row) else None) for i in range(len(header))}
for row in parsed[1:]
]
def _tabular_to_column_dict(parsed: list) -> dict[str, list]:
"""Convert [[header], [row1], ...] → {"col1": [val1, ...], ...}."""
"""Convert [[header], [row1], ...] → {"col1": [val1, ...], ...}.
Ragged rows (fewer columns than the header) get None for missing values,
ensuring all columns have equal length.
"""
header = parsed[0]
return {
header[i]: [row[i] for row in parsed[1:] if i < len(row)]
header[i]: [row[i] if i < len(row) else None for row in parsed[1:]]
for i in range(len(header))
}