Expanded testing capabilities.
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user