diff --git a/cg/cli/upload/utils.py b/cg/cli/upload/utils.py
index d97b71b6993..09397b9a50a 100644
--- a/cg/cli/upload/utils.py
+++ b/cg/cli/upload/utils.py
@@ -26,7 +26,11 @@ def suggest_cases_to_upload(status_db: Store, workflow: Workflow | None = None)
def get_scout_api_by_case(cg_config: CGConfig, case_id: str) -> ScoutAPI:
workflow = cg_config.status_db.get_case_by_internal_id(case_id).data_analysis
- return cg_config.scout_api_38 if workflow == Workflow.NALLO else cg_config.scout_api_37
+ return (
+ cg_config.scout_api_38
+ if workflow in [Workflow.NALLO, Workflow.RAREDISEASE]
+ else cg_config.scout_api_37
+ )
def get_scout_api_by_genome_build(cg_config: CGConfig, genome_build: str) -> ScoutAPI:
diff --git a/cg/meta/delivery_report/templates/macros/uploaded_files/uploaded_files.html b/cg/meta/delivery_report/templates/macros/uploaded_files/uploaded_files.html
index e68323e1cfc..c9a9f3ffeb0 100644
--- a/cg/meta/delivery_report/templates/macros/uploaded_files/uploaded_files.html
+++ b/cg/meta/delivery_report/templates/macros/uploaded_files/uploaded_files.html
@@ -6,115 +6,115 @@
{% macro uploaded_files(case, customer) %}
{% set data_delivery = case.data_analysis.data_delivery %}
- {% if "fastq" in data_delivery or "analysis" in data_delivery or "scout" in data_delivery %}
-
-
Uppladdade filer
-
-
- {{ scout_files(case=case, customer_id=customer.id, scout_access=customer.scout_access) }}
-
- {{ caesar_files(case=case, customer_id=customer.id) }}
-
- {% endif %}
+{% if "fastq" in data_delivery or "analysis" in data_delivery or "scout" in data_delivery %}
+
+
Uppladdade filer
+
+
+ {{ scout_files(case=case, customer_id=customer.id, scout_access=customer.scout_access) }}
+
+ {{ caesar_files(case=case, customer_id=customer.id) }}
+
+{% endif %}
{% endmacro %}
{% macro scout_files(case, customer_id, scout_access) %}
{% set workflow = case.data_analysis.workflow %}
- {% if scout_access and "scout" in case.data_analysis.data_delivery %}
- Scout
-
- {% if "balsamic" in workflow %}
-
- {{ balsamic_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
- {% elif workflow == "mip-dna" %}
-
- {{ mip_dna_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
- {% elif workflow == "nallo" %}
-
- {{ nallo_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
- {% elif workflow == "raredisease" %}
-
- {{ raredisease_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
- {% elif workflow == "rnafusion" %}
-
- {{ rnafusion_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
- {% endif %}
+{% if scout_access and "scout" in case.data_analysis.data_delivery %}
+Scout
+
+{% if "balsamic" in workflow %}
+
+{{ balsamic_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
+{% elif workflow == "mip-dna" %}
+
+{{ mip_dna_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
+{% elif workflow == "nallo" %}
+
+{{ nallo_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
+{% elif workflow == "raredisease" %}
+
+{{ raredisease_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
+{% elif workflow == "rnafusion" %}
+
+{{ rnafusion_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
+{% endif %}
+{% endif %}
{% endmacro %}
{% macro caesar_files(case, customer_id) %}
{% set data_delivery = case.data_analysis.data_delivery %}
- {% if "fastq" in data_delivery or "analysis" in data_delivery %}
- Leveransinkorg (Caesar)
-
-
- {{ analysis_files(case=case) }}
-
- {{ fastq_files(case=case) }}
- {% endif %}
+{% if "fastq" in data_delivery or "analysis" in data_delivery %}
+Leveransinkorg (Caesar)
+
+
+{{ analysis_files(case=case) }}
+
+{{ fastq_files(case=case) }}
+{% endif %}
{% endmacro %}
{% macro analysis_files(case) %}
- {% if "analysis" in case.data_analysis.data_delivery %}
-
-
-
- | Analysfiler |
-
-
-
- {{ delivered_files(row_title=case.name, files=case.data_analysis.delivered_files) }}
- {% for sample in case.samples %}
- {{ delivered_files(row_title=sample.name, files=sample.delivered_files) }}
- {% endfor %}
-
-
- {% endif %}
+{% if "analysis" in case.data_analysis.data_delivery %}
+
+
+
+ | Analysfiler |
+
+
+
+ {{ delivered_files(row_title=case.name, files=case.data_analysis.delivered_files) }}
+ {% for sample in case.samples %}
+ {{ delivered_files(row_title=sample.name, files=sample.delivered_files) }}
+ {% endfor %}
+
+
+{% endif %}
{% endmacro %}
{% macro fastq_files(case) %}
- {% if "fastq" in case.data_analysis.data_delivery %}
-
-
-
- | Fastq-filer |
-
-
-
- {% for sample in case.samples %}
-
- {{ delivered_files(row_title=sample.name, files=sample.delivered_fastq_files) }}
- {% endfor %}
-
-
- {% endif %}
-{% endmacro %}
-
-{% macro delivered_files(row_title, files) %}
- {% if files != "N/A" %}
+{% if "fastq" in case.data_analysis.data_delivery %}
+
+
- | {{ row_title }} |
+ Fastq-filer |
- {% for file in files %}
-
- | {{ file }} |
-
+
+
+ {% for sample in case.samples %}
+
+ {{ delivered_files(row_title=sample.name, files=sample.delivered_fastq_files) }}
{% endfor %}
- {% endif %}
+
+
+{% endif %}
{% endmacro %}
+
+{% macro delivered_files(row_title, files) %}
+{% if files != "N/A" %}
+
+ | {{ row_title }} |
+
+{% for file in files %}
+
+ | {{ file }} |
+
+{% endfor %}
+{% endif %}
+{% endmacro %}
\ No newline at end of file
diff --git a/cg/meta/upload/scout/raredisease_config_builder.py b/cg/meta/upload/scout/raredisease_config_builder.py
index b0e538ad278..da209822ada 100644
--- a/cg/meta/upload/scout/raredisease_config_builder.py
+++ b/cg/meta/upload/scout/raredisease_config_builder.py
@@ -69,7 +69,7 @@ def build_load_config(self, hk_version: Version, analysis: Analysis) -> Raredise
self.load_custom_image_sample(
load_config=load_config, analysis=analysis, hk_version=hk_version
)
- load_config.human_genome_build = GenomeBuild.hg19
+ load_config.human_genome_build = GenomeBuild.hg38
load_config.rank_score_threshold = RANK_MODEL_THRESHOLD
load_config.rank_model_version = self.get_rank_model_version(
variant_type=Variants.SNV, hk_version=hk_version
diff --git a/cg/meta/workflow/analysis.py b/cg/meta/workflow/analysis.py
index 64984680eaf..c1a2aea0eca 100644
--- a/cg/meta/workflow/analysis.py
+++ b/cg/meta/workflow/analysis.py
@@ -67,7 +67,7 @@ class AnalysisAPI(MetaAPI):
def __init__(self, workflow: Workflow, config: CGConfig):
super().__init__(config=config)
self.workflow = workflow
- if self.workflow == Workflow.NALLO:
+ if self.workflow in [Workflow.NALLO, Workflow.RAREDISEASE]:
self.scout_api: ScoutAPI = self.scout_api_38
else:
self.scout_api: ScoutAPI = self.scout_api_37
diff --git a/cg/meta/workflow/raredisease.py b/cg/meta/workflow/raredisease.py
index 42d87b2a2a6..48c72b958b8 100644
--- a/cg/meta/workflow/raredisease.py
+++ b/cg/meta/workflow/raredisease.py
@@ -164,8 +164,8 @@ def get_scout_upload_case_tags(self) -> dict:
return RAREDISEASE_CASE_TAGS
def get_genome_build(self, case_id: str) -> GenomeVersion:
- """Return reference genome for a raredisease case. Currently fixed for hg19."""
- return GenomeVersion.HG19
+ """Return reference genome for a raredisease case."""
+ return GenomeVersion.HG38
def parse_analysis(self, qc_metrics_raw: list[MetricsBase], **kwargs) -> NextflowAnalysis:
"""Parse Nextflow output analysis files and return an analysis model."""
diff --git a/cg/services/delivery_message/messages/utils.py b/cg/services/delivery_message/messages/utils.py
index 0adea64b56c..e0a1e886d3a 100644
--- a/cg/services/delivery_message/messages/utils.py
+++ b/cg/services/delivery_message/messages/utils.py
@@ -15,7 +15,7 @@ def get_scout_link(case: Case) -> str:
case_name: str = case.name
url: str = (
"https://scout38.sys.scilifelab.se/"
- if case.data_analysis == Workflow.NALLO
+ if case.data_analysis in [Workflow.NALLO, Workflow.RAREDISEASE]
else "https://scout.scilifelab.se/"
)
return f"{url}{customer_id}/{case_name}"
diff --git a/tests/cli/upload/test_cli_scout.py b/tests/cli/upload/test_cli_scout.py
index 6d8fe95a4ff..88b0db03e42 100644
--- a/tests/cli/upload/test_cli_scout.py
+++ b/tests/cli/upload/test_cli_scout.py
@@ -14,6 +14,7 @@
from cg.meta.workflow.mip_dna import MipDNAAnalysisAPI
from cg.meta.workflow.mip_rna import MipRNAAnalysisAPI
from cg.meta.workflow.nallo import NalloAnalysisAPI
+from cg.meta.workflow.raredisease import RarediseaseAnalysisAPI
from cg.meta.workflow.rnafusion import RnafusionAnalysisAPI
from cg.meta.workflow.tomte import TomteAnalysisAPI
from cg.models.cg_config import CGConfig
@@ -31,22 +32,24 @@
]
ANALYSIS_API: list = [
- (Workflow.BALSAMIC, BalsamicAnalysisAPI),
- (Workflow.MIP_DNA, MipDNAAnalysisAPI),
- (Workflow.MIP_RNA, MipRNAAnalysisAPI),
- (Workflow.NALLO, NalloAnalysisAPI),
- (Workflow.RNAFUSION, RnafusionAnalysisAPI),
- (Workflow.TOMTE, TomteAnalysisAPI),
+ (Workflow.BALSAMIC, BalsamicAnalysisAPI, "scout_api_37"),
+ (Workflow.MIP_DNA, MipDNAAnalysisAPI, "scout_api_37"),
+ (Workflow.MIP_RNA, MipRNAAnalysisAPI, "scout_api_37"),
+ (Workflow.NALLO, NalloAnalysisAPI, "scout_api_38"),
+ (Workflow.RAREDISEASE, RarediseaseAnalysisAPI, "scout_api_38"),
+ (Workflow.RNAFUSION, RnafusionAnalysisAPI, "scout_api_37"),
+ (Workflow.TOMTE, TomteAnalysisAPI, "scout_api_37"),
]
@pytest.mark.parametrize(
- "workflow,analysis_api",
+ "workflow,analysis_api, scout_instance",
ANALYSIS_API,
)
def test_get_upload_api(
cg_context: CGConfig,
case_id: str,
+ scout_instance: str,
helpers: StoreHelpers,
workflow: Workflow,
analysis_api: AnalysisAPI,
@@ -63,6 +66,7 @@ def test_get_upload_api(
# THEN assert that the type of upload API is correct
assert isinstance(upload_api.analysis_api, analysis_api)
+ assert upload_api.analysis_api.scout_api is getattr(upload_api.analysis_api, scout_instance)
@pytest.mark.parametrize(
diff --git a/tests/cli/upload/test_utils.py b/tests/cli/upload/test_utils.py
index ab5f57a6ce7..67793afce2d 100644
--- a/tests/cli/upload/test_utils.py
+++ b/tests/cli/upload/test_utils.py
@@ -1,3 +1,5 @@
+import pytest
+
from cg.cli.upload.utils import get_scout_api_by_case, get_scout_api_by_genome_build
from cg.constants import Workflow
from cg.models.cg_config import CGConfig
@@ -5,32 +7,30 @@
from tests.store_helpers import StoreHelpers
-def test_get_scout_api_by_case_38(upload_context: CGConfig, helpers: StoreHelpers):
-
- # GIVEN a Nallo case
- nallo_case: Case = helpers.ensure_case(
- store=upload_context.status_db, data_analysis=Workflow.NALLO
- )
-
- # WHEN getting the corresponding ScoutAPI
- scout_api = get_scout_api_by_case(cg_config=upload_context, case_id=nallo_case.internal_id)
-
- # THEN the ScoutAPI should be towards the hg38 instance
- assert scout_api == upload_context.scout_api_38
-
-
-def test_get_scout_api_by_case_37(upload_context: CGConfig, helpers: StoreHelpers):
-
- # GIVEN a MIP-DNA case
- nallo_case: Case = helpers.ensure_case(
- store=upload_context.status_db, data_analysis=Workflow.MIP_DNA
- )
+@pytest.mark.parametrize(
+ "workflow,scout_instance",
+ [
+ (Workflow.BALSAMIC, "scout_api_37"),
+ (Workflow.BALSAMIC_UMI, "scout_api_37"),
+ (Workflow.MIP_DNA, "scout_api_37"),
+ (Workflow.MIP_RNA, "scout_api_37"),
+ (Workflow.NALLO, "scout_api_38"),
+ (Workflow.RAREDISEASE, "scout_api_38"),
+ (Workflow.TOMTE, "scout_api_37"),
+ ],
+)
+def test_get_scout_api_by_case(
+ workflow: Workflow, scout_instance: str, upload_context: CGConfig, helpers: StoreHelpers
+):
+
+ # GIVEN a case
+ case: Case = helpers.ensure_case(store=upload_context.status_db, data_analysis=workflow)
# WHEN getting the corresponding ScoutAPI
- scout_api = get_scout_api_by_case(cg_config=upload_context, case_id=nallo_case.internal_id)
+ scout_api = get_scout_api_by_case(cg_config=upload_context, case_id=case.internal_id)
- # THEN the ScoutAPI should be towards the hg37 instance
- assert scout_api == upload_context.scout_api_37
+ # THEN the ScoutAPI should be towards the correct scout instance
+ assert scout_api == getattr(upload_context, scout_instance)
def test_get_scout_api_by_reference_genome_hg19(upload_context: CGConfig):
diff --git a/tests/conftest.py b/tests/conftest.py
index af11dead8da..e859e58350c 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -2904,7 +2904,6 @@ def raredisease_context(
last_sequenced_at=datetime.now(),
reads=total_sequenced_reads_pass,
application_tag=wgs_application_tag,
- reference_genome=GenomeVersion.HG19,
)
another_sample_enough_reads: Sample = helpers.add_sample(
@@ -2914,7 +2913,6 @@ def raredisease_context(
last_sequenced_at=datetime.now(),
reads=total_sequenced_reads_pass,
application_tag=wgs_application_tag,
- reference_genome=GenomeVersion.HG19,
)
helpers.add_relationship(
diff --git a/tests/integration/config/cg-test.yaml b/tests/integration/config/cg-test.yaml
index 25350801674..93d37bd6e9e 100644
--- a/tests/integration/config/cg-test.yaml
+++ b/tests/integration/config/cg-test.yaml
@@ -94,6 +94,25 @@ crunchy:
number_tasks: 12
conda_env: crunchy_conda_env
+raredisease:
+ compute_env: raredisease_compute_env
+ conda_env: raredisease_conda_env
+ config: {test_root_dir}/raredisease_config.config
+ launch_directory: {test_root_dir}/raredisease_launch_directory
+ params: {test_root_dir}/raredisease_params.yaml
+ platform: {test_root_dir}/platform.config
+ profile: raredisease_profile
+ resources: {test_root_dir}/raredisease_resources.config
+ repository: raredisease_repository
+ revision: raredisease_revision
+ root: {test_root_dir}/raredisease_root_path
+ slurm:
+ account: "raredisease_slurm_account"
+ mail_user: "raredisease_mail_user@scilifelab.se"
+ qos: "low"
+ tower_workflow: raredisease_tower_workflow
+ workflow_bin_path: {test_root_dir}/raredisease_workflow_bin_path
+
data-delivery:
destination_path: {test_root_dir}/data-delivery_destination_path
covid_destination_path: {test_root_dir}/data-delivery_covid_destination_path
diff --git a/tests/meta/delivery_report/test_data_validators.py b/tests/meta/delivery_report/test_data_validators.py
index 727e4ebd7f7..4d035732bb3 100644
--- a/tests/meta/delivery_report/test_data_validators.py
+++ b/tests/meta/delivery_report/test_data_validators.py
@@ -314,7 +314,7 @@ def test_get_delivery_report_html_raredisease(raredisease_analysis: NextflowAnal
case: Case = create_autospec(
Case,
data_analysis=Workflow.RAREDISEASE,
- data_delivery=DataDelivery.ANALYSIS_FILES,
+ data_delivery=DataDelivery.ANALYSIS_SCOUT,
internal_id="case_id",
sample=[sample],
panels=["some_panel"],
@@ -370,6 +370,7 @@ def test_get_delivery_report_html_raredisease(raredisease_analysis: NextflowAnal
force=False,
)
assert EXPECTED_RAREDISEASE_QC in delivery_report
+ assert "https://scout38.sys.scilifelab.se/" in delivery_report
def test_get_missing_report_data(
diff --git a/tests/meta/upload/scout/test_scout_config_builder.py b/tests/meta/upload/scout/test_scout_config_builder.py
index 65487d8df6d..800588c7383 100644
--- a/tests/meta/upload/scout/test_scout_config_builder.py
+++ b/tests/meta/upload/scout/test_scout_config_builder.py
@@ -681,7 +681,7 @@ def mock_get_file_from_version(version: Version, tags: set[str]) -> File | None:
gene_panels=[],
default_gene_panels=[],
cohorts=[],
- human_genome_build="37",
+ human_genome_build="38",
rank_model_version="1.38",
rank_score_threshold=5,
sv_rank_model_version="1.12",
diff --git a/tests/meta/workflow/test_raredisease.py b/tests/meta/workflow/test_raredisease.py
index 6a2fb04e6f2..945206d3097 100644
--- a/tests/meta/workflow/test_raredisease.py
+++ b/tests/meta/workflow/test_raredisease.py
@@ -1,13 +1,21 @@
-from unittest.mock import create_autospec
+from pathlib import Path
+from unittest.mock import Mock, create_autospec
from pytest_mock import MockerFixture
from cg.apps.coverage import ChanjoAPI
from cg.apps.scout.scoutapi import ScoutAPI
-from cg.constants import SexOptions
+from cg.constants import SexOptions, Workflow
+from cg.constants.constants import GenomeVersion
from cg.meta.workflow.raredisease import RarediseaseAnalysisAPI
from cg.models.analysis import NextflowAnalysis
-from cg.models.cg_config import CGConfig
+from cg.models.cg_config import (
+ CGConfig,
+ IlluminaConfig,
+ RarediseaseConfig,
+ RunInstruments,
+ SlurmConfig,
+)
from cg.models.deliverables.metric_deliverables import MetricsBase
from cg.store.models import Case, Sample
from tests.typed_mock import TypedMock, create_typed_mock
@@ -67,3 +75,37 @@ def test_get_sample_coverage(raredisease_context: CGConfig, mocker: MockerFixtur
chanjo_api.as_mock.sample_coverage.assert_called_once_with(
sample_id="internal_id", panel_genes=[]
)
+
+
+def test_get_genome_build():
+ # GIVEN the RarediseaseAnalysisAPI
+ cg_config: CGConfig = create_autospec(
+ CGConfig,
+ raredisease=create_autospec(
+ RarediseaseConfig,
+ conda_binary="conda/bin",
+ conda_env="conda/env",
+ config="here/is/my/config",
+ params="here/is/my/params/file",
+ platform="platform",
+ profile="profile",
+ resources="resources",
+ revision="1.0.0",
+ root="/I/am/Root",
+ slurm=create_autospec(SlurmConfig, account="account", mail_user="user"),
+ tower_workflow=Workflow.RAREDISEASE,
+ workflow_bin_path=Path("I", "am", "workflow", "bin", "path"),
+ ),
+ data_flow=Mock(),
+ run_instruments=create_autospec(
+ RunInstruments,
+ illumina=create_autospec(IlluminaConfig, demultiplexed_runs_dir="some_dir"),
+ ),
+ tower_binary_path="tower/path",
+ )
+
+ analysis_api = RarediseaseAnalysisAPI(config=cg_config)
+
+ # WHEN getting the genome build
+ # THEN it is hg38
+ assert analysis_api.get_genome_build(case_id="ChevyCase") == GenomeVersion.HG38
diff --git a/tests/services/analysis_starter/test_configurator_factory.py b/tests/services/analysis_starter/test_configurator_factory.py
index ab795d6e017..00324cdc466 100644
--- a/tests/services/analysis_starter/test_configurator_factory.py
+++ b/tests/services/analysis_starter/test_configurator_factory.py
@@ -200,29 +200,24 @@ def test_configurator_factory_failure(cg_context: CGConfig):
configurator_factory.get_configurator(workflow)
-def test_get_scout_api_38(cg_context: CGConfig):
- # GIVEN a configurator factory
- configurator_factory = ConfiguratorFactory(cg_config=cg_context)
-
- # GIVEN Nallo
- workflow = Workflow.NALLO
-
- # WHEN getting the scout api instance
- scout_api: ScoutAPI = configurator_factory._get_scout_api(workflow=workflow)
-
- # THEN we should receive the HG38 instance
- assert scout_api == cg_context.scout_api_38
-
-
-def test_get_scout_api_37(cg_context: CGConfig):
+@pytest.mark.parametrize(
+ "workflow, scout_instance",
+ [
+ (Workflow.BALSAMIC, "scout_api_37"),
+ (Workflow.BALSAMIC_UMI, "scout_api_37"),
+ (Workflow.MIP_DNA, "scout_api_37"),
+ (Workflow.MIP_RNA, "scout_api_37"),
+ (Workflow.NALLO, "scout_api_38"),
+ (Workflow.RAREDISEASE, "scout_api_38"),
+ (Workflow.TOMTE, "scout_api_37"),
+ ],
+)
+def test_get_scout_api(workflow: Workflow, scout_instance: str, cg_context: CGConfig):
# GIVEN a configurator factory
configurator_factory = ConfiguratorFactory(cg_config=cg_context)
- # GIVEN not Nallo
- workflow = Workflow.MIP_DNA
-
- # WHEN getting the scout api instance
+ # WHEN getting the scout api instance for a given workflow
scout_api: ScoutAPI = configurator_factory._get_scout_api(workflow=workflow)
- # THEN we should receive the HG37 instance
- assert scout_api == cg_context.scout_api_37
+ # THEN we should receive the correct scout instance
+ assert scout_api == getattr(cg_context, scout_instance)