MIF_E31222544/venv/Lib/site-packages/gspread/cell.py

96 lines
2.4 KiB
Python

"""
gspread.cell
~~~~~~~~~~~~
This module contains common cells' models.
"""
from typing import Optional, Union
from .utils import a1_to_rowcol, numericise, rowcol_to_a1
class Cell:
"""An instance of this class represents a single cell
in a :class:`~gspread.worksheet.Worksheet`.
"""
def __init__(self, row: int, col: int, value: Optional[str] = "") -> None:
self._row: int = row
self._col: int = col
#: Value of the cell.
self.value: Optional[str] = value
@classmethod
def from_address(cls, label: str, value: str = "") -> "Cell":
"""Instantiate a new :class:`~gspread.cell.Cell`
from an A1 notation address and a value
:param string label: the A1 label of the returned cell
:param string value: the value for the returned cell
:rtype: Cell
"""
row, col = a1_to_rowcol(label)
return cls(row, col, value)
def __repr__(self) -> str:
return "<{} R{}C{} {}>".format(
self.__class__.__name__,
self.row,
self.col,
repr(self.value),
)
def __eq__(self, other: object) -> bool:
if not isinstance(other, Cell):
return False
same_row = self.row == other.row
same_col = self.col == other.col
same_value = self.value == other.value
return same_row and same_col and same_value
@property
def row(self) -> int:
"""Row number of the cell.
:type: int
"""
return self._row
@property
def col(self) -> int:
"""Column number of the cell.
:type: int
"""
return self._col
@property
def numeric_value(self) -> Optional[Union[int, float]]:
"""Numeric value of this cell.
Will try to numericise this cell value,
upon success will return its numeric value
with the appropriate type.
:type: int or float
"""
numeric_value = numericise(self.value, default_blank=None)
# if could not convert, return None
if isinstance(numeric_value, int) or isinstance(numeric_value, float):
return numeric_value
else:
return None
@property
def address(self) -> str:
"""Cell address in A1 notation.
:type: str
"""
return rowcol_to_a1(self.row, self.col)