Expanded testing capabilities.

This commit is contained in:
Landon Wark
2023-04-11 14:06:10 -05:00
parent 4398517a3e
commit d926ca7c9c
4 changed files with 20 additions and 10 deletions

View File

@@ -4,6 +4,7 @@ All kit and reagent related models
from . import Base from . import Base
from sqlalchemy import Column, String, TIMESTAMP, JSON, INTEGER, ForeignKey, Interval, Table, FLOAT from sqlalchemy import Column, String, TIMESTAMP, JSON, INTEGER, ForeignKey, Interval, Table, FLOAT
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from datetime import date
import logging import logging
logger = logging.getLogger(f'submissions.{__name__}') logger = logging.getLogger(f'submissions.{__name__}')
@@ -100,9 +101,11 @@ class Reagent(Base):
place_holder = self.expiry + self.type.eol_ext place_holder = self.expiry + self.type.eol_ext
# logger.debug(f"EOL_ext for {self.lot} -- {self.expiry} + {self.type.eol_ext} = {place_holder}") # logger.debug(f"EOL_ext for {self.lot} -- {self.expiry} + {self.type.eol_ext} = {place_holder}")
except TypeError as e: except TypeError as e:
logger.debug(f"We got a type error setting {self.lot} expiry: {e}.") place_holder = date.today()
logger.debug(f"We got a type error setting {self.lot} expiry: {e}. setting to today for testing")
except AttributeError as e: except AttributeError as e:
logger.debug(f"We got an attribute error setting {self.lot} expiry: {e}.") place_holder = date.today()
logger.debug(f"We got an attribute error setting {self.lot} expiry: {e}. Setting to today for testing")
return { return {
"type": type, "type": type,
"lot": self.lot, "lot": self.lot,

View File

@@ -99,7 +99,7 @@ def convert_data_list_to_df(ctx:dict, input:list[dict], subtype:str|None=None) -
""" """
df = DataFrame.from_records(input) df = DataFrame.from_records(input)
df.to_excel("test.xlsx", engine="openpyxl") # df.to_excel("test.xlsx", engine="openpyxl")
safe = ['name', 'submitted_date', 'genus', 'target'] safe = ['name', 'submitted_date', 'genus', 'target']
for column in df.columns: for column in df.columns:
if "percent" in column: if "percent" in column:
@@ -139,6 +139,7 @@ def df_column_renamer(df:DataFrame) -> DataFrame:
def displace_date(df:DataFrame) -> DataFrame: def displace_date(df:DataFrame) -> DataFrame:
""" """
This function serves to split samples that were submitted on the same date by incrementing dates. This function serves to split samples that were submitted on the same date by incrementing dates.
It will shift the date forward by one day if it is the same day as an existing date in a list.
Args: Args:
df (DataFrame): input dataframe composed of control records df (DataFrame): input dataframe composed of control records
@@ -149,17 +150,23 @@ def displace_date(df:DataFrame) -> DataFrame:
logger.debug(f"Unique items: {df['name'].unique()}") logger.debug(f"Unique items: {df['name'].unique()}")
# get submitted dates for each control # get submitted dates for each control
dict_list = [dict(name=item, date=df[df.name == item].iloc[0]['submitted_date']) for item in sorted(df['name'].unique())] dict_list = [dict(name=item, date=df[df.name == item].iloc[0]['submitted_date']) for item in sorted(df['name'].unique())]
previous_dates = []
for ii, item in enumerate(dict_list): for ii, item in enumerate(dict_list):
try: try:
check = item['date'] == dict_list[ii-1]['date'] # check = item['date'] == dict_list[ii-1]['date']
check = item['date'] in previous_dates
except IndexError: except IndexError:
check = False check = False
if check: if check:
# occurences = previous_dates.count(item['date'])
logger.debug(f"We found one! Increment date!\n\t{item['date'] - timedelta(days=1)}") logger.debug(f"We found one! Increment date!\n\t{item['date'] - timedelta(days=1)}")
# get df locations where name == item name # get df locations where name == item name
mask = df['name'] == item['name'] mask = df['name'] == item['name']
# increment date in dataframe # increment date in dataframe
df.loc[mask, 'submitted_date'] = df.loc[mask, 'submitted_date'].apply(lambda x: x + timedelta(days=1)) df.loc[mask, 'submitted_date'] = df.loc[mask, 'submitted_date'].apply(lambda x: x + timedelta(days=1))
previous_dates.append(item['date'] + timedelta(days=1))
else:
previous_dates.append(item['date'])
return df return df
@@ -188,8 +195,8 @@ def drop_reruns_from_df(ctx:dict, df: DataFrame) -> DataFrame:
Returns: Returns:
DataFrame: dataframe with originals removed in favour of repeats. DataFrame: dataframe with originals removed in favour of repeats.
""" """
sample_names = get_unique_values_in_df_column(df, column_name="name")
if 'rerun_regex' in ctx: if 'rerun_regex' in ctx:
sample_names = get_unique_values_in_df_column(df, column_name="name")
# logger.debug(f"Compiling regex from: {settings['rerun_regex']}") # logger.debug(f"Compiling regex from: {settings['rerun_regex']}")
rerun_regex = re.compile(fr"{ctx['rerun_regex']}") rerun_regex = re.compile(fr"{ctx['rerun_regex']}")
for sample in sample_names: for sample in sample_names:
@@ -199,6 +206,6 @@ def drop_reruns_from_df(ctx:dict, df: DataFrame) -> DataFrame:
first_run = re.sub(rerun_regex, "", sample) first_run = re.sub(rerun_regex, "", sample)
# logger.debug(f"First run: {first_run}") # logger.debug(f"First run: {first_run}")
df = df.drop(df[df.name == first_run].index) df = df.drop(df[df.name == first_run].index)
return df return df
else: # else:
return None # return df

View File

@@ -34,7 +34,7 @@ class App(QMainWindow):
# indicate version and database connected in title bar # indicate version and database connected in title bar
try: try:
self.title = f"Submissions App (v{ctx['package'].__version__}) - {ctx['database']}" self.title = f"Submissions App (v{ctx['package'].__version__}) - {ctx['database']}"
except AttributeError: except (AttributeError, KeyError):
self.title = f"Submissions App" self.title = f"Submissions App"
# set initial app position and size # set initial app position and size
self.left = 0 self.left = 0

View File

@@ -37,7 +37,7 @@ def create_charts(ctx:dict, df:pd.DataFrame, ytitle:str|None=None) -> Figure:
genera.append("") genera.append("")
except IndexError: except IndexError:
genera.append("") genera.append("")
df['genus'] = df['genus'].replace({'\*':''}, regex=True) df['genus'] = df['genus'].replace({'\*':''}, regex=True).replace({"NaN":"Unknown"})
df['genera'] = genera df['genera'] = genera
df = df.dropna() df = df.dropna()
# remove original runs, using reruns if applicable # remove original runs, using reruns if applicable