fix: protect wb.close() with try/finally, strengthen width assertions, declare openpyxl dev dep #83

- I-1: Add explicit lower bounds to width assertions (>= 15 for autre, >= 40 for objet)
- I-2: Wrap write_excel() and close() in try/finally to ensure cleanup even on exception
- M-2: Add openpyxl to dev dependencies in pyproject.toml

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Colin Maudry
2026-06-23 17:08:32 +02:00
parent 35e72645bd
commit e5ca7d62a3
3 changed files with 13 additions and 10 deletions
+1
View File
@@ -35,6 +35,7 @@ dev = [
"webdriver-manager", "webdriver-manager",
"dash[testing]", "dash[testing]",
"fastexcel", "fastexcel",
"openpyxl",
] ]
[tool.pytest.ini_options] [tool.pytest.ini_options]
+10 -8
View File
@@ -579,11 +579,13 @@ def write_styled_excel(df: pl.DataFrame, buffer, worksheet: str = "DECP") -> Non
for col in df.columns for col in df.columns
} }
wb = xlsxwriter.Workbook(buffer, {"default_format_properties": {"text_wrap": True}}) wb = xlsxwriter.Workbook(buffer, {"default_format_properties": {"text_wrap": True}})
ws = wb.add_worksheet(worksheet) try:
df.write_excel( ws = wb.add_worksheet(worksheet)
workbook=wb, df.write_excel(
worksheet=ws, workbook=wb,
header_format=_EXCEL_HEADER_FORMAT, worksheet=ws,
column_widths=col_widths, header_format=_EXCEL_HEADER_FORMAT,
) column_widths=col_widths,
wb.close() )
finally:
wb.close()
+2 -2
View File
@@ -41,8 +41,8 @@ def test_write_styled_excel_known_column_wider_than_minimum():
ws = wb.active ws = wb.active
width_autre = ws.column_dimensions["A"].width # colonne 1 = "autre" width_autre = ws.column_dimensions["A"].width # colonne 1 = "autre"
width_objet = ws.column_dimensions["B"].width # colonne 2 = "objet" width_objet = ws.column_dimensions["B"].width # colonne 2 = "objet"
assert width_autre > 0 assert width_autre >= 15 # 132px minimum → ~18.9 chars xlsxwriter, borne basse 15
assert width_objet > width_autre assert width_objet >= 40 # 350px → ~50 chars xlsxwriter, borne basse 40
def test_write_styled_excel_custom_worksheet_name(): def test_write_styled_excel_custom_worksheet_name():