scout-browser 4.91.2__py3-none-any.whl → 4.92__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/__version__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "4.91.2"
1
+ __version__ = "4.92"
@@ -1,7 +1,7 @@
1
1
  import logging
2
2
  import re
3
3
  from datetime import datetime, timedelta
4
- from typing import Optional, Union
4
+ from typing import List, Optional, Union
5
5
 
6
6
  from scout.constants import (
7
7
  CLINSIG_MAP,
@@ -19,23 +19,19 @@ LOG = logging.getLogger(__name__)
19
19
 
20
20
  class QueryHandler(object):
21
21
  def build_case_query(
22
- self, case_id=None, status=None, older_than=None, analysis_type=[]
22
+ self,
23
+ case_ids: Optional[List[str]],
24
+ institute_id: Optional[List[str]],
25
+ status: Optional[List[str]],
26
+ older_than: Optional[int],
27
+ analysis_type: Optional[List[str]],
23
28
  ) -> dict:
24
- """Build case query based on case id, status and analysis date
25
-
26
- Args:
27
- case_id(str): id of a case
28
- status(list): one or more case status
29
- older_than(int): to select cases older than a number of months
30
- case_ids(list): a list of case _ids
31
- analysis_type(list): a list of type of analysis ["wgs", "wes", "panel"]
32
-
33
- Returns:
34
- case_query(dict): query dictionary
35
- """
29
+ """Build case query based on case id, status and analysis date."""
36
30
  case_query = {}
37
- if case_id:
38
- case_query["_id"] = case_id
31
+ if case_ids:
32
+ case_query["_id"] = {"$in": case_ids}
33
+ if institute_id:
34
+ case_query["owner"] = institute_id
39
35
  if analysis_type:
40
36
  case_query["individuals.analysis_type"] = {"$in": analysis_type}
41
37
  if older_than:
@@ -43,6 +39,7 @@ class QueryHandler(object):
43
39
  case_query["analysis_date"] = {"$lt": older_than_date}
44
40
  if status:
45
41
  case_query["status"] = {"$in": list(status)}
42
+
46
43
  return case_query
47
44
 
48
45
  def delete_variants_query(
@@ -29,7 +29,14 @@ VARIANT_CATEGORIES = ["mei", "snv", "sv", "cancer", "cancer_sv", "str"]
29
29
 
30
30
  @click.command("variants", short_help="Delete variants for one or more cases")
31
31
  @click.option("-u", "--user", help="User running this command (email)", required=True)
32
- @click.option("-c", "--case-id", help="Case id")
32
+ @click.option("-c", "--case-id", help="Case id", multiple=True)
33
+ @click.option(
34
+ "-f",
35
+ "--case-file",
36
+ help="Path to file containing list of case IDs",
37
+ type=click.Path(exists=True),
38
+ )
39
+ @click.option("-i", "--institute", help="Restrict to cases with specified institute ID")
33
40
  @click.option(
34
41
  "--status",
35
42
  type=click.Choice(CASE_STATUSES),
@@ -42,7 +49,6 @@ VARIANT_CATEGORIES = ["mei", "snv", "sv", "cancer", "cancer_sv", "str"]
42
49
  "--analysis-type",
43
50
  type=click.Choice(["wgs", "wes", "panel"]),
44
51
  multiple=True,
45
- default=["wgs"],
46
52
  help="Type of analysis",
47
53
  )
48
54
  @click.option("--rank-threshold", type=click.INT, default=5, help="With rank threshold lower than")
@@ -62,7 +68,9 @@ VARIANT_CATEGORIES = ["mei", "snv", "sv", "cancer", "cancer_sv", "str"]
62
68
  @with_appcontext
63
69
  def variants(
64
70
  user: str,
65
- case_id: str,
71
+ case_id: list,
72
+ case_file: str,
73
+ institute: str,
66
74
  status: list,
67
75
  older_than: int,
68
76
  analysis_type: list,
@@ -73,6 +81,12 @@ def variants(
73
81
  ) -> None:
74
82
  """Delete variants for one or more cases"""
75
83
 
84
+ if case_file and case_id:
85
+ click.echo(
86
+ "You should specify either case ID (multiple times if needed) or the path to a text file containing a list of case IDs (one per line)."
87
+ )
88
+ return
89
+
76
90
  user_obj = store.user(user)
77
91
  if user_obj is None:
78
92
  click.echo(f"Could not find a user with email '{user}' in database")
@@ -86,7 +100,16 @@ def variants(
86
100
  else:
87
101
  click.confirm("Variants are going to be deleted from database. Continue?", abort=True)
88
102
 
89
- case_query = store.build_case_query(case_id, status, older_than, analysis_type)
103
+ if case_file:
104
+ case_id = [line.strip() for line in open(case_file).readlines() if line.strip()]
105
+
106
+ case_query = store.build_case_query(
107
+ case_ids=case_id,
108
+ institute_id=institute,
109
+ status=status,
110
+ older_than=older_than,
111
+ analysis_type=analysis_type,
112
+ )
90
113
  # Estimate the average size of a variant document in database
91
114
  avg_var_size = store.collection_stats("variant").get("avgObjSize", 0) # in bytes
92
115
 
scout/parse/panelapp.py CHANGED
@@ -1,12 +1,13 @@
1
1
  """Code to parse panel information"""
2
2
 
3
3
  import logging
4
- from typing import Dict, List, Optional
4
+ from typing import Dict, Optional
5
5
 
6
6
  from scout.constants import INCOMPLETE_PENETRANCE_MAP, MODELS_MAP, PANELAPP_CONFIDENCE_EXCLUDE
7
7
  from scout.utils.date import get_date
8
8
 
9
9
  LOG = logging.getLogger(__name__)
10
+ PANELAPP_PANELS_URL = "https://panelapp.genomicsengland.co.uk/panels/"
10
11
 
11
12
 
12
13
  def parse_panel_app_gene(
@@ -90,6 +91,7 @@ def parse_panelapp_panel(
90
91
  gene_panel["display_name"] = " - ".join([panel_info["name"], f"[{confidence.upper()}]"])
91
92
  gene_panel["institute"] = institute
92
93
  gene_panel["panel_type"] = ("clinical",)
94
+ gene_panel["description"] = f"{PANELAPP_PANELS_URL}{panel_id}"
93
95
 
94
96
  LOG.info("Parsing panel %s", gene_panel["display_name"])
95
97
 
@@ -84,6 +84,12 @@
84
84
  <a target="_blank" href={{ record.entrez_link }} referrerpolicy="no-referrer" rel="noopener" target="_blank"> {{ entrez_id }}</a>
85
85
  </span>
86
86
  </li>
87
+ <li class="list-group-item">
88
+ PanelApp
89
+ <span class="float-end">
90
+ <a target="_blank" href={{ record.panelapp_link }} referrerpolicy="no-referrer" rel="noopener" target="_blank"> {{ symbol }} </a>
91
+ </span>
92
+ </li>
87
93
  {% if pli_score %}
88
94
  <li class="list-group-item">
89
95
  pLi Score (<a href={{ record.gnomad_link }} referrerpolicy="no-referrer" rel="noopener" target="_blank">GnomAD</a>)
@@ -1,5 +1,5 @@
1
1
  import logging
2
- from typing import Optional
2
+ from typing import List, Optional
3
3
 
4
4
  import requests
5
5
 
@@ -41,7 +41,7 @@ class PanelAppClient:
41
41
  for type in panel.get("types", []):
42
42
  self.panel_types.add(type["slug"])
43
43
 
44
- def get_panel_ids(self, signed_off: bool) -> list[int]:
44
+ def get_panel_ids(self, signed_off: bool) -> List[int]:
45
45
  """Returns a list of panel ids contained in a json document with gene panels data."""
46
46
 
47
47
  def get_ids(json_panels):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scout-browser
3
- Version: 4.91.2
3
+ Version: 4.92
4
4
  Summary: Clinical DNA variant visualizer and browser.
5
5
  Home-page: https://github.com/Clinical-Genomics/scout
6
6
  Author: Måns Magnusson
@@ -1,5 +1,5 @@
1
1
  scout/__init__.py,sha256=Z4liXvmEcLkC67ElsWvYHfemPKdWgWI5O6MB6XlDM8M,232
2
- scout/__version__.py,sha256=c-e8ef0PPzsi3EtzC80FCudBi3MZOAKf5jphOkGjfF8,23
2
+ scout/__version__.py,sha256=ANcNj-w6TB4wETdZ9CZJYc1ZGU2Q1cA11Hzzi92m9BE,21
3
3
  scout/adapter/__init__.py,sha256=-iX_hx2NI1EMAqX0pMd5_90Nnd9uvIMxv9EbefYBzsc,86
4
4
  scout/adapter/client.py,sha256=IuajRsEwTG41ZP14X09Q1Cj94zIgmIvUtlXfcAFn0EA,1513
5
5
  scout/adapter/mongo/__init__.py,sha256=NdHYCUXWUAuX5cUS3-6HCws2hW9uoGep8i0SC-oJd3k,31
@@ -22,7 +22,7 @@ scout/adapter/mongo/matchmaker.py,sha256=amTvFOlUbrt1RmecY_8hPY6bO3j79lc2UbmzlCQ
22
22
  scout/adapter/mongo/omics_variant.py,sha256=VdkNG_l6vcr3UF25EixEfvIdMGkSGeNaMjLRhQHS_lc,7521
23
23
  scout/adapter/mongo/panel.py,sha256=d1oMEYAiDGybLmlbbf3-fQdCdU0-T7x2XdIUwZGthYk,20031
24
24
  scout/adapter/mongo/phenomodel.py,sha256=cypSS8YRzu98Bf1kC0orfrLNn_ZQSYCK8e4mNR5PaPY,2572
25
- scout/adapter/mongo/query.py,sha256=MzeMUND_BPHgJLGDEbOVgwf4ic8M9ZXFcyroQd0LMJQ,33314
25
+ scout/adapter/mongo/query.py,sha256=Zk5BV9GZYVlGoSRRjP88TpvB4teVpvHgHnSDV0W-kS0,33157
26
26
  scout/adapter/mongo/rank_model.py,sha256=wvDNI4OLf-f7ZYZ_Q_6qi0myxOJCNNJR_-2-_0u2K2M,5712
27
27
  scout/adapter/mongo/transcript.py,sha256=3U1qtyxZ1DnrzdBJm_emJXISMYFKJuX_zAKynUt8NMY,7417
28
28
  scout/adapter/mongo/user.py,sha256=QoQnRWqi_dV3ZwGzBonEU6Ap9TgMDf2x_C5UIqG0pa0,2569
@@ -58,7 +58,7 @@ scout/commands/serve.py,sha256=fImJrgMBYQTD18xODjGqN6NgXjTe8seI_awd9vF04rU,1564
58
58
  scout/commands/utils.py,sha256=T29f-1wTq3uoxqtv6QOqBdMBl7tLeEn8DYXnnv3gowI,306
59
59
  scout/commands/wipe_database.py,sha256=TvCoXZCT-mvTqsZaFstV5u5FM8KAQstB3JxyGHYMLtg,1005
60
60
  scout/commands/delete/__init__.py,sha256=6Z97FsWMqyKqF64Anl1zwljVNTfjJUCI7yylxIEnsUY,35
61
- scout/commands/delete/delete_command.py,sha256=X3sH0pP51n1Gmv3e7EbgXggFp_yG4ZtziSNsIpcNu78,12584
61
+ scout/commands/delete/delete_command.py,sha256=_x897Du0nTsYmSG_5LAIm6Z9sjKcaCrtAR7cwuNwl4I,13285
62
62
  scout/commands/download/__init__.py,sha256=mfDzxqKzJ0LgfPBN_fehkdX5BPy1FJ3rauA3ORLIjCM,39
63
63
  scout/commands/download/download_command.py,sha256=m5CKefst3qhs4urfNu1A2TERisUb_5WPn-wn9bGCDr0,736
64
64
  scout/commands/download/ensembl.py,sha256=CsTMjYihBtXyfofNIQ2riL9UBzydDbqoNZ7jJVQ15ak,2112
@@ -414,7 +414,7 @@ scout/parse/mitodel.py,sha256=3uvEXI9v9wIw97NUL7gqLLxHay0mpQpDgKaIxUbIyrE,803
414
414
  scout/parse/omim.py,sha256=nrCaFZgjUKZo9Jfku2-jcNjdsIYHsvjdWcydz4nCpZA,12465
415
415
  scout/parse/orpha.py,sha256=5u9xqGpAn8vgoJ0uVqbYiqQBiNfBwXOiTzX16kAnmFU,4392
416
416
  scout/parse/panel.py,sha256=J28e_MkKeB5r4hOutb3qimxUT7G5yg8x1Ca4bAs0I_c,9577
417
- scout/parse/panelapp.py,sha256=1UAKBm48tKlfDpNb_VH_kfqO8tgduXRSIQnWa61Fzrc,3944
417
+ scout/parse/panelapp.py,sha256=Idz6cGvQnyI-nn6yCTc6EGSRp1gX-CXN6Y4ayAee-_A,4076
418
418
  scout/parse/peddy.py,sha256=uM49GaZMtr8waCsZDvCHDS5JDQ43JUlhdWh9C7f7ZvU,5418
419
419
  scout/parse/smn.py,sha256=iOK1N8iYm9dFigsKtWq0Y0ZCa1CH29s9zeR_tH0bPuc,1153
420
420
  scout/parse/omics_variant/__init__.py,sha256=vq8Ew4_Xr2vPy_3Fg0eTpPWsQpWnUXYBhjRndBUvtTw,422
@@ -500,7 +500,7 @@ scout/server/blueprints/diagnoses/templates/diagnoses/disease_term.html,sha256=8
500
500
  scout/server/blueprints/genes/__init__.py,sha256=LPHrbmfVhZpLGGdExFbJp_Du1NKCsVOO_eaevpsNLC8,52
501
501
  scout/server/blueprints/genes/controllers.py,sha256=LCuGPQymKxA7sES49z_j2_B3prKmNY-ME0VK892VoPs,3629
502
502
  scout/server/blueprints/genes/views.py,sha256=lFJ7izYu0CbUJo3j5TesrUhIwreZUYw9_dDqd6iG8m4,1512
503
- scout/server/blueprints/genes/templates/genes/gene.html,sha256=X1WR-sHYGnWyhQfgN77TqC3_yoweaqu7MjwUvAO9UBo,10872
503
+ scout/server/blueprints/genes/templates/genes/gene.html,sha256=a--c-IjzNKN_JW7z9jbNCnk3bLD_oVeFvf5x8IAmynA,11197
504
504
  scout/server/blueprints/genes/templates/genes/genes.html,sha256=x6jXKijvuEX9GvIedHW4O_BerYXiWEmAdYT0HTiGnhI,1130
505
505
  scout/server/blueprints/genes/templates/genes/layout.html,sha256=cZMLe2cInq24z0sZpPxDm_kEiAe5VQbOR-8XWn6wlvI,1601
506
506
  scout/server/blueprints/institutes/__init__.py,sha256=kGSyYrBC1QaEQBDdoMkMLfaowV7roaV5DowICi_0RSQ,65
@@ -644,7 +644,7 @@ scout/server/extensions/ldap_extension.py,sha256=nVgJ6YhSyvpg8J4bSYzJwoEvKhP0faW
644
644
  scout/server/extensions/loqus_extension.py,sha256=uiqUXQ7Q7DCj6C20TKgL8yLu9DXov95vrJfhq0tvbTM,12602
645
645
  scout/server/extensions/matchmaker_extension.py,sha256=mNytCYnZX1hgdq1otkvnyOkh4dj9SVgQthJAfKb8TMI,5024
646
646
  scout/server/extensions/mongo_extension.py,sha256=bKB0K5ibp-BWynOTgzBJd5qIYO0S9zRtEyDUw7EoxSQ,1029
647
- scout/server/extensions/panelapp_extension.py,sha256=UoPFGKqXJtAfbw3WRTxvHZweNI4jVgYgrhWkgVJouRo,2732
647
+ scout/server/extensions/panelapp_extension.py,sha256=UnHhyG7iSMy3ERQg5Sl3DOkmKjsLPgAEfPkzlfn2BrY,2738
648
648
  scout/server/extensions/phenopacket_extension.py,sha256=kcEUIOSfkQAlAmUm07hQS1BeUjeN4lBc-InvaNtbFxo,7295
649
649
  scout/server/extensions/rerunner_extension.py,sha256=SEwQi5BZR5X70BoD0U7TfyGgGv2WbJbas0v1efuv_r8,1104
650
650
  scout/server/static/bs_styles.css,sha256=Y7aq8Es3NHj1OaLPX0eiY5485C8gENptpuYmf7W3o1w,6421
@@ -677,9 +677,9 @@ scout/utils/md5.py,sha256=KkgdxOf7xbF9AF40ZjQKCgWaxFWJ9tp9RKjd8SU6IoA,649
677
677
  scout/utils/scout_requests.py,sha256=lgPumNI_EikBZR1m9ztZI_mZAfV29y1KGoiBv9kejzQ,12797
678
678
  scout/utils/sort.py,sha256=1AcbeZ6vdt_UXM3BLDBa3aQmN4qxrqtskxwD19oBhvw,756
679
679
  scout/utils/track_resources.py,sha256=eUjSEe-Ff8BIb4BHPC_COkJocQO2PaWueiPz1GAuiwY,2614
680
- scout_browser-4.91.2.dist-info/LICENSE,sha256=TM1Y9Cqbwk55JVfxD-_bpGLtZQAeN9RovQlqHK6eOTY,1485
681
- scout_browser-4.91.2.dist-info/METADATA,sha256=i0cvLLKs7eoxwwbjjU2KDltcnzEuNtgCDumaZZKLUCs,14262
682
- scout_browser-4.91.2.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
683
- scout_browser-4.91.2.dist-info/entry_points.txt,sha256=q_mxFwbMFTwXRDDIRVcqKram2ubMVmvs3CSNvZri1nY,45
684
- scout_browser-4.91.2.dist-info/top_level.txt,sha256=qM75h71bztMaLYsxn1up4c_n2rjc_ZnyaW6Q0K5uOXc,6
685
- scout_browser-4.91.2.dist-info/RECORD,,
680
+ scout_browser-4.92.dist-info/LICENSE,sha256=TM1Y9Cqbwk55JVfxD-_bpGLtZQAeN9RovQlqHK6eOTY,1485
681
+ scout_browser-4.92.dist-info/METADATA,sha256=Z78U2w0_9MMsAmsc1pLdjEAkA2k2J06aUwZ2R6VIbJM,14260
682
+ scout_browser-4.92.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
683
+ scout_browser-4.92.dist-info/entry_points.txt,sha256=q_mxFwbMFTwXRDDIRVcqKram2ubMVmvs3CSNvZri1nY,45
684
+ scout_browser-4.92.dist-info/top_level.txt,sha256=qM75h71bztMaLYsxn1up4c_n2rjc_ZnyaW6Q0K5uOXc,6
685
+ scout_browser-4.92.dist-info/RECORD,,