mid code cleanup

This commit is contained in:
lwark
2024-11-25 15:11:32 -06:00
parent 7f0b7feb5d
commit b45a125c51
5 changed files with 55 additions and 210 deletions

View File

@@ -5,7 +5,7 @@ from __future__ import annotations
import sys, logging
import pandas as pd
from sqlalchemy import Column, INTEGER, String, JSON, event, inspect
from sqlalchemy import Column, INTEGER, String, JSON, inspect
from sqlalchemy.orm import DeclarativeMeta, declarative_base, Query, Session
from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.exc import ArgumentError
@@ -23,11 +23,9 @@ logger = logging.getLogger(f"submissions.{__name__}")
class LogMixin(Base):
__abstract__ = True
class BaseClass(Base):
"""
Abstract class to pass ctx values to all SQLAlchemy objects.
@@ -111,15 +109,27 @@ class BaseClass(Base):
return cls
if " " in name:
search = name.title().replace(" ", "")
else:
search = name
logger.debug(f"Searching for subclass: {search}")
return next((item for item in cls.__subclasses__() if item.__name__ == search), cls)
@classmethod
def fuzzy_search(cls, **kwargs):
def fuzzy_search(cls, **kwargs) -> List[Any]:
"""
Uses approximation of fields to get list of query results.
Args:
**kwargs ():
Returns:
List[Any]: Results of sqlalchemy query.
"""
query: Query = cls.__database_session__.query(cls)
# 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}")
# NOTE: Not sure why this is necessary, but it is.
search = f"%{v}%"
try:
attr = getattr(cls, k)
@@ -130,8 +140,17 @@ class BaseClass(Base):
return query.limit(50).all()
@classmethod
def results_to_df(cls, objects: list, **kwargs):
records = [object.to_sub_dict(**kwargs) for object in objects]
def results_to_df(cls, objects: list, **kwargs) -> pd.DataFrame:
"""
Args:
objects (list): Objects to be converted to dataframe.
**kwargs (): Arguments necessary for the to_sub_dict method. eg extraction_kit=X
Returns:
pd.Dataframe
"""
records = [obj.to_sub_dict(**kwargs) for obj in objects]
return pd.DataFrame.from_records(records)
@classmethod
@@ -203,8 +222,6 @@ class BaseClass(Base):
return report
class ConfigItem(BaseClass):
"""
Key:JSON objects to store config settings in database.