Fixed Tips not being written during export.
This commit is contained in:
@@ -995,6 +995,7 @@ class Procedure(BaseClass):
|
|||||||
def to_pydantic(self, **kwargs):
|
def to_pydantic(self, **kwargs):
|
||||||
from backend.validators.pydant import PydReagent
|
from backend.validators.pydant import PydReagent
|
||||||
output = super().to_pydantic()
|
output = super().to_pydantic()
|
||||||
|
print(f"Super to_pydantic: {output.equipment}")
|
||||||
output.sample = [item.to_pydantic() for item in output.proceduresampleassociation]
|
output.sample = [item.to_pydantic() for item in output.proceduresampleassociation]
|
||||||
reagents = []
|
reagents = []
|
||||||
for reagent in output.reagent:
|
for reagent in output.reagent:
|
||||||
@@ -1009,7 +1010,6 @@ class Procedure(BaseClass):
|
|||||||
output.result = [item.to_pydantic() for item in self.results]
|
output.result = [item.to_pydantic() for item in self.results]
|
||||||
output.sample_results = flatten_list(
|
output.sample_results = flatten_list(
|
||||||
[[result.to_pydantic() for result in item.results] for item in self.proceduresampleassociation])
|
[[result.to_pydantic() for result in item.results] for item in self.proceduresampleassociation])
|
||||||
|
|
||||||
return output
|
return output
|
||||||
|
|
||||||
def create_proceduresampleassociations(self, sample):
|
def create_proceduresampleassociations(self, sample):
|
||||||
@@ -2148,7 +2148,7 @@ class ProcedureEquipmentAssociation(BaseClass):
|
|||||||
@property
|
@property
|
||||||
def tips(self):
|
def tips(self):
|
||||||
try:
|
try:
|
||||||
return Tips.query(id=self.tips_id, limit=1)
|
return TipsLot.query(id=self.tipslot_id, limit=1)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -2175,7 +2175,9 @@ class ProcedureEquipmentAssociation(BaseClass):
|
|||||||
PydEquipment: pydantic equipment model
|
PydEquipment: pydantic equipment model
|
||||||
"""
|
"""
|
||||||
from backend.validators import PydEquipment
|
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
|
@classmethod
|
||||||
@setup_lookup
|
@setup_lookup
|
||||||
@@ -2232,7 +2234,7 @@ class ProcedureEquipmentAssociation(BaseClass):
|
|||||||
output['processversion'] = None
|
output['processversion'] = None
|
||||||
try:
|
try:
|
||||||
output['tips'] = self.tipslot.details_dict()
|
output['tips'] = self.tipslot.details_dict()
|
||||||
except AttributeError:
|
except AttributeError as e:
|
||||||
output['tips'] = None
|
output['tips'] = None
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ class ProcedureInfoWriter(DefaultKEYVALUEWriter):
|
|||||||
header_order = []
|
header_order = []
|
||||||
exclude = ['control', 'equipment', 'excluded', 'id', 'misc_info', 'plate_map', 'possible_kits',
|
exclude = ['control', 'equipment', 'excluded', 'id', 'misc_info', 'plate_map', 'possible_kits',
|
||||||
'procedureequipmentassociation', 'procedurereagentassociation', 'proceduresampleassociation', 'proceduretipsassociation', 'reagent',
|
'procedureequipmentassociation', 'procedurereagentassociation', 'proceduresampleassociation', 'proceduretipsassociation', 'reagent',
|
||||||
'reagentrole', 'results', 'sample', 'tips', 'reagentlot']
|
'reagentrole', 'results', 'sample', 'tips', 'reagentlot', 'platemap']
|
||||||
|
|
||||||
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)
|
||||||
@@ -45,7 +45,7 @@ class ProcedureReagentWriter(DefaultTABLEWriter):
|
|||||||
|
|
||||||
class ProcedureEquipmentWriter(DefaultTABLEWriter):
|
class ProcedureEquipmentWriter(DefaultTABLEWriter):
|
||||||
|
|
||||||
exclude = ['id']
|
exclude = ['id', "equipment_role"]
|
||||||
header_order = ['equipmentrole', 'name', 'asset_number', 'process', 'tips']
|
header_order = ['equipmentrole', 'name', 'asset_number', 'process', 'tips']
|
||||||
|
|
||||||
def __init__(self, pydant_obj, range_dict: dict | None = None, *args, **kwargs):
|
def __init__(self, pydant_obj, range_dict: dict | None = None, *args, **kwargs):
|
||||||
|
|||||||
@@ -14,10 +14,12 @@ class DefaultRunManager(DefaultManager):
|
|||||||
def write(self) -> Workbook:
|
def write(self) -> Workbook:
|
||||||
from backend.managers import DefaultClientSubmissionManager, DefaultProcedureManager
|
from backend.managers import DefaultClientSubmissionManager, DefaultProcedureManager
|
||||||
logger.info(f"Initializing write")
|
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 = Workbook()
|
||||||
workbook = clientsubmission.write(workbook=workbook)
|
workbook = self.clientsubmission.write(workbook=workbook)
|
||||||
|
self.procedures = []
|
||||||
for procedure in self.pyd.procedure:
|
for procedure in self.pyd.procedure:
|
||||||
procedure = DefaultProcedureManager(proceduretype=procedure.proceduretype, parent=self.parent, input_object=procedure)
|
procedure = DefaultProcedureManager(proceduretype=procedure.proceduretype, parent=self.parent, input_object=procedure)
|
||||||
workbook: Workbook = procedure.write(workbook=workbook)
|
workbook: Workbook = procedure.write(workbook=workbook)
|
||||||
|
self.procedures.append(procedure)
|
||||||
return workbook
|
return workbook
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ class PydReagentLot(PydBaseClass):
|
|||||||
missing: bool = Field(default=True)
|
missing: bool = Field(default=True)
|
||||||
comment: str | None = Field(default="", validate_default=True)
|
comment: str | None = Field(default="", validate_default=True)
|
||||||
|
|
||||||
|
|
||||||
class PydReagent(PydBaseClass):
|
class PydReagent(PydBaseClass):
|
||||||
lot: str | None
|
lot: str | None
|
||||||
reagentrole: str | None
|
reagentrole: str | None
|
||||||
@@ -388,23 +389,29 @@ class PydEquipment(PydBaseClass):
|
|||||||
@field_validator('tips', mode='before')
|
@field_validator('tips', mode='before')
|
||||||
@classmethod
|
@classmethod
|
||||||
def tips_to_pydantic(cls, value, values):
|
def tips_to_pydantic(cls, value, values):
|
||||||
|
print(f"Value coming into tips: {value}")
|
||||||
if isinstance(value, GeneratorType):
|
if isinstance(value, GeneratorType):
|
||||||
value = [item for item in value]
|
value = [item for item in value]
|
||||||
value = convert_nans_to_nones(value)
|
value = convert_nans_to_nones(value)
|
||||||
if not value:
|
if not value:
|
||||||
value = []
|
value = []
|
||||||
if isinstance(value, TipsLot):
|
match value:
|
||||||
|
case TipsLot():
|
||||||
value = value.to_pydantic(pyd_model_name="PydTips")
|
value = value.to_pydantic(pyd_model_name="PydTips")
|
||||||
else:
|
case dict():
|
||||||
try:
|
value = PydTips(**value)
|
||||||
d: Tips = next(
|
case _:
|
||||||
(tips for tips in value if values.data['name'] in [item.name for item in tips.equipment]),
|
pass
|
||||||
None)
|
# else:
|
||||||
if d:
|
# try:
|
||||||
value = d.to_pydantic()
|
# d: Tips = next(
|
||||||
except AttributeError as e:
|
# (tips for tips in value if values.data['name'] in [item.name for item in tips.equipment]),
|
||||||
logger.error(f"Process Validation error due to {e}")
|
# None)
|
||||||
value = []
|
# if d:
|
||||||
|
# value = d.to_pydantic()
|
||||||
|
# except AttributeError as e:
|
||||||
|
# logger.error(f"Process Validation error due to {e}")
|
||||||
|
# value = []
|
||||||
return value
|
return value
|
||||||
|
|
||||||
@report_result
|
@report_result
|
||||||
@@ -471,7 +478,6 @@ class PydEquipment(PydBaseClass):
|
|||||||
return {k: getattr(self, k) for k in fields}
|
return {k: getattr(self, k) for k in fields}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PydContact(BaseModel):
|
class PydContact(BaseModel):
|
||||||
name: str
|
name: str
|
||||||
phone: str | None
|
phone: str | None
|
||||||
|
|||||||
Reference in New Issue
Block a user