Fixed Tips not being written during export.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
match value:
|
||||
case 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 = []
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user