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