From 1099b0b89af1c4d45ccdfca845e610dc5934d060 Mon Sep 17 00:00:00 2001 From: Adrian Ehrsam Date: Thu, 20 Mar 2025 10:42:06 +0100 Subject: [PATCH 1/2] fixes duplicate table names --- bmsdna/table_rendering/excel.py | 15 ++++++++++++--- pyproject.toml | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/bmsdna/table_rendering/excel.py b/bmsdna/table_rendering/excel.py index 694c06c..14eca2c 100644 --- a/bmsdna/table_rendering/excel.py +++ b/bmsdna/table_rendering/excel.py @@ -34,6 +34,8 @@ def render_into_sheet( *, translator: Callable[[str, str], str] | None = None, offset_rows=0, + autofit=True, + table_name: str | None = None, ) -> "Worksheet": try: import polars as pl @@ -116,21 +118,28 @@ def render_into_sheet( ws.write(row_ind, i, value, formats[i]) assert ws.name is not None - + if not table_name: + table_name = ws.name.replace(" ", "_") + existing_names = set(t["name"].lower() for t in ws.tables if t.get("name")) + cnt = 2 + while table_name.lower() in existing_names: + table_name = ws.name.replace(" ", "_") + "_" + str(cnt) + cnt += 1 ws.add_table( offset_rows, 0, row_ind, len(configs) - 1, { - "name": ws.name.replace(" ", "_"), + "name": table_name, "style": "Table Style Medium 2", "columns": [ {"header": config.get_header(translator)} for config in configs ], }, ) - ws.autofit() + if autofit: + ws.autofit() fp = sheet_options.get("freeze_panes", None) if fp: diff --git a/pyproject.toml b/pyproject.toml index 4bff923..d3c1000 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "bmsdna-table-rendering" -version = "0.3.6" +version = "0.3.7" description = "" authors = [{ name = "Adrian Ehrsam", email = "adrian.ehrsam@bmsuisse.ch" }] dependencies = [ From 21d0adb463890f9818f43fc4bdf8e05ab07c1915 Mon Sep 17 00:00:00 2001 From: Adrian Ehrsam Date: Thu, 20 Mar 2025 10:44:12 +0100 Subject: [PATCH 2/2] fixes pyright --- bmsdna/table_rendering/excel.py | 20 +++++++++++++++----- uv.lock | 2 +- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/bmsdna/table_rendering/excel.py b/bmsdna/table_rendering/excel.py index 14eca2c..b5db660 100644 --- a/bmsdna/table_rendering/excel.py +++ b/bmsdna/table_rendering/excel.py @@ -1,7 +1,16 @@ from datetime import datetime import os from pathlib import Path -from typing import Callable, Any, TYPE_CHECKING, Iterable, Literal, Mapping, Sequence +from typing import ( + Callable, + Any, + TYPE_CHECKING, + Iterable, + Literal, + Mapping, + Sequence, + cast, +) from typing_extensions import NotRequired, TypedDict from uuid import uuid4 import json @@ -118,13 +127,14 @@ def render_into_sheet( ws.write(row_ind, i, value, formats[i]) assert ws.name is not None - if not table_name: - table_name = ws.name.replace(" ", "_") + if table_name is None: + t_name = ws.name.replace(" ", "_") existing_names = set(t["name"].lower() for t in ws.tables if t.get("name")) cnt = 2 - while table_name.lower() in existing_names: - table_name = ws.name.replace(" ", "_") + "_" + str(cnt) + while t_name.lower() in existing_names: + t_name = ws.name.replace(" ", "_") + "_" + str(cnt) cnt += 1 + table_name = t_name ws.add_table( offset_rows, 0, diff --git a/uv.lock b/uv.lock index 890da7d..3334cf8 100644 --- a/uv.lock +++ b/uv.lock @@ -12,7 +12,7 @@ wheels = [ [[package]] name = "bmsdna-table-rendering" -version = "0.3.6" +version = "0.3.7" source = { editable = "." } dependencies = [ { name = "dominate" },