Source code for pycognaize.document.tag.cell

import bson
from typing import Union

from pycognaize.common.enums import IqCellKeyEnum, ID


[docs] class Cell: """Represents a single element in TableTag""" def __init__(self, value, left_col, top_row, top, right, bottom, left, col_span, row_span): # TODO: check for valid values self._value = value self._left_col = left_col self._top_row = top_row self._col_span = col_span self._row_span = row_span self._top = top self._right = right self._bottom = bottom self._left = left self._width = None self._height = None self._area = None @property def value(self): return self._value @property def left_col(self): return self._left_col @property def top_row(self): return self._top_row @property def col_span(self): return self._col_span @property def row_span(self): return self._row_span @property def top(self): return self._top @property def right(self): return self._right @property def bottom(self): return self._bottom @property def left(self): return self._left @property def area(self) -> float: """Area of the rectangle""" if self._area is None: self._area = self.width * self.height return self._area @property def width(self) -> Union[int, float]: """Width of the rectangle""" if self._width is None: self._width = self.right - self.left return self._width @property def height(self) -> Union[int, float]: """Height of the rectangle""" if self._height is None: self._height = self.bottom - self.top return self._height def __repr__(self): return ( f'<{self.__class__.__name__}:' f' coords: ({self.top:<9.5f}, {self.right:<9.5f},' f' {self.bottom:<9.5f}, {self.left:<9.5f})' f' spans: ({self.row_span:<3}, {self.col_span:<3})' f' corner coords: ({self.left_col:<3}, {self.top_row:<3})' f' value: {self.value}>' ) def __str__(self): return f'Left: {self._left_col}, Top: {self._top_row}' def __eq__(self, obj): """Adjusts method for equating with strings and other cell objects""" if isinstance(obj, str): return self._value == obj elif isinstance(obj, Cell): return (self._value == obj.value and self._left_col == obj.left_col and self._top_row == obj.top_row and self._col_span == obj.col_span and self._row_span == obj.row_span)
[docs] def to_dict(self) -> dict: """Converts cell to dict""" return { ID: str(bson.ObjectId()), IqCellKeyEnum.left_col_top_row.value: f"{self.left_col}" f":{self.top_row}", IqCellKeyEnum.col_span.value: self.col_span, IqCellKeyEnum.row_span.value: self.row_span, IqCellKeyEnum.text.value: self.value, IqCellKeyEnum.left.value: self.left, IqCellKeyEnum.top.value: self.top, IqCellKeyEnum.width.value: self.right - self.left, IqCellKeyEnum.height.value: self.bottom - self.top }