Moved to error reporting framework.

This commit is contained in:
lwark
2024-09-12 12:03:02 -05:00
parent d52fa36150
commit 744394f236
10 changed files with 109 additions and 48 deletions

View File

@@ -167,20 +167,20 @@ class BaseClass(Base):
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}"
# match e:
# case sqlalcIntegrityError():
# origin = e.orig.__str__().lower()
# logger.error(f"Exception origin: {origin}")
# if "unique constraint failed:" in origin:
# field = " ".join(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=msg, status="Critical"))
report.add_result(Result(msg=e, status="Critical"))
return report

View File

@@ -9,7 +9,7 @@ from operator import itemgetter
from . import BaseClass
from tools import setup_lookup
from datetime import date, datetime
from typing import List
from typing import List, Literal
from dateutil.parser import parse
from re import Pattern
@@ -53,7 +53,7 @@ class ControlType(BaseClass):
pass
return cls.execute_query(query=query, limit=limit)
def get_subtypes(self, mode: str) -> List[str]:
def get_subtypes(self, mode: Literal['kraken', 'matches', 'contains']) -> List[str]:
"""
Get subtypes associated with this controltype (currently used only for Kraken)
@@ -161,7 +161,7 @@ class Control(BaseClass):
}
return output
def convert_by_mode(self, mode: str) -> list[dict]:
def convert_by_mode(self, mode: Literal['kraken', 'matches', 'contains']) -> list[dict]:
"""
split this instance into analysis types for controls graphs
@@ -195,7 +195,7 @@ class Control(BaseClass):
output.append(_dict)
# logger.debug("Have to triage kraken data to keep program from getting overwhelmed")
if "kraken" in mode:
output = sorted(output, key=lambda d: d[f"{mode}_count"], reverse=True)[:49]
output = sorted(output, key=lambda d: d[f"{mode}_count"], reverse=True)[:50]
return output
@classmethod

View File

@@ -7,6 +7,7 @@ import datetime
import json
from pprint import pprint, pformat
import yaml
from sqlalchemy import Column, String, TIMESTAMP, JSON, INTEGER, ForeignKey, Interval, Table, FLOAT, BLOB
from sqlalchemy.orm import relationship, validates, Query
from sqlalchemy.ext.associationproxy import association_proxy
@@ -873,7 +874,12 @@ class SubmissionType(BaseClass):
logging.critical(f"Given file could not be found.")
return None
with open(filepath, "r") as f:
import_dict = json.load(fp=f)
if filepath.suffix == ".json":
import_dict = json.load(fp=f)
elif filepath.suffix == ".yml":
import_dict = yaml.safe_load(stream=f)
else:
raise Exception(f"Filetype {filepath.suffix} not supported.")
logger.debug(pformat(import_dict))
submission_type = cls.query(name=import_dict['name'])
if submission_type:

View File

@@ -2425,15 +2425,18 @@ class BasicSample(BaseClass):
case _:
model = cls.find_polymorphic_subclass(attrs=kwargs)
# logger.debug(f"Length of kwargs: {len(kwargs)}")
# logger.debug(f"Fuzzy search received sample type: {sample_type}")
query: Query = cls.__database_session__.query(model)
# logger.debug(f"Queried model. Now running searches in {kwargs}")
for k, v in kwargs.items():
# logger.debug(f"Running fuzzy search for attribute: {k} with value {v}")
search = f"%{v}%"
try:
attr = getattr(model, k)
query = query.filter(attr.like(search))
except (ArgumentError, AttributeError) as e:
logger.error(f"Attribute {k} unavailable due to:\n\t{e}\nSkipping.")
return query.all()
return query.limit(50).all()
def delete(self):
raise AttributeError(f"Delete not implemented for {self.__class__}")