Moved to error reporting framework.
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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__}")
|
||||
|
||||
Reference in New Issue
Block a user