8000 `openpyxl`: Add `_WorkbookChild` / `ReadOnlyWorksheet` / `Workbook` annotations by Avasam · Pull Request #11677 · python/typeshed · GitHub
[go: up one dir, main page]

Skip to content

openpyxl: Add _WorkbookChild / ReadOnlyWorksheet / Workbook annotations #11677

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 1, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Extracted worksheet changes from big Merge PR
  • Loading branch information
Avasam committed Mar 30, 2024
commit fcad764d200d6f7bbb4e276d1c3012f07b8265a4
8 changes: 4 additions & 4 deletions stubs/openpyxl/openpyxl/cell/cell.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ from openpyxl.comments.comments import Comment
from openpyxl.compat.numbers import NUMERIC_TYPES as NUMERIC_TYPES # cell numeric types
from openpyxl.styles.cell_style import StyleArray
from openpyxl.styles.styleable import StyleableObject
from openpyxl.workbook.child import _WorkbookChild
from openpyxl.worksheet.hyperlink import Hyperlink
from openpyxl.worksheet.worksheet import Worksheet

__docformat__: Final = "restructuredtext en"
TIME_TYPES: Final[tuple[type, ...]]
Expand Down Expand Up @@ -41,7 +41,7 @@ class Cell(StyleableObject):
# row and column are never meant to be None and would lead to errors
def __init__(
self,
worksheet: Worksheet,
worksheet: _WorkbookChild,
row: int,
column: int,
value: str | float | datetime | None = None,
Expand Down Expand Up @@ -86,10 +86,10 @@ class MergedCell(StyleableObject):
hyperlink: Hyperlink | None
row: int | None
column: int | None
def __init__(self, worksheet: Worksheet, row: int | None = None, column: int | None = None) -> None: ...
def __init__(self, worksheet: _WorkbookChild, row: int | None = None, column: int | None = None) -> None: ...
# Same as Cell.coordinate
@property
def coordinate(self) -> str: ...
value: str | float | int | datetime | None

def WriteOnlyCell(ws: Worksheet | None = None, value: str | float | datetime | None = None) -> Cell: ...
def WriteOnlyCell(ws: _WorkbookChild | None = None, value: str | float | datetime | None = None) -> Cell: ...
7 changes: 3 additions & 4 deletions stubs/openpyxl/openpyxl/reader/workbook.pyi
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
from _typeshed import Incomplete
from collections.abc import Generator
from zipfile import ZipFile

from openpyxl.packaging.relationship import Relationship, RelationshipList
from openpyxl.packaging.workbook import PivotCache
from openpyxl.packaging.workbook import ChildSheet, PivotCache
from openpyxl.pivot.cache import CacheDefinition
from openpyxl.workbook import Workbook

Expand All @@ -12,14 +11,14 @@ class WorkbookParser:
workbook_part_name: str
wb: Workbook
keep_links: bool
sheets: list[Incomplete]
sheets: list[ChildSheet]
def __init__(self, archive: ZipFile, workbook_part_name: str, keep_links: bool = True) -> None: ...
@property
def rels(self) -> RelationshipList: ...
# Errors if "parse" is never called.
caches: list[PivotCache]
def parse(self) -> None: ...
def find_sheets(self) -> Generator[tuple[Incomplete, Relationship], None, None]: ...
def find_sheets(self) -> Generator[tuple[ChildSheet, Relationship], None, None]: ...
def assign_names(self) -> None: ...
@property
def pivot_caches(self) -> dict[int, CacheDefinition]: ...
26 changes: 15 additions & 11 deletions stubs/openpyxl/openpyxl/workbook/workbook.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -49,38 +49,42 @@ class Workbook:
@property
def excel_base_date(self) -> datetime: ...
@property
def active(self) -> _WorkbookChild | None: ...
def active(self) -> Worksheet | WriteOnlyWorksheet | Chartsheet | ReadOnlyWorksheet | None: ...
@active.setter
def active(self, value: _WorkbookChild | int) -> None: ...
def active(self, value: Worksheet | Chartsheet | int) -> None: ...
# Could be generic based on write_only
def create_sheet(
self, title: str | _Decodable | None = None, index: int | None = None
) -> Any: ... # AnyOf[WriteOnlyWorksheet, Worksheet]
def move_sheet(self, sheet: Worksheet | str, offset: int = 0) -> None: ...
def remove(self, worksheet: Worksheet) -> None: ...
def remove(self, worksheet: Worksheet | WriteOnlyWorksheet | Chartsheet | ReadOnlyWorksheet) -> None: ...
@deprecated("Use wb.remove(worksheet) or del wb[sheetname]")
def remove_sheet(self, worksheet: Worksheet) -> None: ...
def remove_sheet(self, worksheet: Worksheet | WriteOnlyWorksheet | Chartsheet | ReadOnlyWorksheet) -> None: ...
def create_chartsheet(self, title: str | _Decodable | None = None, index: int | None = None) -> Chartsheet: ...
@deprecated("Use wb[sheetname]")
def get_sheet_by_name(self, name: str) -> Worksheet: ...
def get_sheet_by_name(self, name: str) -> Worksheet | ReadOnlyWorksheet | WriteOnlyWorksheet | Chartsheet: ...
def __contains__(self, key: str) -> bool: ...
def index(self, worksheet: Worksheet) -> int: ...
def index(self, worksheet: Worksheet | ReadOnlyWorksheet | WriteOnlyWorksheet) -> int: ...
@deprecated("Use wb.index(worksheet)")
def get_index(self, worksheet: Worksheet) -> int: ...
def __getitem__(self, key: str) -> Worksheet: ...
def get_index(self, worksheet: Worksheet | ReadOnlyWorksheet | WriteOnlyWorksheet) -> int: ...
def __getitem__(self, key: str) -> Worksheet | ReadOnlyWorksheet | WriteOnlyWorksheet | Chartsheet: ...
def __delitem__(self, key: str) -> None: ...
def __iter__(self) -> Iterator[Worksheet]: ...
def __iter__(self) -> Iterator[Worksheet | ReadOnlyWorksheet | WriteOnlyWorksheet]: ...
@deprecated("Use wb.sheetnames")
def get_sheet_names(self) -> list[Worksheet]: ...
@property
def worksheets(self) -> list[Worksheet]: ...
def worksheets(self) -> list[Worksheet | ReadOnlyWorksheet | WriteOnlyWorksheet]: ...
@property
def chartsheets(self) -> list[Chartsheet]: ...
@property
def sheetnames(self) -> list[str]: ...
@deprecated("Assign scoped named ranges directly to worksheets or global ones to the workbook. Deprecated in 3.1")
def create_named_range(
self, name: str, worksheet: Worksheet | None = None, value: str | Incomplete | None = None, scope: Unused = None
self,
name: str,
worksheet: _WorkbookChild | ReadOnlyWorksheet | None = None,
value: str | Incomplete | None = None,
scope: Unused = None,
) -> None: ...
def add_named_style(self, style: NamedStyle) -> None: ...
@property
Expand Down
5 changes: 3 additions & 2 deletions stubs/openpyxl/openpyxl/worksheet/_reader.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ from .hyperlink import HyperlinkList
from .pagebreak import ColBreak, RowBreak
from .protection import SheetProtection
from .table import TablePartList
from .worksheet import Worksheet

CELL_TAG: Final[str]
VALUE_TAG: Final[str]
Expand Down Expand Up @@ -100,11 +101,11 @@ class WorkSheetParser:
def parse_custom_views(self, element: Unused) -> None: ...

class WorksheetReader:
ws: Incomplete
ws: Worksheet
parser: WorkSheetParser
tables: list[Incomplete]
def __init__(
self, ws, xml_source: _FileRead, shared_strings: SupportsGetItem[int, str], data_only: bool, rich_text: bool
self, ws: Worksheet, xml_source: _FileRead, shared_strings: SupportsGetItem[int, str], data_only: bool, rich_text: bool
) -> None: ...
def bind_cells(self) -> None: ...
def bind_formatting(self) -> None: ...
Expand Down
7 changes: 5 additions & 2 deletions stubs/openpyxl/openpyxl/worksheet/_writer.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ from collections.abc import Generator
from typing import Protocol
from typing_extensions import TypeAlias

from openpyxl.worksheet._write_only import WriteOnlyWorksheet
from openpyxl.worksheet.worksheet import Worksheet

# WorksheetWriter.read has an explicit BytesIO branch. Let's make sure this protocol is viable for BytesIO too.
class _SupportsCloseAndWrite(Protocol):
def write(self, buffer: ReadableBuffer, /) -> Unused: ...
Expand All @@ -17,10 +20,10 @@ ALL_TEMP_FILES: list[str]
def create_temporary_file(suffix: str = "") -> str: ...

class WorksheetWriter:
ws: Incomplete
ws: Worksheet | WriteOnlyWorksheet
out: _OutType
xf: Generator[Incomplete | None, Incomplete, None]
def __init__(self, ws, out: _OutType | None = None) -> None: ...
def __init__(self, ws: Worksheet | WriteOnlyWorksheet, out: _OutType | None = None) -> None: ...
def write_properties(self) -> None: ...
def write_dimensions(self) -> None: ...
def write_format(self) -> None: ...
Expand Down
0