Fixed Tips not being written during export.

This commit is contained in:
lwark
2025-09-23 10:52:46 -05:00
parent 4522f5909e
commit e9ff0a2774
4 changed files with 31 additions and 21 deletions

View File

@@ -995,6 +995,7 @@ class Procedure(BaseClass):
def to_pydantic(self, **kwargs):
from backend.validators.pydant import PydReagent
output = super().to_pydantic()
print(f"Super to_pydantic: {output.equipment}")
output.sample = [item.to_pydantic() for item in output.proceduresampleassociation]
reagents = []
for reagent in output.reagent:
@@ -1009,7 +1010,6 @@ class Procedure(BaseClass):
output.result = [item.to_pydantic() for item in self.results]
output.sample_results = flatten_list(
[[result.to_pydantic() for result in item.results] for item in self.proceduresampleassociation])
return output
def create_proceduresampleassociations(self, sample):
@@ -2148,7 +2148,7 @@ class ProcedureEquipmentAssociation(BaseClass):
@property
def tips(self):
try:
return Tips.query(id=self.tips_id, limit=1)
return TipsLot.query(id=self.tipslot_id, limit=1)
except AttributeError:
return None
@@ -2175,7 +2175,9 @@ class ProcedureEquipmentAssociation(BaseClass):
PydEquipment: pydantic equipment model
"""
from backend.validators import PydEquipment
return PydEquipment(**self.details_dict())
output = PydEquipment(**self.details_dict())
output.tips = self.tips.to_pydantic(pyd_model_name="PydTips")
return output
@classmethod
@setup_lookup
@@ -2232,7 +2234,7 @@ class ProcedureEquipmentAssociation(BaseClass):
output['processversion'] = None
try:
output['tips'] = self.tipslot.details_dict()
except AttributeError:
except AttributeError as e:
output['tips'] = None
return output

View File

@@ -15,7 +15,7 @@ class ProcedureInfoWriter(DefaultKEYVALUEWriter):
header_order = []
exclude = ['control', 'equipment', 'excluded', 'id', 'misc_info', 'plate_map', 'possible_kits',
'procedureequipmentassociation', 'procedurereagentassociation', 'proceduresampleassociation', 'proceduretipsassociation', 'reagent',
'reagentrole', 'results', 'sample', 'tips', 'reagentlot']
'reagentrole', 'results', 'sample', 'tips', 'reagentlot', 'platemap']
def __init__(self, pydant_obj, *args, **kwargs):
super().__init__(pydant_obj=pydant_obj, *args, **kwargs)
@@ -45,7 +45,7 @@ class ProcedureReagentWriter(DefaultTABLEWriter):
class ProcedureEquipmentWriter(DefaultTABLEWriter):
exclude = ['id']
exclude = ['id', "equipment_role"]
header_order = ['equipmentrole', 'name', 'asset_number', 'process', 'tips']
def __init__(self, pydant_obj, range_dict: dict | None = None, *args, **kwargs):

View File

@@ -14,10 +14,12 @@ class DefaultRunManager(DefaultManager):
def write(self) -> Workbook:
from backend.managers import DefaultClientSubmissionManager, DefaultProcedureManager
logger.info(f"Initializing write")
clientsubmission = DefaultClientSubmissionManager(parent=self.parent, input_object=self.pyd.clientsubmission, submissiontype=self.pyd.clientsubmission.submissiontype)
self.clientsubmission = DefaultClientSubmissionManager(parent=self.parent, input_object=self.pyd.clientsubmission, submissiontype=self.pyd.clientsubmission.submissiontype)
workbook = Workbook()
workbook = clientsubmission.write(workbook=workbook)
workbook = self.clientsubmission.write(workbook=workbook)
self.procedures = []
for procedure in self.pyd.procedure:
procedure = DefaultProcedureManager(proceduretype=procedure.proceduretype, parent=self.parent, input_object=procedure)
workbook: Workbook = procedure.write(workbook=workbook)
self.procedures.append(procedure)
return workbook

View File

@@ -143,6 +143,7 @@ class PydReagentLot(PydBaseClass):
missing: bool = Field(default=True)
comment: str | None = Field(default="", validate_default=True)
class PydReagent(PydBaseClass):
lot: str | None
reagentrole: str | None
@@ -388,23 +389,29 @@ class PydEquipment(PydBaseClass):
@field_validator('tips', mode='before')
@classmethod
def tips_to_pydantic(cls, value, values):
print(f"Value coming into tips: {value}")
if isinstance(value, GeneratorType):
value = [item for item in value]
value = convert_nans_to_nones(value)
if not value:
value = []
if isinstance(value, TipsLot):
value = value.to_pydantic(pyd_model_name="PydTips")
else:
try:
d: Tips = next(
(tips for tips in value if values.data['name'] in [item.name for item in tips.equipment]),
None)
if d:
value = d.to_pydantic()
except AttributeError as e:
logger.error(f"Process Validation error due to {e}")
value = []
match value:
case TipsLot():
value = value.to_pydantic(pyd_model_name="PydTips")
case dict():
value = PydTips(**value)
case _:
pass
# else:
# try:
# d: Tips = next(
# (tips for tips in value if values.data['name'] in [item.name for item in tips.equipment]),
# None)
# if d:
# value = d.to_pydantic()
# except AttributeError as e:
# logger.error(f"Process Validation error due to {e}")
# value = []
return value
@report_result
@@ -471,7 +478,6 @@ class PydEquipment(PydBaseClass):
return {k: getattr(self, k) for k in fields}
class PydContact(BaseModel):
name: str
phone: str | None