def add_row(
self,
cell_values: list[Any],
*,
cell_sub_values: list[Any] | None = None,
bold: bool = False,
page_break: bool = False,
span_all_columns: bool = False,
table_break: bool = False,
border_top: bool = False,
border_bottom: bool = False,
) -> None:
if span_all_columns or table_break:
if len(cell_values) > 1 or (cell_sub_values is not None and len(cell_sub_values) > 1):
message = (
'Cannot span all columns or have a table break with more than one cell value'
)
raise ValueError(message)
elif len(cell_values) != len(self.columns) or (
cell_sub_values is not None and len(cell_sub_values) != len(self.columns)
):
message = (
'Number of cell values ({cell_values_count}) and sub values '
'({cell_sub_values_count}) must match number of columns: {columns_count}'
).format(
cell_values_count=len(cell_values),
cell_sub_values_count=len(cell_sub_values) if cell_sub_values else 'None',
columns_count=len(self.columns),
)
raise ValueError(message)
self.rows.append(
ReportRow(
cells=[
ReportCell(
value=cell_values[i],
sub_value=cell_sub_values[i] if cell_sub_values else None,
type=self.columns[i].type,
sub_type=self.columns[i].sub_type,
)
for i in range(len(cell_values))
],
bold=bold,
page_break=page_break,
span_all_columns=span_all_columns,
table_break=table_break,
border_top=border_top,
border_bottom=border_bottom,
)
)