Addition of WW artic parsers, large-scale shake-up of parser structure.
This commit is contained in:
@@ -10,4 +10,4 @@ from .controls import Control, ControlType
|
||||
from .kits import KitType, ReagentType, Reagent, Discount
|
||||
from .organizations import Organization, Contact
|
||||
from .samples import WWSample, BCSample
|
||||
from .submissions import BasicSubmission, BacterialCulture, Wastewater
|
||||
from .submissions import BasicSubmission, BacterialCulture, Wastewater, WastewaterArtic
|
||||
|
||||
@@ -37,6 +37,8 @@ class WWSample(Base):
|
||||
sample_type = Column(String(8))
|
||||
pcr_results = Column(JSON)
|
||||
elution_well = Column(String(8)) #: location on 96 well plate
|
||||
artic_rsl_plate = relationship("WastewaterArtic", back_populates="samples")
|
||||
artic_well_number = Column(String(8))
|
||||
|
||||
|
||||
def to_string(self) -> str:
|
||||
@@ -131,3 +133,41 @@ class BCSample(Base):
|
||||
"well": self.well_number,
|
||||
"name": f"{self.sample_id} - ({self.organism})",
|
||||
}
|
||||
|
||||
|
||||
# class ArticSample(Base):
|
||||
# """
|
||||
# base of artic sample
|
||||
# """
|
||||
# __tablename__ = "_artic_samples"
|
||||
|
||||
# id = Column(INTEGER, primary_key=True) #: primary key
|
||||
# well_number = Column(String(8)) #: location on parent plate
|
||||
# rsl_plate = relationship("WastewaterArtic", back_populates="samples") #: relationship to parent plate
|
||||
# rsl_plate_id = Column(INTEGER, ForeignKey("_submissions.id", ondelete="SET NULL", name="fk_WWA_submission_id"))
|
||||
# ww_sample_full_id = Column(String(64), nullable=False)
|
||||
# lims_sample_id = Column(String(64), nullable=False)
|
||||
# ct_1 = Column(FLOAT(2)) #: first ct value in column
|
||||
# ct_2 = Column(FLOAT(2)) #: second ct value in column
|
||||
|
||||
# def to_string(self) -> str:
|
||||
# """
|
||||
# string representing sample object
|
||||
|
||||
# Returns:
|
||||
# str: string representing location and sample id
|
||||
# """
|
||||
# return f"{self.well_number}: {self.ww_sample_full_id}"
|
||||
|
||||
# def to_sub_dict(self) -> dict:
|
||||
# """
|
||||
# gui friendly dictionary
|
||||
|
||||
# Returns:
|
||||
# dict: well location and name (sample id, organism) NOTE: keys must sync with WWSample to_sub_dict above
|
||||
# """
|
||||
# return {
|
||||
# "well": self.well_number,
|
||||
# "name": self.ww_sample_full_id,
|
||||
# }
|
||||
|
||||
|
||||
@@ -161,7 +161,16 @@ class BasicSubmission(Base):
|
||||
}
|
||||
return output
|
||||
|
||||
|
||||
def calculate_base_cost(self):
|
||||
try:
|
||||
cols_count_96 = ceil(int(self.sample_count) / 8)
|
||||
except Exception as e:
|
||||
logger.error(f"Column count error: {e}")
|
||||
# cols_count_24 = ceil(int(self.sample_count) / 3)
|
||||
try:
|
||||
self.run_cost = self.extraction_kit.constant_cost + (self.extraction_kit.mutable_cost_column * cols_count_96) + (self.extraction_kit.mutable_cost_sample * int(self.sample_count))
|
||||
except Exception as e:
|
||||
logger.error(f"Calculation error: {e}")
|
||||
|
||||
# Below are the custom submission types
|
||||
|
||||
@@ -185,16 +194,16 @@ class BacterialCulture(BasicSubmission):
|
||||
return output
|
||||
|
||||
|
||||
def calculate_base_cost(self):
|
||||
try:
|
||||
cols_count_96 = ceil(int(self.sample_count) / 8)
|
||||
except Exception as e:
|
||||
logger.error(f"Column count error: {e}")
|
||||
# cols_count_24 = ceil(int(self.sample_count) / 3)
|
||||
try:
|
||||
self.run_cost = self.extraction_kit.constant_cost + (self.extraction_kit.mutable_cost_column * cols_count_96) + (self.extraction_kit.mutable_cost_sample * int(self.sample_count))
|
||||
except Exception as e:
|
||||
logger.error(f"Calculation error: {e}")
|
||||
# def calculate_base_cost(self):
|
||||
# try:
|
||||
# cols_count_96 = ceil(int(self.sample_count) / 8)
|
||||
# except Exception as e:
|
||||
# logger.error(f"Column count error: {e}")
|
||||
# # cols_count_24 = ceil(int(self.sample_count) / 3)
|
||||
# try:
|
||||
# self.run_cost = self.extraction_kit.constant_cost + (self.extraction_kit.mutable_cost_column * cols_count_96) + (self.extraction_kit.mutable_cost_sample * int(self.sample_count))
|
||||
# except Exception as e:
|
||||
# logger.error(f"Calculation error: {e}")
|
||||
|
||||
|
||||
class Wastewater(BasicSubmission):
|
||||
@@ -220,14 +229,22 @@ class Wastewater(BasicSubmission):
|
||||
pass
|
||||
return output
|
||||
|
||||
def calculate_base_cost(self):
|
||||
try:
|
||||
cols_count_96 = ceil(int(self.sample_count) / 8) + 1 #: Adding in one column to account for 24 samples + ext negatives
|
||||
except Exception as e:
|
||||
logger.error(f"Column count error: {e}")
|
||||
# cols_count_24 = ceil(int(self.sample_count) / 3)
|
||||
try:
|
||||
self.run_cost = self.extraction_kit.constant_cost + (self.extraction_kit.mutable_cost_column * cols_count_96) + (self.extraction_kit.mutable_cost_sample * int(self.sample_count))
|
||||
except Exception as e:
|
||||
logger.error(f"Calculation error: {e}")
|
||||
|
||||
# def calculate_base_cost(self):
|
||||
# try:
|
||||
# cols_count_96 = ceil(int(self.sample_count) / 8) + 1 #: Adding in one column to account for 24 samples + ext negatives
|
||||
# except Exception as e:
|
||||
# logger.error(f"Column count error: {e}")
|
||||
# # cols_count_24 = ceil(int(self.sample_count) / 3)
|
||||
# try:
|
||||
# self.run_cost = self.extraction_kit.constant_cost + (self.extraction_kit.mutable_cost_column * cols_count_96) + (self.extraction_kit.mutable_cost_sample * int(self.sample_count))
|
||||
# except Exception as e:
|
||||
# logger.error(f"Calculation error: {e}")
|
||||
|
||||
|
||||
class WastewaterArtic(BasicSubmission):
|
||||
"""
|
||||
derivative submission type for artic wastewater
|
||||
"""
|
||||
samples = relationship("WWSample", back_populates="artic_rsl_plate", uselist=True)
|
||||
# Can in use the pcr_info from the wastewater? Cause I can't define pcr_info here due to conflicts with that
|
||||
__mapper_args__ = {"polymorphic_identity": "wastewater_artic", "polymorphic_load": "inline"}
|
||||
Reference in New Issue
Block a user