From 24dea7b87e8d321de2af9aa0922512a4472bf039 Mon Sep 17 00:00:00 2001 From: Avasam Date: Thu, 4 Apr 2024 12:56:22 -0400 Subject: [PATCH 1/3] Improve Worksheet.slicing --- stubs/openpyxl/openpyxl/worksheet/worksheet.pyi | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi index 9af321be557e..658198381f13 100644 --- a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi @@ -87,10 +87,15 @@ class Worksheet(_WorkbookChild): @freeze_panes.setter def freeze_panes(self, topLeftCell: str | Cell | None = ...) -> None: ... def cell(self, row: int, column: int, value: str | None = None) -> Cell: ... + # An int is necessarily a row selection @overload - def __getitem__(self, key: int | slice) -> tuple[Cell, ...]: ... + def __getitem__(self, key: int) -> tuple[Cell, ...]: ... + # A slice is necessarily a row or rows, even if targetting a single cell @overload - def __getitem__(self, key: str) -> Any: ... # AnyOf[Cell, tuple[Cell, ...]] + def __getitem__(self, key: slice) -> tuple[Any, ...]: ... # tuple[AnyOf[Cell, tuple[Cell, ...]]] + # A str could be an individual cell, row, column or full range + @overload + def __getitem__(self, key: str) -> Any: ... # AnyOf[Cell, tuple[Cell, ...], tuple[tuple[Cell, ...], ...]] def __setitem__(self, key: str, value: str) -> None: ... def __iter__(self) -> Iterator[tuple[Cell, ...]]: ... def __delitem__(self, key: str) -> None: ... @@ -260,3 +265,7 @@ class Worksheet(_WorkbookChild): def print_area(self) -> str: ... @print_area.setter def print_area(self, value: str | Iterable[str] | None) -> None: ... + +ws: Worksheet +for cell in ws["A1":"A12"]: + reveal_type(cell) From d2201f3cff3032e4c21bf3a6618a85279a9e3ae5 Mon Sep 17 00:00:00 2001 From: Avasam Date: Thu, 4 Apr 2024 12:56:22 -0400 Subject: [PATCH 2/3] openpyxl: Reduce false-positives in `Worksheet.__getitem__` --- stubs/openpyxl/openpyxl/worksheet/worksheet.pyi | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi index 9af321be557e..4adb8a8358b8 100644 --- a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi @@ -87,10 +87,15 @@ class Worksheet(_WorkbookChild): @freeze_panes.setter def freeze_panes(self, topLeftCell: str | Cell | None = ...) -> None: ... def cell(self, row: int, column: int, value: str | None = None) -> Cell: ... + # An int is necessarily a row selection @overload - def __getitem__(self, key: int | slice) -> tuple[Cell, ...]: ... + def __getitem__(self, key: int) -> tuple[Cell, ...]: ... + # A slice is necessarily a row or rows, even if targetting a single cell @overload - def __getitem__(self, key: str) -> Any: ... # AnyOf[Cell, tuple[Cell, ...]] + def __getitem__(self, key: slice) -> tuple[Any, ...]: ... # tuple[AnyOf[Cell, tuple[Cell, ...]]] + # A str could be an individual cell, row, column or full range + @overload + def __getitem__(self, key: str) -> Any: ... # AnyOf[Cell, tuple[Cell, ...], tuple[tuple[Cell, ...], ...]] def __setitem__(self, key: str, value: str) -> None: ... def __iter__(self) -> Iterator[tuple[Cell, ...]]: ... def __delitem__(self, key: str) -> None: ... From f7a3e185c3684cb349a53efda5c7ecd63f02ac44 Mon Sep 17 00:00:00 2001 From: Avasam Date: Thu, 4 Apr 2024 13:01:47 -0400 Subject: [PATCH 3/3] leftover test --- stubs/openpyxl/openpyxl/worksheet/worksheet.pyi | 4 ---- 1 file changed, 4 deletions(-) diff --git a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi index 658198381f13..4adb8a8358b8 100644 --- a/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi +++ b/stubs/openpyxl/openpyxl/worksheet/worksheet.pyi @@ -265,7 +265,3 @@ class Worksheet(_WorkbookChild): def print_area(self) -> str: ... @print_area.setter def print_area(self, value: str | Iterable[str] | None) -> None: ... - -ws: Worksheet -for cell in ws["A1":"A12"]: - reveal_type(cell)