Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion cg/cli/upload/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 %}
<div class="container mb-5">
<h3 class="mb-4">Uppladdade filer</h3>
<div class="alert alert-info" role="alert">
Ytterligare information om de specifika levererade filerna finns på:
<a href="https://clinical.scilifelab.se/data-delivery" class="alert-link">
https://clinical.scilifelab.se/data-delivery</a>.
</div>
<!-- Scout files -->
{{ scout_files(case=case, customer_id=customer.id, scout_access=customer.scout_access) }}
<!-- Caesar files -->
{{ caesar_files(case=case, customer_id=customer.id) }}
</div>
{% endif %}
{% if "fastq" in data_delivery or "analysis" in data_delivery or "scout" in data_delivery %}
<div class="container mb-5">
<h3 class="mb-4">Uppladdade filer</h3>
<div class="alert alert-info" role="alert">
Ytterligare information om de specifika levererade filerna finns på:
<a href="https://clinical.scilifelab.se/data-delivery" class="alert-link">
https://clinical.scilifelab.se/data-delivery</a>.
</div>
<!-- Scout files -->
{{ scout_files(case=case, customer_id=customer.id, scout_access=customer.scout_access) }}
<!-- Caesar files -->
{{ caesar_files(case=case, customer_id=customer.id) }}
</div>
{% 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 %}
<h4 class="mt-4 mb-3">Scout</h4>
<div class="alert alert-info" role="alert">
Varianter finns uppladdade i Scout:
{% if "nallo" in workflow %}
<a href="https://scout38.sys.scilifelab.se/{{ customer_id }}/{{ case.name }}" class="alert-link">
https://scout38.sys.scilifelab.se/{{ customer_id }}/{{ case.name }}</a>.
{% else %}
<a href="https://scout.scilifelab.se/{{ customer_id }}/{{ case.name }}" class="alert-link">
https://scout.scilifelab.se/{{ customer_id }}/{{ case.name }}</a>.
{% endif %}
</div>
{% if "balsamic" in workflow %}
<!-- BALSAMIC Scout files -->
{{ 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 -->
{{ 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 -->
{{ nallo_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
{% elif workflow == "raredisease" %}
<!-- Raredisease Scout files -->
{{ raredisease_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
{% elif workflow == "rnafusion" %}
<!-- Rnafusion Scout files -->
{{ 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 %}
<h4 class="mt-4 mb-3">Scout</h4>
<div class="alert alert-info" role="alert">
Varianter finns uppladdade i Scout:
{% if workflow in ["nallo", "raredisease"] %}
<a href="https://scout38.sys.scilifelab.se/{{ customer_id }}/{{ case.name }}" class="alert-link">
https://scout38.sys.scilifelab.se/{{ customer_id }}/{{ case.name }}</a>.
{% else %}
<a href="https://scout.scilifelab.se/{{ customer_id }}/{{ case.name }}" class="alert-link">
https://scout.scilifelab.se/{{ customer_id }}/{{ case.name }}</a>.
{% endif %}
</div>
{% if "balsamic" in workflow %}
<!-- BALSAMIC Scout files -->
{{ 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 -->
{{ 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 -->
{{ nallo_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
{% elif workflow == "raredisease" %}
<!-- Raredisease Scout files -->
{{ raredisease_scout_files(scout_files=case.data_analysis.scout_files, case_id=case.id, case_name=case.name) }}
{% elif workflow == "rnafusion" %}
<!-- Rnafusion Scout files -->
{{ 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 %}
<h4 class="mt-4 mb-3">Leveransinkorg (Caesar)</h4>
<div class="alert alert-info" role="alert">
Filer som ska laddas upp till din inkorg:
<a class="alert-link">/home/{{ customer_id }}/inbox/{{ case.samples[0].ticket }}</a>.
</div>
<!-- Analysis files -->
{{ analysis_files(case=case) }}
<!-- Fastq files -->
{{ fastq_files(case=case) }}
{% endif %}
{% if "fastq" in data_delivery or "analysis" in data_delivery %}
<h4 class="mt-4 mb-3">Leveransinkorg (Caesar)</h4>
<div class="alert alert-info" role="alert">
Filer som ska laddas upp till din inkorg:
<a class="alert-link">/home/{{ customer_id }}/inbox/{{ case.samples[0].ticket }}</a>.
</div>
<!-- Analysis files -->
{{ analysis_files(case=case) }}
<!-- Fastq files -->
{{ fastq_files(case=case) }}
{% endif %}
{% endmacro %}

{% macro analysis_files(case) %}
{% if "analysis" in case.data_analysis.data_delivery %}
<table class="table w-auto align-middle" aria-describedby="uploaded-analysis-files-table">
<thead class="table-secondary">
<tr>
<th scope="col" colspan="2">Analysfiler</th>
</tr>
</thead>
<tbody>
{{ 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 %}
</tbody>
</table>
{% endif %}
{% if "analysis" in case.data_analysis.data_delivery %}
<table class="table w-auto align-middle" aria-describedby="uploaded-analysis-files-table">
<thead class="table-secondary">
<tr>
<th scope="col" colspan="2">Analysfiler</th>
</tr>
</thead>
<tbody>
{{ 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 %}
</tbody>
</table>
{% endif %}
{% endmacro %}

{% macro fastq_files(case) %}
{% if "fastq" in case.data_analysis.data_delivery %}
<table class="table w-auto align-middle" aria-describedby="uploaded-fastq-files-table">
<thead class="table-secondary">
<tr>
<th scope="col" colspan="2">Fastq-filer</th>
</tr>
</thead>
<tbody>
{% for sample in case.samples %}
<!-- Delivered files -->
{{ delivered_files(row_title=sample.name, files=sample.delivered_fastq_files) }}
{% endfor %}
</tbody>
</table>
{% endif %}
{% endmacro %}

{% macro delivered_files(row_title, files) %}
{% if files != "N/A" %}
{% if "fastq" in case.data_analysis.data_delivery %}
<table class="table w-auto align-middle" aria-describedby="uploaded-fastq-files-table">
<thead class="table-secondary">
<tr>
<th scope="row" rowspan="{{ files | length + 1}}">{{ row_title }}</th>
<th scope="col" colspan="2">Fastq-filer</th>
</tr>
{% for file in files %}
<tr>
<td>{{ file }}</td>
</tr>
</thead>
<tbody>
{% for sample in case.samples %}
<!-- Delivered files -->
{{ delivered_files(row_title=sample.name, files=sample.delivered_fastq_files) }}
{% endfor %}
{% endif %}
</tbody>
</table>
{% endif %}
{% endmacro %}

{% macro delivered_files(row_title, files) %}
{% if files != "N/A" %}
<tr>
<th scope="row" rowspan="{{ files | length + 1}}">{{ row_title }}</th>
</tr>
{% for file in files %}
<tr>
<td>{{ file }}</td>
</tr>
{% endfor %}
{% endif %}
{% endmacro %}
2 changes: 1 addition & 1 deletion cg/meta/upload/scout/raredisease_config_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion cg/meta/workflow/analysis.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions cg/meta/workflow/raredisease.py
Original file line number Diff line number Diff line change
Expand Up @@ -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."""
Expand Down
2 changes: 1 addition & 1 deletion cg/services/delivery_message/messages/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
Expand Down
18 changes: 11 additions & 7 deletions tests/cli/upload/test_cli_scout.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -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(
Expand Down
46 changes: 23 additions & 23 deletions tests/cli/upload/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,36 @@
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
from cg.store.models import Case
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):
Expand Down
2 changes: 0 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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(
Expand Down
Loading
Loading