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
|
import logging, sys
|
||||||
from datetime import datetime, date
|
from datetime import datetime, date
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
from types import NoneType
|
|
||||||
from typing import Any, Literal
|
from typing import Any, Literal
|
||||||
|
|
||||||
from openpyxl.styles import Alignment, PatternFill
|
from openpyxl.styles import Alignment, PatternFill
|
||||||
from openpyxl.utils import get_column_letter
|
|
||||||
from openpyxl.workbook.workbook import Workbook
|
from openpyxl.workbook.workbook import Workbook
|
||||||
from openpyxl.worksheet.worksheet import Worksheet
|
from openpyxl.worksheet.worksheet import Worksheet
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
@@ -47,7 +48,6 @@ class DefaultWriter(object):
|
|||||||
|
|
||||||
case _:
|
case _:
|
||||||
value = str(value)
|
value = str(value)
|
||||||
# logger.debug(f"Returning value: {value}")
|
|
||||||
return value
|
return value
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -60,7 +60,6 @@ class DefaultWriter(object):
|
|||||||
|
|
||||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||||
start_row: int | None = None, *args, **kwargs):
|
start_row: int | None = None, *args, **kwargs):
|
||||||
logger.debug(f"Writing to workbook with {self.__class__.__name__}")
|
|
||||||
if not start_row:
|
if not start_row:
|
||||||
try:
|
try:
|
||||||
start_row = self.__class__.start_row
|
start_row = self.__class__.start_row
|
||||||
@@ -81,14 +80,11 @@ class DefaultWriter(object):
|
|||||||
self.worksheet = self.prewrite(self.worksheet, start_row=start_row)
|
self.worksheet = self.prewrite(self.worksheet, start_row=start_row)
|
||||||
self.start_row = self.delineate_start_row(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)
|
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
|
return workbook
|
||||||
|
|
||||||
def delineate_start_row(self, start_row: int = 1):
|
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):
|
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]):
|
if all([item.value is None for item in row]):
|
||||||
logger.debug(f"Returning {iii} for start row.")
|
|
||||||
return iii
|
return iii
|
||||||
if self.worksheet.max_row == 1:
|
if self.worksheet.max_row == 1:
|
||||||
return self.worksheet.max_row + 1
|
return self.worksheet.max_row + 1
|
||||||
@@ -109,7 +105,7 @@ class DefaultWriter(object):
|
|||||||
if len(str(cell.value)) > setlen:
|
if len(str(cell.value)) > setlen:
|
||||||
setlen = len(str(cell.value))
|
setlen = len(str(cell.value))
|
||||||
set_col_width = setlen + 5
|
set_col_width = setlen + 5
|
||||||
# Setting the column width
|
# Note: Setting the column width
|
||||||
worksheet.column_dimensions[column].width = set_col_width
|
worksheet.column_dimensions[column].width = set_col_width
|
||||||
return worksheet
|
return worksheet
|
||||||
|
|
||||||
@@ -130,7 +126,6 @@ class DefaultKEYVALUEWriter(DefaultWriter):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def check_location(cls, locations: list, sheet: str):
|
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])
|
return any([item['sheet'] == sheet for item in locations])
|
||||||
|
|
||||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
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:
|
start_row: int | None = None, *args, **kwargs) -> Workbook:
|
||||||
workbook = super().write_to_workbook(workbook=workbook, sheet=sheet, start_row=start_row, *args, **kwargs)
|
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]))))
|
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)
|
self.worksheet = self.write_header_row(worksheet=self.worksheet)
|
||||||
for iii, object in enumerate(self.pydant_obj, start=1):
|
for iii, object in enumerate(self.pydant_obj, start=1):
|
||||||
write_row = self.start_row + iii
|
write_row = self.start_row + iii
|
||||||
@@ -219,7 +213,6 @@ class DefaultTABLEWriter(DefaultWriter):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def sort_header_row(cls, header_list: list) -> list:
|
def sort_header_row(cls, header_list: list) -> list:
|
||||||
output = []
|
output = []
|
||||||
logger.debug(cls.exclude)
|
|
||||||
for item in cls.header_order:
|
for item in cls.header_order:
|
||||||
if item in [header for header in header_list if header not in cls.exclude]:
|
if item in [header for header in header_list if header not in cls.exclude]:
|
||||||
output.append(header_list.pop(header_list.index(item)))
|
output.append(header_list.pop(header_list.index(item)))
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
"""
|
||||||
|
Module for ClientSubmission writing
|
||||||
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
import logging
|
import logging
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
@@ -17,10 +20,8 @@ class ClientSubmissionInfoWriter(DefaultKEYVALUEWriter):
|
|||||||
|
|
||||||
def __init__(self, pydant_obj, *args, **kwargs):
|
def __init__(self, pydant_obj, *args, **kwargs):
|
||||||
super().__init__(pydant_obj=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:
|
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, value="Submitter Info")
|
||||||
worksheet.cell(row=start_row, column=1).alignment = Alignment(horizontal="center")
|
worksheet.cell(row=start_row, column=1).alignment = Alignment(horizontal="center")
|
||||||
return worksheet
|
return worksheet
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
|
"""
|
||||||
|
Default
|
||||||
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
import logging
|
import logging, sys
|
||||||
import sys
|
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
|
|
||||||
from openpyxl.workbook import Workbook
|
from openpyxl.workbook import Workbook
|
||||||
|
|
||||||
from backend.excel.writers import DefaultKEYVALUEWriter, DefaultTABLEWriter
|
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__}")
|
logger = logging.getLogger(f"submissions.{__name__}")
|
||||||
|
|
||||||
@@ -25,10 +22,6 @@ class ProcedureInfoWriter(DefaultKEYVALUEWriter):
|
|||||||
super().__init__(pydant_obj=pydant_obj, *args, **kwargs)
|
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}
|
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,
|
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||||
start_row: int = 1, *args, **kwargs) -> Workbook:
|
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,
|
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||||
start_row: int = 1, *args, **kwargs) -> Workbook:
|
start_row: int = 1, *args, **kwargs) -> Workbook:
|
||||||
logger.debug(self.pydant_obj)
|
|
||||||
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
||||||
return workbook
|
return workbook
|
||||||
|
|
||||||
@@ -65,7 +57,6 @@ class ProcedureEquipmentWriter(DefaultTABLEWriter):
|
|||||||
|
|
||||||
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||||
start_row: int = 1, *args, **kwargs) -> Workbook:
|
start_row: int = 1, *args, **kwargs) -> Workbook:
|
||||||
logger.debug(self.pydant_obj)
|
|
||||||
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
||||||
return workbook
|
return workbook
|
||||||
|
|
||||||
@@ -78,11 +69,9 @@ class ProcedureSampleWriter(DefaultTABLEWriter):
|
|||||||
def __init__(self, pydant_obj, range_dict: dict | None = None, *args, **kwargs):
|
def __init__(self, pydant_obj, range_dict: dict | None = None, *args, **kwargs):
|
||||||
super().__init__(pydant_obj=pydant_obj, range_dict=range_dict, *args, **kwargs)
|
super().__init__(pydant_obj=pydant_obj, range_dict=range_dict, *args, **kwargs)
|
||||||
self.sheet = f"{self.pydant_obj.proceduretype.name} Quality"
|
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")
|
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,
|
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||||
start_row: int = 1, *args, **kwargs) -> Workbook:
|
start_row: int = 1, *args, **kwargs) -> Workbook:
|
||||||
logger.debug(self.pydant_obj)
|
|
||||||
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
workbook = super().write_to_workbook(workbook=workbook, sheet=self.sheet)
|
||||||
return workbook
|
return workbook
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
import logging
|
import logging
|
||||||
from pathlib import Path
|
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
from typing import Generator, TYPE_CHECKING
|
from typing import Generator, TYPE_CHECKING
|
||||||
|
|
||||||
from openpyxl import Workbook
|
from openpyxl import Workbook
|
||||||
from openpyxl.styles import Alignment
|
from openpyxl.styles import Alignment
|
||||||
|
|
||||||
from backend.excel.writers import DefaultKEYVALUEWriter, DefaultTABLEWriter
|
from backend.excel.writers import DefaultKEYVALUEWriter, DefaultTABLEWriter
|
||||||
from tools import flatten_list
|
from tools import flatten_list
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
@@ -21,26 +21,10 @@ class PCRInfoWriter(DefaultKEYVALUEWriter):
|
|||||||
def __init__(self, pydant_obj, proceduretype: "ProcedureType" | None = None, *args, **kwargs):
|
def __init__(self, pydant_obj, proceduretype: "ProcedureType" | None = None, *args, **kwargs):
|
||||||
super().__init__(pydant_obj=pydant_obj, proceduretype=proceduretype, *args, **kwargs)
|
super().__init__(pydant_obj=pydant_obj, proceduretype=proceduretype, *args, **kwargs)
|
||||||
self.fill_dictionary = self.pydant_obj.improved_dict()['result']
|
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,
|
def write_to_workbook(self, workbook: Workbook, sheet: str | None = None,
|
||||||
start_row: int | None = None, *args, **kwargs) -> Workbook:
|
start_row: int | None = None, *args, **kwargs) -> Workbook:
|
||||||
workbook = super().write_to_workbook(workbook=workbook, sheet=f"{self.proceduretype.name} Results")
|
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
|
return workbook
|
||||||
|
|
||||||
|
|
||||||
@@ -56,7 +40,6 @@ class PCRSampleWriter(DefaultTABLEWriter):
|
|||||||
columns.append((iii, header))
|
columns.append((iii, header))
|
||||||
columns = sorted(columns, key=lambda x: x[0])
|
columns = sorted(columns, key=lambda x: x[0])
|
||||||
columns = proto_columns + columns
|
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])
|
all_results = flatten_list([[item for item in self.rearrange_results(result)] for result in self.pydant_obj])
|
||||||
if len(all_results) > 0 :
|
if len(all_results) > 0 :
|
||||||
worksheet.cell(row=header_row, column=1, value="Sample")
|
worksheet.cell(row=header_row, column=1, value="Sample")
|
||||||
@@ -83,21 +66,10 @@ class PCRSampleWriter(DefaultTABLEWriter):
|
|||||||
def column_headers(self):
|
def column_headers(self):
|
||||||
output = []
|
output = []
|
||||||
for item in self.pydant_obj:
|
for item in self.pydant_obj:
|
||||||
# logger.debug(item)
|
|
||||||
dicto: dict = item.result
|
dicto: dict = item.result
|
||||||
for value in dicto.values():
|
for value in dicto.values():
|
||||||
if not isinstance(value, dict):
|
if not isinstance(value, dict):
|
||||||
# logger.debug(f"Will not include {value} in column headers.")
|
|
||||||
continue
|
continue
|
||||||
for key in value.keys():
|
for key in value.keys():
|
||||||
output.append(key)
|
output.append(key)
|
||||||
return sorted(list(set(output)))
|
return sorted(list(set(output)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user