Improved javascript error handling
This commit is contained in:
@@ -1500,9 +1500,20 @@ class Procedure(BaseClass):
|
||||
return output
|
||||
|
||||
def to_pydantic(self, **kwargs):
|
||||
from backend.validators.pydant import PydResults
|
||||
from backend.validators.pydant import PydResults, PydReagent
|
||||
output = super().to_pydantic()
|
||||
output.kittype = dict(value=output.kittype['name'], missing=False)
|
||||
reagents = []
|
||||
for reagent in output.reagent:
|
||||
match reagent:
|
||||
case dict():
|
||||
reagent['reagentrole'] = next((reagentrole.name for reagentrole in self.kittype.reagentrole if reagentrole in reagent['reagentrole']), None)
|
||||
reagents.append(PydResults(**reagent))
|
||||
case PydReagent():
|
||||
reagents.append(reagent)
|
||||
case _:
|
||||
pass
|
||||
output.reagent = [PydReagent(**item) for item in output.reagent]
|
||||
results = []
|
||||
for result in output.results:
|
||||
match result:
|
||||
@@ -1979,7 +1990,7 @@ class ProcedureReagentAssociation(BaseClass):
|
||||
misc = output['misc_info']
|
||||
output.update(relevant)
|
||||
output['misc_info'] = misc
|
||||
output['results'] = [result.details_dict() for result in output['results']]
|
||||
# output['results'] = [result.details_dict() for result in output['results']]
|
||||
return output
|
||||
|
||||
|
||||
|
||||
@@ -232,6 +232,10 @@ class PydReagent(PydBaseClass):
|
||||
if self.model_extra is not None:
|
||||
self.__dict__.update(self.model_extra)
|
||||
reagent, new = Reagent.query_or_create(lot=self.lot, name=self.name)
|
||||
if new:
|
||||
reagentrole = ReagentRole.query(name=self.reagentrole)
|
||||
reagent.reagentrole = reagentrole
|
||||
reagent.expiry = self.expiry
|
||||
# logger.debug(f"Reagent: {reagent}")
|
||||
# if reagent is None:
|
||||
# reagent = Reagent()
|
||||
@@ -1545,7 +1549,11 @@ class PydProcedure(PydBaseClass, arbitrary_types_allowed=True):
|
||||
# logger.debug(f"Updated samples:\n{pformat(self.sample)}")
|
||||
|
||||
def update_reagents(self, reagentrole: str, name: str, lot: str, expiry: str):
|
||||
removable = next((item for item in self.reagent if item.reagentrole == reagentrole), None)
|
||||
try:
|
||||
removable = next((item for item in self.reagent if item.reagentrole == reagentrole), None)
|
||||
except AttributeError as e:
|
||||
logger.error(self.reagent)
|
||||
raise e
|
||||
if removable:
|
||||
idx = self.reagent.index(removable)
|
||||
self.reagent.remove(removable)
|
||||
@@ -1581,8 +1589,12 @@ class PydProcedure(PydBaseClass, arbitrary_types_allowed=True):
|
||||
# NOTE: reset reagent associations.
|
||||
sql.procedurereagentassociation = []
|
||||
for reagent in self.reagent:
|
||||
logger.debug(reagent)
|
||||
if isinstance(reagent, dict):
|
||||
reagent = PydReagent(**reagent)
|
||||
reagent = reagent.to_sql()
|
||||
if reagent not in sql.reagent:
|
||||
logger.debug(f"Adding {reagent} to {sql}")
|
||||
reagent_assoc = ProcedureReagentAssociation(reagent=reagent, procedure=sql)
|
||||
try:
|
||||
start_index = max([item.id for item in ProcedureSampleAssociation.query()]) + 1
|
||||
|
||||
@@ -137,7 +137,8 @@ class ProcedureCreation(QDialog):
|
||||
def update_reagent(self, reagentrole:str, name_lot_expiry:str):
|
||||
try:
|
||||
name, lot, expiry = name_lot_expiry.split(" - ")
|
||||
except ValueError:
|
||||
except ValueError as e:
|
||||
logger.debug(f"Couldn't perform split due to {e}")
|
||||
return
|
||||
self.procedure.update_reagents(reagentrole=reagentrole, name=name, lot=lot, expiry=expiry)
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ var reagentRoles = document.getElementsByClassName("reagentrole");
|
||||
for(let i = 0; i < reagentRoles.length; i++) {
|
||||
reagentRoles[i].addEventListener("change", function() {
|
||||
if (reagentRoles[i].value.includes("--New--")) {
|
||||
alert("Create new reagent.")
|
||||
var br = document.createElement("br");
|
||||
var new_reg = document.getElementById("new_" + reagentRoles[i].id);
|
||||
var new_form = document.createElement("form");
|
||||
@@ -73,13 +74,21 @@ for(let i = 0; i < reagentRoles.length; i++) {
|
||||
expiry = document.getElementById("new_" + reagentRoles[i].id + "_expiry").value;
|
||||
backend.add_new_reagent(reagentRoles[i].id, name, lot, expiry);
|
||||
new_form.remove();
|
||||
reagentRoles[i].dispatchEvent(changed_it);
|
||||
// reagentRoles[i].dispatchEvent(changed_it);
|
||||
}
|
||||
new_reg.appendChild(new_form);
|
||||
} else {
|
||||
newregform = document.getElementById(reagentRoles[i].id + "_addition");
|
||||
newregform.remove();
|
||||
backend.update_reagent(reagentRoles[i].id, reagentRoles[i].value)
|
||||
try {
|
||||
newregform.remove();
|
||||
}
|
||||
catch(err) {
|
||||
console.log("Missed it.");
|
||||
}
|
||||
alert(reagentRoles[i].value);
|
||||
backend.update_reagent(reagentRoles[i].id, reagentRoles[i].value);
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user