Code cleanup for excel.writers complete.
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
"""
|
||||
Module for default excel writers
|
||||
"""
|
||||
from __future__ import annotations
|
||||
import logging, sys
|
||||
from datetime import datetime, date
|
||||
from pprint import pformat
|
||||
from types import NoneType
|
||||
from typing import Any, Literal
|
||||
|
||||
from openpyxl.styles import Alignment, PatternFill
|
||||
from openpyxl.utils import get_column_letter
|
||||
from openpyxl.workbook.workbook import Workbook
|
||||
from openpyxl.worksheet.worksheet import Worksheet
|
||||
from pandas import DataFrame
|
||||
@@ -47,7 +48,6 @@ class DefaultWriter(object):
|
||||
|
||||
case _:
|
||||
value = str(value)
|
||||
# logger.debug(f"Returning value: {value}")
|
||||
return value
|
||||
|
||||
@classmethod
|
||||
@@ -60,7 +60,6 @@ class DefaultWriter(object):
|
||||
|
||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||
start_row: int | None = None, *args, **kwargs):
|
||||
logger.debug(f"Writing to workbook with {self.__class__.__name__}")
|
||||
if not start_row:
|
||||
try:
|
||||
start_row = self.__class__.start_row
|
||||
@@ -81,14 +80,11 @@ class DefaultWriter(object):
|
||||
self.worksheet = self.prewrite(self.worksheet, start_row=start_row)
|
||||
self.start_row = self.delineate_start_row(start_row=start_row)
|
||||
self.end_row = self.delineate_end_row(start_row=start_row)
|
||||
logger.debug(f"{self.__class__.__name__} Start row: {self.start_row}, end row: {self.end_row}")
|
||||
return workbook
|
||||
|
||||
def delineate_start_row(self, start_row: int = 1):
|
||||
logger.debug(f"Attempting to find start row from {start_row}")
|
||||
for iii, row in enumerate(self.worksheet.iter_rows(min_row=start_row), start=start_row):
|
||||
if all([item.value is None for item in row]):
|
||||
logger.debug(f"Returning {iii} for start row.")
|
||||
return iii
|
||||
if self.worksheet.max_row == 1:
|
||||
return self.worksheet.max_row + 1
|
||||
@@ -109,7 +105,7 @@ class DefaultWriter(object):
|
||||
if len(str(cell.value)) > setlen:
|
||||
setlen = len(str(cell.value))
|
||||
set_col_width = setlen + 5
|
||||
# Setting the column width
|
||||
# Note: Setting the column width
|
||||
worksheet.column_dimensions[column].width = set_col_width
|
||||
return worksheet
|
||||
|
||||
@@ -130,7 +126,6 @@ class DefaultKEYVALUEWriter(DefaultWriter):
|
||||
|
||||
@classmethod
|
||||
def check_location(cls, locations: list, sheet: str):
|
||||
logger.debug(f"Checking for location against {sheet}")
|
||||
return any([item['sheet'] == sheet for item in locations])
|
||||
|
||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||
@@ -193,7 +188,6 @@ class DefaultTABLEWriter(DefaultWriter):
|
||||
start_row: int | None = None, *args, **kwargs) -> Workbook:
|
||||
workbook = super().write_to_workbook(workbook=workbook, sheet=sheet, start_row=start_row, *args, **kwargs)
|
||||
self.header_list = self.sort_header_row(list(set(flatten_list([item.fields for item in self.pydant_obj]))))
|
||||
logger.debug(f"Header row: {self.header_list}")
|
||||
self.worksheet = self.write_header_row(worksheet=self.worksheet)
|
||||
for iii, object in enumerate(self.pydant_obj, start=1):
|
||||
write_row = self.start_row + iii
|
||||
@@ -219,7 +213,6 @@ class DefaultTABLEWriter(DefaultWriter):
|
||||
@classmethod
|
||||
def sort_header_row(cls, header_list: list) -> list:
|
||||
output = []
|
||||
logger.debug(cls.exclude)
|
||||
for item in cls.header_order:
|
||||
if item in [header for header in header_list if header not in cls.exclude]:
|
||||
output.append(header_list.pop(header_list.index(item)))
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
"""
|
||||
Module for ClientSubmission writing
|
||||
"""
|
||||
from __future__ import annotations
|
||||
import logging
|
||||
from pprint import pformat
|
||||
@@ -17,10 +20,8 @@ class ClientSubmissionInfoWriter(DefaultKEYVALUEWriter):
|
||||
|
||||
def __init__(self, pydant_obj, *args, **kwargs):
|
||||
super().__init__(pydant_obj=pydant_obj, *args, **kwargs)
|
||||
logger.debug(f"{self.__class__.__name__} recruited!")
|
||||
|
||||
def prewrite(self, worksheet: Worksheet, start_row: int) -> Worksheet:
|
||||
# worksheet.merge_cells(start_row=start_row, start_column=1, end_row=start_row, end_column=4)
|
||||
worksheet.cell(row=start_row, column=1, value="Submitter Info")
|
||||
worksheet.cell(row=start_row, column=1).alignment = Alignment(horizontal="center")
|
||||
return worksheet
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
"""
|
||||
Default
|
||||
"""
|
||||
from __future__ import annotations
|
||||
import logging
|
||||
import sys
|
||||
import logging, sys
|
||||
from pprint import pformat
|
||||
|
||||
from openpyxl.workbook import Workbook
|
||||
|
||||
from backend.excel.writers import DefaultKEYVALUEWriter, DefaultTABLEWriter
|
||||
from typing import TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
from backend.db.models import ProcedureType
|
||||
|
||||
logger = logging.getLogger(f"submissions.{__name__}")
|
||||
|
||||
@@ -25,10 +22,6 @@ class ProcedureInfoWriter(DefaultKEYVALUEWriter):
|
||||
super().__init__(pydant_obj=pydant_obj, *args, **kwargs)
|
||||
|
||||
self.fill_dictionary = {k: v for k, v in self.fill_dictionary.items() if k not in self.__class__.exclude}
|
||||
# logger.debug(pformat(self.fill_dictionary))
|
||||
# for rng in self.range_dict:
|
||||
# if "sheet" not in rng or rng['sheet'] == "":
|
||||
# rng['sheet'] = f"{pydant_obj.proceduretype.name} Quality"
|
||||
|
||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||
start_row: int = 1, *args, **kwargs) -> Workbook:
|
||||
@@ -48,7 +41,6 @@ class ProcedureReagentWriter(DefaultTABLEWriter):
|
||||
|
||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||
start_row: int = 1, *args, **kwargs) -> Workbook:
|
||||
logger.debug(self.pydant_obj)
|
||||
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
||||
return workbook
|
||||
|
||||
@@ -65,7 +57,6 @@ class ProcedureEquipmentWriter(DefaultTABLEWriter):
|
||||
|
||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||
start_row: int = 1, *args, **kwargs) -> Workbook:
|
||||
logger.debug(self.pydant_obj)
|
||||
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
||||
return workbook
|
||||
|
||||
@@ -78,11 +69,9 @@ class ProcedureSampleWriter(DefaultTABLEWriter):
|
||||
def __init__(self, pydant_obj, range_dict: dict | None = None, *args, **kwargs):
|
||||
super().__init__(pydant_obj=pydant_obj, range_dict=range_dict, *args, **kwargs)
|
||||
self.sheet = f"{self.pydant_obj.proceduretype.name} Quality"
|
||||
# self.pydant_obj = self.pydant_obj.sample
|
||||
self.pydant_obj = self.pad_samples_to_length(row_count=pydant_obj.max_sample_rank, mode="procedure")
|
||||
|
||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||
start_row: int = 1, *args, **kwargs) -> Workbook:
|
||||
logger.debug(self.pydant_obj)
|
||||
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
||||
return workbook
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
"""
|
||||
|
||||
"""
|
||||
from __future__ import annotations
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from pprint import pformat
|
||||
from typing import Generator, TYPE_CHECKING
|
||||
|
||||
from openpyxl import Workbook
|
||||
from openpyxl.styles import Alignment
|
||||
|
||||
from backend.excel.writers import DefaultKEYVALUEWriter, DefaultTABLEWriter
|
||||
from tools import flatten_list
|
||||
if TYPE_CHECKING:
|
||||
@@ -21,26 +21,10 @@ class PCRInfoWriter(DefaultKEYVALUEWriter):
|
||||
def __init__(self, pydant_obj, proceduretype: "ProcedureType" | None = None, *args, **kwargs):
|
||||
super().__init__(pydant_obj=pydant_obj, proceduretype=proceduretype, *args, **kwargs)
|
||||
self.fill_dictionary = self.pydant_obj.improved_dict()['result']
|
||||
logger.debug(pformat(self.fill_dictionary))
|
||||
|
||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||
start_row: int | None = None, *args, **kwargs) -> Workbook:
|
||||
workbook = super().write_to_workbook(workbook=workbook, sheet=f"{self.proceduretype.name} Results")
|
||||
# if not start_row:
|
||||
# try:
|
||||
# start_row = self.__class__.start_row
|
||||
# except AttributeError as e:
|
||||
# logger.error(f"Couldn't get start row due to {e}")
|
||||
# start_row = 1
|
||||
# # worksheet = workbook[f"{self.proceduretype.name} Results"]
|
||||
# self.worksheet = workbook.create_sheet(f"{self.proceduretype.name} Results")
|
||||
# self.worksheet = self.prewrite(self.worksheet, start_row=start_row)
|
||||
# # self.start_row = self.delineate_start_row(start_row=start_row)
|
||||
# # self.end_row = self.delineate_end_row(start_row=start_row)
|
||||
# # for key, value in self.fill_dictionary['result'].items():
|
||||
# # # logger.debug(f"Filling in {key} with {value}")
|
||||
# # self.worksheet.cell(value['location']['row'], value['location']['key_column'], value=key.replace("_", " ").title())
|
||||
# # self.worksheet.cell(value['location']['row'], value['location']['value_column'], value=value['value'])
|
||||
return workbook
|
||||
|
||||
|
||||
@@ -56,7 +40,6 @@ class PCRSampleWriter(DefaultTABLEWriter):
|
||||
columns.append((iii, header))
|
||||
columns = sorted(columns, key=lambda x: x[0])
|
||||
columns = proto_columns + columns
|
||||
# logger.debug(columns)
|
||||
all_results = flatten_list([[item for item in self.rearrange_results(result)] for result in self.pydant_obj])
|
||||
if len(all_results) > 0 :
|
||||
worksheet.cell(row=header_row, column=1, value="Sample")
|
||||
@@ -83,21 +66,10 @@ class PCRSampleWriter(DefaultTABLEWriter):
|
||||
def column_headers(self):
|
||||
output = []
|
||||
for item in self.pydant_obj:
|
||||
# logger.debug(item)
|
||||
dicto: dict = item.result
|
||||
for value in dicto.values():
|
||||
if not isinstance(value, dict):
|
||||
# logger.debug(f"Will not include {value} in column headers.")
|
||||
continue
|
||||
for key in value.keys():
|
||||
output.append(key)
|
||||
return sorted(list(set(output)))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user