Pre large refactor of templates.

This commit is contained in:
lwark
2025-06-12 08:54:38 -05:00
parent fc47fa5b39
commit d652de4650
2 changed files with 76 additions and 1 deletions

View File

@@ -1418,6 +1418,16 @@ class Procedure(BaseClass):
def delete(self, obj):
logger.debug("Delete!")
def details_dict(self):
output = super().details_dict()
output['kittype'] = output['kittype'].details_dict()
output['proceduretype'] = output['proceduretype'].details_dict()
output['results'] = [result.details_dict() for result in output['results']]
output['sample'] = [sample.details_dict() for sample in output['sample']]
output['reagent'] = [reagent.details_dict() for reagent in output['procedurereagentassociation']]
output['equipment'] = [equipment.details_dict() for equipment in output['procedureequipmentassociation']]
output['tips'] = [tips.details_dict() for tips in output['proceduretipsassociation']]
return output
class ProcedureTypeKitTypeAssociation(BaseClass):
"""
@@ -1872,6 +1882,17 @@ class ProcedureReagentAssociation(BaseClass):
from backend.validators import PydReagent
return PydReagent(**self.to_sub_dict(kittype=kittype))
def details_dict(self):
output = super().details_dict()
# NOTE: Figure out how to merge the misc_info if doing .update instead.
relevant = {k: v for k, v in output.items() if k not in ['reagent']}
output = output['reagent'].details_dict()
misc = output['_misc_info']
output.update(relevant)
output['_misc_info'] = misc
output['results'] = [result.details_dict() for result in output['results']]
return output
class Equipment(BaseClass, LogMixin):
"""
@@ -2316,6 +2337,16 @@ class ProcedureEquipmentAssociation(BaseClass):
query = query.filter(cls.equipmentrole == equipmentrole)
return cls.execute_query(query=query, limit=limit, **kwargs)
def details_dict(self):
output = super().details_dict()
# NOTE: Figure out how to merge the misc_info if doing .update instead.
relevant = {k: v for k, v in output.items() if k not in ['equipment']}
output = output['equipment'].details_dict()
misc = output['_misc_info']
output.update(relevant)
output['_misc_info'] = misc
output['process'] = self.process.details_dict()
return output
class ProcedureTypeEquipmentRoleAssociation(BaseClass):
"""

View File

@@ -70,7 +70,7 @@ class ClientSubmission(BaseClass, LogMixin):
cascade="all, delete-orphan",
) #: Relation to ClientSubmissionSampleAssociation
samples = association_proxy("clientsubmissionsampleassociation",
sample = association_proxy("clientsubmissionsampleassociation",
"sample") #, creator=lambda sample: ClientSubmissionSampleAssociation(
# sample=sample)) #: Association proxy to ClientSubmissionSampleAssociation.sample
@@ -332,6 +332,7 @@ class ClientSubmission(BaseClass, LogMixin):
output['contact'] = output['contact'].details_dict()
output['submissiontype'] = output['submissiontype'].details_dict()
output['run'] = [run.details_dict() for run in output['run']]
output['sample'] = [sample.details_dict() for sample in output['clientsubmissionsampleassociation']]
return output
@@ -589,6 +590,12 @@ class Run(BaseClass, LogMixin):
output["completed_date"] = self.completed_date
return output
def details_dict(self):
output = super().details_dict()
output['sample'] = [sample.details_dict() for sample in output['runsampleassociation']]
output['procedure'] = [procedure.details_dict() for procedure in output['procedure']]
return output
@classmethod
def archive_submissions(cls, start_date: date | datetime | str | int | None = None,
end_date: date | datetime | str | int | None = None,
@@ -1629,6 +1636,20 @@ class ClientSubmissionSampleAssociation(BaseClass):
sample['submission_rank'] = self.submission_rank
return sample
def details_dict(self):
output = super().details_dict()
# NOTE: Figure out how to merge the misc_info if doing .update instead.
relevant = {k: v for k, v in output.items() if k not in ['sample']}
logger.debug(f"Relevant info from assoc output: {pformat(relevant)}")
output = output['sample'].details_dict()
misc = output['_misc_info']
logger.debug(f"Output from sample: {pformat(output)}")
output.update(relevant)
output['_misc_info'] = misc
# output['sample'] = temp
# output.update(output['sample'].details_dict())
return output
def to_pydantic(self) -> "PydSample":
"""
Creates a pydantic model for this sample.
@@ -2034,6 +2055,17 @@ class RunSampleAssociation(BaseClass):
def delete(self):
raise AttributeError(f"Delete not implemented for {self.__class__}")
def details_dict(self):
output = super().details_dict()
# NOTE: Figure out how to merge the misc_info if doing .update instead.
relevant = {k: v for k, v in output.items() if k not in ['sample']}
logger.debug(f"Relevant info from assoc output: {pformat(relevant)}")
output = output['sample'].details_dict()
misc = output['_misc_info']
logger.debug(f"Output from sample: {pformat(output)}")
output.update(relevant)
output['_misc_info'] = misc
return output
class ProcedureSampleAssociation(BaseClass):
@@ -2093,3 +2125,15 @@ class ProcedureSampleAssociation(BaseClass):
except ValueError as e:
logger.error(f"Problem incrementing id: {e}")
return 1
def details_dict(self):
output = super().details_dict()
# NOTE: Figure out how to merge the misc_info if doing .update instead.
relevant = {k: v for k, v in output.items() if k not in ['sample']}
output = output['sample'].details_dict()
misc = output['_misc_info']
output.update(relevant)
output['_misc_info'] = misc
output['results'] = [result.details_dict() for result in output['results']]
return output