scout-browser 4.96.0__py3-none-any.whl → 4.97.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- scout/adapter/mongo/case.py +51 -47
- scout/adapter/mongo/filter.py +28 -11
- scout/adapter/mongo/institute.py +2 -0
- scout/adapter/mongo/omics_variant.py +20 -5
- scout/adapter/mongo/query.py +104 -95
- scout/adapter/mongo/variant.py +0 -5
- scout/adapter/mongo/variant_loader.py +10 -12
- scout/build/individual.py +3 -11
- scout/commands/delete/delete_command.py +87 -49
- scout/commands/load/research.py +4 -4
- scout/commands/load/variants.py +25 -8
- scout/commands/setup/setup_scout.py +1 -1
- scout/commands/update/case.py +12 -0
- scout/commands/update/individual.py +1 -2
- scout/constants/__init__.py +7 -2
- scout/constants/file_types.py +68 -119
- scout/constants/filters.py +2 -1
- scout/constants/gene_tags.py +3 -3
- scout/constants/igv_tracks.py +7 -11
- scout/constants/query_terms.py +2 -2
- scout/demo/643594.config.yaml +6 -0
- scout/demo/643594.peddy.ped +1 -1
- scout/demo/643594.somalier.ancestry.tsv +4 -0
- scout/demo/643594.somalier.pairs.tsv +4 -0
- scout/demo/643594.somalier.samples.tsv +4 -0
- scout/demo/cancer.load_config.yaml +1 -0
- scout/demo/resources/__init__.py +1 -1
- scout/demo/resources/gnomad.v4.1.constraint_metrics_reduced.tsv +3755 -0
- scout/exceptions/database.py +1 -1
- scout/load/all.py +8 -16
- scout/models/case/case.py +1 -0
- scout/models/case/case_loading_models.py +12 -5
- scout/models/managed_variant.py +3 -3
- scout/models/omics_variant.py +3 -3
- scout/parse/case.py +112 -5
- scout/parse/pedqc.py +127 -0
- scout/parse/variant/frequency.py +9 -6
- scout/parse/variant/variant.py +71 -39
- scout/server/app.py +2 -0
- scout/server/blueprints/alignviewers/controllers.py +2 -0
- scout/server/blueprints/alignviewers/templates/alignviewers/igv_viewer.html +3 -0
- scout/server/blueprints/alignviewers/templates/alignviewers/utils.html +1 -1
- scout/server/blueprints/cases/controllers.py +23 -3
- scout/server/blueprints/cases/templates/cases/case.html +3 -0
- scout/server/blueprints/cases/templates/cases/chanjo2_form.html +2 -2
- scout/server/blueprints/cases/templates/cases/gene_panel.html +9 -3
- scout/server/blueprints/cases/templates/cases/individuals_table.html +4 -1
- scout/server/blueprints/cases/templates/cases/utils.html +23 -19
- scout/server/blueprints/cases/views.py +5 -9
- scout/server/blueprints/clinvar/controllers.py +11 -11
- scout/server/blueprints/clinvar/templates/clinvar/multistep_add_variant.html +15 -7
- scout/server/blueprints/institutes/controllers.py +20 -1
- scout/server/blueprints/institutes/forms.py +5 -1
- scout/server/blueprints/institutes/templates/overview/institute_settings.html +7 -0
- scout/server/blueprints/institutes/templates/overview/utils.html +20 -1
- scout/server/blueprints/omics_variants/templates/omics_variants/outliers.html +9 -2
- scout/server/blueprints/omics_variants/views.py +8 -10
- scout/server/blueprints/variant/controllers.py +30 -1
- scout/server/blueprints/variant/templates/variant/cancer-variant.html +19 -3
- scout/server/blueprints/variant/templates/variant/components.html +26 -9
- scout/server/blueprints/variant/templates/variant/variant.html +4 -2
- scout/server/blueprints/variant/utils.py +2 -0
- scout/server/blueprints/variants/controllers.py +29 -3
- scout/server/blueprints/variants/forms.py +37 -10
- scout/server/blueprints/variants/templates/variants/components.html +12 -10
- scout/server/blueprints/variants/templates/variants/utils.html +59 -36
- scout/server/blueprints/variants/views.py +45 -60
- scout/server/extensions/beacon_extension.py +1 -1
- scout/server/extensions/bionano_extension.py +5 -5
- scout/server/extensions/chanjo2_extension.py +40 -1
- scout/server/extensions/chanjo_extension.py +1 -1
- scout/server/extensions/matchmaker_extension.py +1 -1
- scout/server/static/bs_styles.css +2 -0
- scout/server/templates/layout.html +1 -0
- scout/server/utils.py +5 -0
- scout/utils/ensembl_biomart_clients.py +2 -11
- scout/utils/scout_requests.py +1 -1
- {scout_browser-4.96.0.dist-info → scout_browser-4.97.0.dist-info}/METADATA +1 -1
- {scout_browser-4.96.0.dist-info → scout_browser-4.97.0.dist-info}/RECORD +82 -80
- scout/demo/resources/gnomad.v4.0.constraint_metrics_reduced.tsv +0 -3755
- scout/parse/peddy.py +0 -149
- scout/utils/sort.py +0 -21
- {scout_browser-4.96.0.dist-info → scout_browser-4.97.0.dist-info}/WHEEL +0 -0
- {scout_browser-4.96.0.dist-info → scout_browser-4.97.0.dist-info}/entry_points.txt +0 -0
- {scout_browser-4.96.0.dist-info → scout_browser-4.97.0.dist-info}/licenses/LICENSE +0 -0
@@ -67,8 +67,7 @@ def variants(institute_id, case_name):
|
|
67
67
|
|
68
68
|
variants_stats = store.case_variants_count(case_obj["_id"], institute_id, variant_type, False)
|
69
69
|
|
70
|
-
|
71
|
-
case_obj["hpo_clinical_filter"] = True
|
70
|
+
controllers.set_hpo_clinical_filter(case_obj, request.form)
|
72
71
|
|
73
72
|
user_obj = store.user(current_user.email)
|
74
73
|
if request.method == "POST":
|
@@ -97,14 +96,12 @@ def variants(institute_id, case_name):
|
|
97
96
|
|
98
97
|
controllers.populate_force_show_unaffected_vars(institute_obj, form)
|
99
98
|
|
100
|
-
# populate filters dropdown
|
101
|
-
available_filters = list(store.filters(institute_id, category))
|
102
|
-
form.filters.choices = [
|
103
|
-
(filter.get("_id"), filter.get("display_name")) for filter in available_filters
|
104
|
-
]
|
105
99
|
# Populate chromosome select choices
|
106
100
|
controllers.populate_chrom_choices(form, case_obj)
|
107
101
|
|
102
|
+
# Populate custom soft filters
|
103
|
+
controllers.populate_institute_soft_filters(form=form, institute_obj=institute_obj)
|
104
|
+
|
108
105
|
# populate available panel choices
|
109
106
|
form.gene_panels.choices = controllers.gene_panel_choices(store, institute_obj, case_obj)
|
110
107
|
|
@@ -161,7 +158,9 @@ def variants(institute_id, case_name):
|
|
161
158
|
cytobands=cytobands,
|
162
159
|
dismiss_variant_options=DISMISS_VARIANT_OPTIONS,
|
163
160
|
expand_search=controllers.get_expand_search(request.form),
|
164
|
-
filters=
|
161
|
+
filters=controllers.populate_persistent_filters_choices(
|
162
|
+
institute_id=institute_id, category=category, form=form
|
163
|
+
),
|
165
164
|
form=form,
|
166
165
|
genetic_models_palette=GENETIC_MODELS_PALETTE,
|
167
166
|
inherit_palette=INHERITANCE_PALETTE,
|
@@ -210,15 +209,12 @@ def str_variants(institute_id, case_name):
|
|
210
209
|
controllers.populate_force_show_unaffected_vars(institute_obj, form)
|
211
210
|
controllers.update_form_hgnc_symbols(store, case_obj, form)
|
212
211
|
|
213
|
-
# populate filters dropdown
|
214
|
-
available_filters = list(store.filters(institute_id, category))
|
215
|
-
form.filters.choices = [
|
216
|
-
(filter.get("_id"), filter.get("display_name")) for filter in available_filters
|
217
|
-
]
|
218
|
-
|
219
212
|
# Populate chromosome select choices
|
220
213
|
controllers.populate_chrom_choices(form, case_obj)
|
221
214
|
|
215
|
+
# Populate custom soft filters
|
216
|
+
controllers.populate_institute_soft_filters(form=form, institute_obj=institute_obj)
|
217
|
+
|
222
218
|
# populate available panel choices
|
223
219
|
form.gene_panels.choices = controllers.gene_panel_choices(store, institute_obj, case_obj)
|
224
220
|
|
@@ -254,7 +250,9 @@ def str_variants(institute_id, case_name):
|
|
254
250
|
cytobands=cytobands,
|
255
251
|
dismiss_variant_options=DISMISS_VARIANT_OPTIONS,
|
256
252
|
expand_search=controllers.get_expand_search(request.form),
|
257
|
-
filters=
|
253
|
+
filters=controllers.populate_persistent_filters_choices(
|
254
|
+
institute_id=institute_id, category=category, form=form
|
255
|
+
),
|
258
256
|
form=form,
|
259
257
|
inherit_palette=INHERITANCE_PALETTE,
|
260
258
|
institute=institute_obj,
|
@@ -282,8 +280,7 @@ def sv_variants(institute_id, case_name):
|
|
282
280
|
variant_type = "clinical"
|
283
281
|
variants_stats = store.case_variants_count(case_obj["_id"], institute_id, variant_type, False)
|
284
282
|
|
285
|
-
|
286
|
-
case_obj["hpo_clinical_filter"] = True
|
283
|
+
controllers.set_hpo_clinical_filter(case_obj, request.form)
|
287
284
|
|
288
285
|
if "dismiss_submit" in request.form: # dismiss a list of variants
|
289
286
|
controllers.dismiss_variant_list(
|
@@ -299,15 +296,12 @@ def sv_variants(institute_id, case_name):
|
|
299
296
|
controllers.activate_case(store, institute_obj, case_obj, current_user)
|
300
297
|
form = controllers.populate_sv_filters_form(store, institute_obj, case_obj, category, request)
|
301
298
|
|
302
|
-
# populate filters dropdown
|
303
|
-
available_filters = list(store.filters(institute_obj["_id"], category))
|
304
|
-
form.filters.choices = [
|
305
|
-
(filter.get("_id"), filter.get("display_name")) for filter in available_filters
|
306
|
-
]
|
307
|
-
|
308
299
|
# Populate chromosome select choices
|
309
300
|
controllers.populate_chrom_choices(form, case_obj)
|
310
301
|
|
302
|
+
# Populate custom soft filters
|
303
|
+
controllers.populate_institute_soft_filters(form=form, institute_obj=institute_obj)
|
304
|
+
|
311
305
|
genome_build = "38" if "38" in str(case_obj.get("genome_build", "37")) else "37"
|
312
306
|
cytobands = store.cytoband_by_chrom(genome_build)
|
313
307
|
|
@@ -334,7 +328,9 @@ def sv_variants(institute_id, case_name):
|
|
334
328
|
cytobands=cytobands,
|
335
329
|
dismiss_variant_options=DISMISS_VARIANT_OPTIONS,
|
336
330
|
expand_search=controllers.get_expand_search(request.form),
|
337
|
-
filters=
|
331
|
+
filters=controllers.populate_persistent_filters_choices(
|
332
|
+
institute_id=institute_id, category=category, form=form
|
333
|
+
),
|
338
334
|
form=form,
|
339
335
|
inherit_palette=INHERITANCE_PALETTE,
|
340
336
|
institute=institute_obj,
|
@@ -361,8 +357,7 @@ def mei_variants(institute_id, case_name):
|
|
361
357
|
)
|
362
358
|
variants_stats = store.case_variants_count(case_obj["_id"], institute_id, variant_type, False)
|
363
359
|
|
364
|
-
|
365
|
-
case_obj["hpo_clinical_filter"] = True
|
360
|
+
controllers.set_hpo_clinical_filter(case_obj, request.form)
|
366
361
|
|
367
362
|
if "dismiss_submit" in request.form: # dismiss a list of variants
|
368
363
|
controllers.dismiss_variant_list(
|
@@ -393,15 +388,12 @@ def mei_variants(institute_id, case_name):
|
|
393
388
|
# set chromosome to all chromosomes
|
394
389
|
form.chrom.data = request.args.get("chrom", "")
|
395
390
|
|
396
|
-
# populate filters dropdown
|
397
|
-
available_filters = list(store.filters(institute_obj["_id"], category))
|
398
|
-
form.filters.choices = [
|
399
|
-
(filter.get("_id"), filter.get("display_name")) for filter in available_filters
|
400
|
-
]
|
401
|
-
|
402
391
|
# Populate chromosome select choices
|
403
392
|
controllers.populate_chrom_choices(form, case_obj)
|
404
393
|
|
394
|
+
# Populate custom soft filters
|
395
|
+
controllers.populate_institute_soft_filters(form=form, institute_obj=institute_obj)
|
396
|
+
|
405
397
|
# populate available panel choices
|
406
398
|
form.gene_panels.choices = controllers.gene_panel_choices(store, institute_obj, case_obj)
|
407
399
|
|
@@ -431,7 +423,9 @@ def mei_variants(institute_id, case_name):
|
|
431
423
|
cytobands=cytobands,
|
432
424
|
dismiss_variant_options=DISMISS_VARIANT_OPTIONS,
|
433
425
|
expand_search=controllers.get_expand_search(request.form),
|
434
|
-
filters=
|
426
|
+
filters=controllers.populate_persistent_filters_choices(
|
427
|
+
institute_id=institute_id, category=category, form=form
|
428
|
+
),
|
435
429
|
form=form,
|
436
430
|
inherit_palette=INHERITANCE_PALETTE,
|
437
431
|
institute=institute_obj,
|
@@ -507,15 +501,12 @@ def cancer_variants(institute_id, case_name):
|
|
507
501
|
# update status of case if visited for the first time
|
508
502
|
controllers.activate_case(store, institute_obj, case_obj, current_user)
|
509
503
|
|
510
|
-
# populate filters dropdown
|
511
|
-
available_filters = list(store.filters(institute_id, category))
|
512
|
-
form.filters.choices = [
|
513
|
-
(filter.get("_id"), filter.get("display_name")) for filter in available_filters
|
514
|
-
]
|
515
|
-
|
516
504
|
# Populate chromosome select choices
|
517
505
|
controllers.populate_chrom_choices(form, case_obj)
|
518
506
|
|
507
|
+
# Populate custom soft filters
|
508
|
+
controllers.populate_institute_soft_filters(form=form, institute_obj=institute_obj)
|
509
|
+
|
519
510
|
form.gene_panels.choices = controllers.gene_panel_choices(store, institute_obj, case_obj)
|
520
511
|
|
521
512
|
genome_build = "38" if "38" in str(case_obj.get("genome_build", "37")) else "37"
|
@@ -550,7 +541,9 @@ def cancer_variants(institute_id, case_name):
|
|
550
541
|
**CANCER_SPECIFIC_VARIANT_DISMISS_OPTIONS,
|
551
542
|
},
|
552
543
|
expand_search=controllers.get_expand_search(request.form),
|
553
|
-
filters=
|
544
|
+
filters=controllers.populate_persistent_filters_choices(
|
545
|
+
institute_id=institute_id, category=category, form=form
|
546
|
+
),
|
554
547
|
result_size=result_size,
|
555
548
|
show_dismiss_block=controllers.get_show_dismiss_block(),
|
556
549
|
total_variants=variants_stats.get(variant_type, {}).get(category, "NA"),
|
@@ -574,9 +567,6 @@ def cancer_sv_variants(institute_id, case_name):
|
|
574
567
|
variant_type = "clinical"
|
575
568
|
variants_stats = store.case_variants_count(case_obj["_id"], institute_id, variant_type, False)
|
576
569
|
|
577
|
-
if request.form.get("hpo_clinical_filter"):
|
578
|
-
case_obj["hpo_clinical_filter"] = True
|
579
|
-
|
580
570
|
if "dismiss_submit" in request.form: # dismiss a list of variants
|
581
571
|
controllers.dismiss_variant_list(
|
582
572
|
store,
|
@@ -591,15 +581,12 @@ def cancer_sv_variants(institute_id, case_name):
|
|
591
581
|
controllers.activate_case(store, institute_obj, case_obj, current_user)
|
592
582
|
form = controllers.populate_sv_filters_form(store, institute_obj, case_obj, category, request)
|
593
583
|
|
594
|
-
# populate filters dropdown
|
595
|
-
available_filters = list(store.filters(institute_obj["_id"], category))
|
596
|
-
form.filters.choices = [
|
597
|
-
(filter.get("_id"), filter.get("display_name")) for filter in available_filters
|
598
|
-
]
|
599
|
-
|
600
584
|
# Populate chromosome select choices
|
601
585
|
controllers.populate_chrom_choices(form, case_obj)
|
602
586
|
|
587
|
+
# Populate custom soft filters
|
588
|
+
controllers.populate_institute_soft_filters(form=form, institute_obj=institute_obj)
|
589
|
+
|
603
590
|
genome_build = "38" if "38" in str(case_obj.get("genome_build", "37")) else "37"
|
604
591
|
cytobands = store.cytoband_by_chrom(genome_build)
|
605
592
|
|
@@ -630,7 +617,9 @@ def cancer_sv_variants(institute_id, case_name):
|
|
630
617
|
**CANCER_SPECIFIC_VARIANT_DISMISS_OPTIONS,
|
631
618
|
},
|
632
619
|
expand_search=controllers.get_expand_search(request.form),
|
633
|
-
filters=
|
620
|
+
filters=controllers.populate_persistent_filters_choices(
|
621
|
+
institute_id=institute_id, category=category, form=form
|
622
|
+
),
|
634
623
|
form=form,
|
635
624
|
inherit_palette=INHERITANCE_PALETTE,
|
636
625
|
institute=institute_obj,
|
@@ -660,9 +649,6 @@ def fusion_variants(institute_id, case_name):
|
|
660
649
|
variant_type = "clinical"
|
661
650
|
variants_stats = store.case_variants_count(case_obj["_id"], institute_id, variant_type, False)
|
662
651
|
|
663
|
-
if request.form.get("hpo_clinical_filter"):
|
664
|
-
case_obj["hpo_clinical_filter"] = True
|
665
|
-
|
666
652
|
if "dismiss_submit" in request.form: # dismiss a list of variants
|
667
653
|
controllers.dismiss_variant_list(
|
668
654
|
store,
|
@@ -679,15 +665,12 @@ def fusion_variants(institute_id, case_name):
|
|
679
665
|
store, institute_obj, case_obj, category, request
|
680
666
|
)
|
681
667
|
|
682
|
-
# populate filters dropdown
|
683
|
-
available_filters = list(store.filters(institute_obj["_id"], category))
|
684
|
-
form.filters.choices = [
|
685
|
-
(filter.get("_id"), filter.get("display_name")) for filter in available_filters
|
686
|
-
]
|
687
|
-
|
688
668
|
# Populate chromosome select choices
|
689
669
|
controllers.populate_chrom_choices(form, case_obj)
|
690
670
|
|
671
|
+
# Populate custom soft filters
|
672
|
+
controllers.populate_institute_soft_filters(form=form, institute_obj=institute_obj)
|
673
|
+
|
691
674
|
genome_build = "38" if "38" in str(case_obj.get("genome_build", "37")) else "37"
|
692
675
|
cytobands = store.cytoband_by_chrom(genome_build)
|
693
676
|
|
@@ -717,7 +700,9 @@ def fusion_variants(institute_id, case_name):
|
|
717
700
|
**DISMISS_VARIANT_OPTIONS,
|
718
701
|
},
|
719
702
|
expand_search=controllers.get_expand_search(request.form),
|
720
|
-
filters=
|
703
|
+
filters=controllers.populate_persistent_filters_choices(
|
704
|
+
institute_id=institute_id, category=category, form=form
|
705
|
+
),
|
721
706
|
form=form,
|
722
707
|
institute=institute_obj,
|
723
708
|
manual_rank_options=MANUAL_RANK_OPTIONS,
|
@@ -1,10 +1,10 @@
|
|
1
1
|
"""
|
2
|
-
|
2
|
+
Connect to BioNano Access server via its API.
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
The server API we connect to is described in the following document:
|
5
|
+
https://bionano.com/wp-content/uploads/2023/01/30462-Bionano-Access-API-Guide-1.pdf
|
6
|
+
For further development, the server has a Swagger-like demo interface at https://bionano-access.scilifelab.se/Bnx/
|
7
|
+
which is useful for details, and for sniffing actual message content structure, required cookie variable names etc.
|
8
8
|
"""
|
9
9
|
|
10
10
|
import json
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import logging
|
2
|
-
from typing import Dict
|
2
|
+
from typing import Dict, List
|
3
3
|
|
4
4
|
import requests
|
5
5
|
from flask import current_app
|
@@ -8,6 +8,9 @@ REF_CHROM = "14"
|
|
8
8
|
MT_CHROM = "MT"
|
9
9
|
LOG = logging.getLogger(__name__)
|
10
10
|
|
11
|
+
CHANJO_BUILD_37 = "GRCh37"
|
12
|
+
CHANJO_BUILD_38 = "GRCh38"
|
13
|
+
|
11
14
|
|
12
15
|
class Chanjo2Client:
|
13
16
|
"""Runs requests to chanjo2 and returns results in the expected format."""
|
@@ -44,3 +47,39 @@ class Chanjo2Client:
|
|
44
47
|
coverage_stats[ind["individual_id"]] = coverage_info
|
45
48
|
|
46
49
|
return coverage_stats
|
50
|
+
|
51
|
+
def get_gene_complete_coverage(
|
52
|
+
self, hgnc_id: int, threshold: int = 15, individuals: dict = {}, build: str = "38"
|
53
|
+
) -> bool:
|
54
|
+
"""
|
55
|
+
Return complete coverage for hgnc_id at a coverage threshold.
|
56
|
+
"""
|
57
|
+
chanjo_build = CHANJO_BUILD_37 if "37" in build else CHANJO_BUILD_38
|
58
|
+
chanjo2_gene_cov_url: str = "/".join(
|
59
|
+
[current_app.config.get("CHANJO2_URL"), "coverage/d4/genes/summary"]
|
60
|
+
)
|
61
|
+
|
62
|
+
gene_cov_query = {
|
63
|
+
"build": chanjo_build,
|
64
|
+
"coverage_threshold": threshold,
|
65
|
+
"hgnc_gene_ids": [hgnc_id],
|
66
|
+
"interval_type": "genes",
|
67
|
+
"samples": [],
|
68
|
+
}
|
69
|
+
for ind in individuals:
|
70
|
+
if not ind.get("d4_file"):
|
71
|
+
continue
|
72
|
+
|
73
|
+
gene_cov_query["samples"].append(
|
74
|
+
{"coverage_file_path": ind["d4_file"], "name": ind["individual_id"]}
|
75
|
+
)
|
76
|
+
|
77
|
+
resp = requests.post(chanjo2_gene_cov_url, json=gene_cov_query)
|
78
|
+
gene_cov = resp.json()
|
79
|
+
|
80
|
+
full_coverage = bool(gene_cov)
|
81
|
+
for sample in gene_cov.keys():
|
82
|
+
if gene_cov[sample]["coverage_completeness_percent"] < 100:
|
83
|
+
full_coverage = False
|
84
|
+
|
85
|
+
return full_coverage
|
@@ -1,5 +1,5 @@
|
|
1
1
|
"""
|
2
|
-
|
2
|
+
Generate coverage reports using chanjo and chanjo-report. Documentation under -> `docs/admin-guide/chanjo_coverage_integration.md`
|
3
3
|
"""
|
4
4
|
|
5
5
|
import json
|
@@ -269,6 +269,8 @@ li.nav-item {
|
|
269
269
|
|
270
270
|
/* Introduce small space in between list elements */
|
271
271
|
body {
|
272
|
+
min-width: 1000px;
|
273
|
+
overflow-x: scroll;
|
272
274
|
background-color: var(--bg-color);
|
273
275
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
274
276
|
}
|
@@ -43,6 +43,7 @@
|
|
43
43
|
<div class="dropdown-divider" ></div>
|
44
44
|
<a class="dropdown-item" href="https://clinical-genomics.github.io/scout" referrerpolicy="no-referrer" rel="noopener" target='_blank'>User guide</a>
|
45
45
|
<a class="dropdown-item" href="https://github.com/Clinical-Genomics/scout/issues" referrerpolicy="no-referrer" rel="noopener" target='_blank'>Open issues</a>
|
46
|
+
<a class="dropdown-item mb-1" href="https://github.com/Clinical-Genomics/scout/releases/tag/v{{ SCOUT_VERSION[:-2] if SCOUT_VERSION.endswith('.0') and SCOUT_VERSION.count('.') > 1 else SCOUT_VERSION }}" referrerpolicy="no-referrer" rel="noopener" target='_blank'>Release notes v{{SCOUT_VERSION}}</a>
|
46
47
|
</div>
|
47
48
|
</li>
|
48
49
|
{% block top_nav %}{% endblock %}
|
scout/server/utils.py
CHANGED
@@ -330,6 +330,11 @@ def case_append_alignments(case_obj: dict):
|
|
330
330
|
# Add sample name
|
331
331
|
sample_name = f"{case_obj.get('display_name', '')} - {individual.get('display_name', '')}"
|
332
332
|
append_safe(case_obj, "sample_names", sample_name)
|
333
|
+
append_safe(
|
334
|
+
case_obj,
|
335
|
+
"track_items_soft_clips_settings",
|
336
|
+
individual.get("analysis_type", "") not in ["wes", "panel"],
|
337
|
+
)
|
333
338
|
|
334
339
|
# Process all file settings
|
335
340
|
for setting in unwrap_settings:
|
@@ -4,7 +4,7 @@ from typing import Dict, Iterator
|
|
4
4
|
import requests
|
5
5
|
|
6
6
|
LOG = logging.getLogger(__name__)
|
7
|
-
SCHUG_BASE = "https://schug.scilifelab.se"
|
7
|
+
SCHUG_BASE = "https://schug-stage.scilifelab.se"
|
8
8
|
|
9
9
|
BUILDS: Dict[str, str] = {"37": "GRCh37", "38": "GRCh38"}
|
10
10
|
|
@@ -29,15 +29,6 @@ class EnsemblBiomartHandler:
|
|
29
29
|
def stream_resource(self, interval_type: str) -> Iterator[str]:
|
30
30
|
"""Use schug web to fetch genes, transcripts or exons from a remote Ensembl biomart in the right genome build and save them to file."""
|
31
31
|
|
32
|
-
def yield_resource_lines(iterable) -> str:
|
33
|
-
"""Removes the last element from an iterator."""
|
34
|
-
it = iter(iterable)
|
35
|
-
current = next(it)
|
36
|
-
for i in it:
|
37
|
-
yield current
|
38
|
-
current = i
|
39
|
-
|
40
32
|
shug_url: str = f"{SCHUG_BASE}{SCHUG_RESOURCE_URL[interval_type]}{self.build}"
|
41
33
|
|
42
|
-
|
43
|
-
return yield_resource_lines(self.stream_get(shug_url))
|
34
|
+
return self.stream_get(shug_url)
|
scout/utils/scout_requests.py
CHANGED
@@ -324,7 +324,7 @@ def fetch_constraint():
|
|
324
324
|
Returns:
|
325
325
|
exac_lines(iterable(str))
|
326
326
|
"""
|
327
|
-
path = "/release/
|
327
|
+
path = "/release/4.1/constraint/gnomad.v4.1.constraint_metrics.tsv"
|
328
328
|
mirror_urls = [
|
329
329
|
f"https://storage.googleapis.com/gcp-public-data--gnomad{path}",
|
330
330
|
f"https://gnomad-public-us-east-1.s3.amazonaws.com{path}",
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: scout-browser
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.97.0
|
4
4
|
Summary: Clinical DNA variant visualizer and browser
|
5
5
|
Project-URL: Repository, https://github.com/Clinical-Genomics/scout
|
6
6
|
Project-URL: Changelog, https://github.com/Clinical-Genomics/scout/blob/main/CHANGELOG.md
|