Skip to content

Commit

Permalink
feat(refactor): balsamic config (#3885)
Browse files Browse the repository at this point in the history
### Changed

- Refactor Analysis model for Balsamic
  • Loading branch information
henrikstranneheim authored Nov 5, 2024
1 parent da814f6 commit 071f361
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 19 deletions.
14 changes: 9 additions & 5 deletions cg/meta/delivery_report/balsamic.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
):
Expand Down
18 changes: 9 additions & 9 deletions cg/meta/workflow/balsamic.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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),
)

Expand Down Expand Up @@ -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:
Expand All @@ -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 (
Expand All @@ -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

Expand Down
4 changes: 2 additions & 2 deletions cg/models/balsamic/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]
2 changes: 1 addition & 1 deletion tests/meta/workflow/test_balsamic.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions tests/models/balsamic/test_balsamic_analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


Expand All @@ -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)

0 comments on commit 071f361

Please sign in to comment.