From 071f361e6a9e9e3a5e204019cdd4f885b29e8854 Mon Sep 17 00:00:00 2001 From: Henrik Stranneheim Date: Tue, 5 Nov 2024 10:53:54 +0100 Subject: [PATCH] feat(refactor): balsamic config (#3885) ### Changed - Refactor Analysis model for Balsamic --- cg/meta/delivery_report/balsamic.py | 14 +++++++++----- cg/meta/workflow/balsamic.py | 18 +++++++++--------- cg/models/balsamic/analysis.py | 4 ++-- tests/meta/workflow/test_balsamic.py | 2 +- .../models/balsamic/test_balsamic_analysis.py | 4 ++-- 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/cg/meta/delivery_report/balsamic.py b/cg/meta/delivery_report/balsamic.py index c6fb650222..fb715579ec 100644 --- a/cg/meta/delivery_report/balsamic.py +++ b/cg/meta/delivery_report/balsamic.py @@ -28,7 +28,11 @@ BalsamicTargetedSampleMetadataModel, BalsamicWGSSampleMetadataModel, ) -from cg.models.delivery_report.report import CaseModel, ReportRequiredFields, ScoutVariantsFiles +from cg.models.delivery_report.report import ( + CaseModel, + ReportRequiredFields, + ScoutVariantsFiles, +) from cg.models.delivery_report.sample import SampleModel from cg.store.models import Bed, BedVersion, Case, Sample @@ -76,12 +80,12 @@ def get_panel_metadata( ) -> BalsamicTargetedSampleMetadataModel: """Return report metadata for Balsamic TGS analysis.""" bed_version: BedVersion = self.status_db.get_bed_version_by_file_name( - analysis_metadata.config.panel.capture_kit + analysis_metadata.balsamic_config.panel.capture_kit ) bed: Bed = self.status_db.get_bed_by_entry_id(bed_version.bed_id) if bed_version else None return BalsamicTargetedSampleMetadataModel( bait_set=bed.name if bed else None, - bait_set_version=analysis_metadata.config.panel.capture_kit_version, + bait_set_version=analysis_metadata.balsamic_config.panel.capture_kit_version, duplicates=sample_metrics.percent_duplication if sample_metrics else None, fold_80=sample_metrics.fold_80_base_penalty if sample_metrics else None, gc_dropout=sample_metrics.gc_dropout if sample_metrics else None, @@ -120,11 +124,11 @@ def is_report_accredited( self, samples: list[SampleModel], analysis_metadata: BalsamicAnalysis ) -> bool: """Return whether the Balsamic delivery report is accredited.""" - if analysis_metadata.config.analysis.sequencing_type == "targeted" and next( + if analysis_metadata.balsamic_config.analysis.sequencing_type == "targeted" and next( ( panel for panel in BALSAMIC_REPORT_ACCREDITED_PANELS - if panel in str(analysis_metadata.config.panel.capture_kit) + if panel in str(analysis_metadata.balsamic_config.panel.capture_kit) ), None, ): diff --git a/cg/meta/workflow/balsamic.py b/cg/meta/workflow/balsamic.py index 194ef90ae3..8c37f39d2b 100644 --- a/cg/meta/workflow/balsamic.py +++ b/cg/meta/workflow/balsamic.py @@ -7,7 +7,7 @@ from pydantic.v1 import EmailStr, ValidationError from cg.constants import Workflow -from cg.constants.constants import FileFormat, SampleType, GenomeVersion +from cg.constants.constants import FileFormat, GenomeVersion, SampleType from cg.constants.housekeeper_tags import BalsamicAnalysisTag from cg.constants.observations import ObservationsFileWildcards from cg.constants.priority import SlurmQos @@ -349,7 +349,7 @@ def parse_analysis(self, config_raw: dict, qc_metrics_raw: dict, **kwargs) -> Ba qc_metrics[sample_metric.id] = {sample_metric.name.lower(): sample_metric.value} return BalsamicAnalysis( - config=config_raw, + balsamic_config=config_raw, sample_metrics=self.cast_metrics_type(sequencing_type, qc_metrics), ) @@ -615,7 +615,7 @@ def report_deliver(self, case_id: str, dry_run: bool = False) -> None: def get_genome_build(self, case_id: str) -> str: """Returns the reference genome build version of a Balsamic analysis.""" analysis_metadata: BalsamicAnalysis = self.get_latest_metadata(case_id) - return analysis_metadata.config.reference.reference_genome_version + return analysis_metadata.balsamic_config.reference.reference_genome_version @staticmethod def get_variant_caller_version(var_caller_name: str, var_caller_versions: dict) -> str | None: @@ -631,10 +631,10 @@ def get_variant_callers(self, case_id: str) -> list[str]: config.json file. """ analysis_metadata: BalsamicAnalysis = self.get_latest_metadata(case_id) - sequencing_type: str = analysis_metadata.config.analysis.sequencing_type - analysis_type: str = analysis_metadata.config.analysis.analysis_type - var_callers: dict[str, BalsamicVarCaller] = analysis_metadata.config.vcf - tool_versions: dict[str, list] = analysis_metadata.config.bioinfo_tools_version + sequencing_type: str = analysis_metadata.balsamic_config.analysis.sequencing_type + analysis_type: str = analysis_metadata.balsamic_config.analysis.analysis_type + var_callers: dict[str, BalsamicVarCaller] = analysis_metadata.balsamic_config.vcf + tool_versions: dict[str, list] = analysis_metadata.balsamic_config.bioinfo_tools_version analysis_var_callers = [] for var_caller_name, var_caller_attributes in var_callers.items(): if ( @@ -653,8 +653,8 @@ def get_pons(self, case_id: str) -> list[str]: """Return list of panel of normals used for analysis.""" pons: list[str] = [] analysis_metadata: BalsamicAnalysis = self.get_latest_metadata(case_id) - if analysis_metadata.config.panel: - if pon_cnn := analysis_metadata.config.panel.pon_cnn: + if analysis_metadata.balsamic_config.panel: + if pon_cnn := analysis_metadata.balsamic_config.panel.pon_cnn: pons.append(pon_cnn) return pons diff --git a/cg/models/balsamic/analysis.py b/cg/models/balsamic/analysis.py index 47bb72a914..f6229ec580 100644 --- a/cg/models/balsamic/analysis.py +++ b/cg/models/balsamic/analysis.py @@ -7,9 +7,9 @@ class BalsamicAnalysis(AnalysisModel): """BALSAMIC analysis model Attributes: - config: balsamic config file attributes model + balsamic_config: balsamic config file attributes model sample_metrics: retrieved QC metrics associated to a sample """ - config: BalsamicConfigJSON + balsamic_config: BalsamicConfigJSON sample_metrics: dict[str, BalsamicQCMetrics] diff --git a/tests/meta/workflow/test_balsamic.py b/tests/meta/workflow/test_balsamic.py index 93700485f9..d4f9ca22e9 100644 --- a/tests/meta/workflow/test_balsamic.py +++ b/tests/meta/workflow/test_balsamic.py @@ -206,7 +206,7 @@ def test_get_variant_caller_version(analysis_api_balsamic: MockBalsamicAnalysis, var_caller_name = "manta" var_caller_versions: dict[str, list[str]] = analysis_api_balsamic.get_latest_metadata( case_id - ).config.bioinfo_tools_version + ).balsamic_config.bioinfo_tools_version # GIVEN the tools mock version expected_version = "1.6.0" diff --git a/tests/models/balsamic/test_balsamic_analysis.py b/tests/models/balsamic/test_balsamic_analysis.py index 9c34d2d3fb..a7ab9e8ece 100644 --- a/tests/models/balsamic/test_balsamic_analysis.py +++ b/tests/models/balsamic/test_balsamic_analysis.py @@ -16,7 +16,7 @@ def test_parse_analysis_tga(cg_context, balsamic_tga_config_raw, balsamic_tga_me ) # THEN assert that it was successfully created - assert isinstance(balsamic_analysis.config, BalsamicConfigJSON) + assert isinstance(balsamic_analysis.balsamic_config, BalsamicConfigJSON) assert isinstance(balsamic_analysis.sample_metrics["ACC0000A1"], BalsamicTargetedQCMetrics) @@ -33,5 +33,5 @@ def test_parse_analysis_wgs(cg_context, balsamic_wgs_config_raw, balsamic_wgs_me # THEN assert that it was successfully created - assert isinstance(balsamic_analysis.config, BalsamicConfigJSON) + assert isinstance(balsamic_analysis.balsamic_config, BalsamicConfigJSON) assert isinstance(balsamic_analysis.sample_metrics["ACC0000A1"], BalsamicWGSQCMetrics)