Improved error messaging when saving submissions.
This commit is contained in:
@@ -6,10 +6,11 @@ import sys, logging
|
||||
from sqlalchemy import Column, INTEGER, String, JSON
|
||||
from sqlalchemy.orm import DeclarativeMeta, declarative_base, Query, Session
|
||||
from sqlalchemy.ext.declarative import declared_attr
|
||||
from sqlalchemy.exc import ArgumentError
|
||||
from sqlalchemy.exc import ArgumentError, IntegrityError as sqlalcIntegrityError
|
||||
from typing import Any, List
|
||||
from pathlib import Path
|
||||
from tools import report_result
|
||||
# from sqlite3 import IntegrityError as sqliteIntegrityError
|
||||
|
||||
# Load testing environment
|
||||
if 'pytest' in sys.modules:
|
||||
@@ -165,8 +166,21 @@ class BaseClass(Base):
|
||||
self.__database_session__.commit()
|
||||
except Exception as e:
|
||||
logger.critical(f"Problem saving object: {e}")
|
||||
logger.error(f"Error message: {type(e)}")
|
||||
match e:
|
||||
case sqlalcIntegrityError():
|
||||
origin = e.orig.__str__().lower()
|
||||
logger.debug(f"Exception origin: {origin}")
|
||||
if "unique constraint failed:" in origin:
|
||||
field = origin.split(".")[1].replace("_", " ").upper()
|
||||
logger.debug(field)
|
||||
msg = f"{field} doesn't have a unique value.\nIt must be changed."
|
||||
else:
|
||||
msg = f"Got unknown integrity error: {e}"
|
||||
case _:
|
||||
msg = f"Got generic error: {e}"
|
||||
self.__database_session__.rollback()
|
||||
report.add_result(Result(msg=f"Problem saving object {e}", status="Critical"))
|
||||
report.add_result(Result(msg=msg, status="Critical"))
|
||||
return report
|
||||
|
||||
|
||||
|
||||
@@ -142,20 +142,22 @@ class Control(BaseClass):
|
||||
kraken_cnt_total = sum([kraken[item]['kraken_count'] for item in kraken])
|
||||
# logger.debug("Creating new kraken.")
|
||||
new_kraken = [dict(name=item, kraken_count=kraken[item]['kraken_count'],
|
||||
kraken_percent="{0:.0%}".format(kraken[item]['kraken_count'] / kraken_cnt_total)) for item in
|
||||
kraken]
|
||||
kraken_percent="{0:.0%}".format(kraken[item]['kraken_count'] / kraken_cnt_total),
|
||||
target=item in self.controltype.targets)
|
||||
for item in kraken]
|
||||
# logger.debug(f"New kraken before sort: {new_kraken}")
|
||||
new_kraken = sorted(new_kraken, key=itemgetter('kraken_count'), reverse=True)
|
||||
# logger.debug("setting targets")
|
||||
if not self.controltype.targets:
|
||||
targets = ["None"]
|
||||
else:
|
||||
if self.controltype.targets:
|
||||
targets = self.controltype.targets
|
||||
else:
|
||||
targets = ["None"]
|
||||
# logger.debug("constructing output dictionary")
|
||||
output = {
|
||||
"name": self.name,
|
||||
"type": self.controltype.name,
|
||||
"targets": ", ".join(targets),
|
||||
"kraken": new_kraken[0:5]
|
||||
"kraken": new_kraken[0:10]
|
||||
}
|
||||
return output
|
||||
|
||||
|
||||
@@ -645,7 +645,7 @@ class BasicSubmission(BaseClass):
|
||||
# logger.debug("Saving submission.")
|
||||
if original:
|
||||
self.uploaded_by = getuser()
|
||||
super().save()
|
||||
return super().save()
|
||||
|
||||
@classmethod
|
||||
def get_regex(cls, submission_type:SubmissionType|str|None=None):
|
||||
|
||||
Reference in New Issue
Block a user