scout-browser 4.84__py3-none-any.whl → 4.85__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.84"
1
+ __version__ = "4.85"
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import logging
3
+ from typing import Dict
3
4
 
4
5
  import pymongo
5
6
 
@@ -20,6 +21,18 @@ class CytobandHandler(object):
20
21
  result = self.cytoband_collection.insert_many(cytobands)
21
22
  LOG.debug(f"Number of inserted documents:{len(result.inserted_ids)}")
22
23
 
24
+ def cytoband_to_coordinates(self, build: str) -> Dict[str, dict]:
25
+ """Returns a dictionary with cytoband name as key and its coordinates as value."""
26
+ cytobands = self.cytoband_collection.find({"build": build})
27
+ return {
28
+ "".join([cytoband["chrom"], cytoband["band"]]): {
29
+ "chromosome": cytoband["chrom"],
30
+ "start": int(cytoband["start"]),
31
+ "stop": int(cytoband["stop"]),
32
+ }
33
+ for cytoband in cytobands
34
+ }
35
+
23
36
  def cytoband_by_chrom(self, build="37"):
24
37
  """Returns a dictionary of cytobands with chromosomes as keys
25
38
 
@@ -405,7 +405,7 @@ class GeneHandler(object):
405
405
  add_transcripts = True
406
406
 
407
407
  for gene_obj in self.all_genes(build=build, add_transcripts=add_transcripts):
408
- ensg_id = gene_obj["ensembl_id"]
408
+ ensg_id = gene_obj.get("ensembl_id")
409
409
  hgnc_id = gene_obj["hgnc_id"]
410
410
  transcript_objs = gene_obj.get("ens_transcripts")
411
411
  if id_transcripts and transcript_objs:
@@ -30,6 +30,9 @@ from scout.load import load_hgnc_genes, load_transcripts
30
30
  from scout.server.extensions import store
31
31
  from scout.utils.handle import get_file_handle
32
32
 
33
+ ENSEMBL_GENE_RESOURCES = {"37": "ensembl_genes_37", "38": "ensembl_genes_38"}
34
+ ENSEMBL_TX_RESOURCES = {"37": "ensembl_transcripts_37", "38": "ensembl_transcripts_38"}
35
+
33
36
  LOG = logging.getLogger(__name__)
34
37
 
35
38
 
@@ -137,7 +140,7 @@ def genes(build, downloads_folder, api_key):
137
140
  except Exception as ex:
138
141
  LOG.error(ex)
139
142
  fetch_downloaded_resources(resources, tempdir, builds)
140
- else: # If resources have been previosly downloaded, read those file and return their lines
143
+ else: # If resources have been previously downloaded, read those file and return their lines
141
144
  fetch_downloaded_resources(resources, downloads_folder, builds)
142
145
 
143
146
  # Load genes and transcripts info
@@ -147,11 +150,7 @@ def genes(build, downloads_folder, api_key):
147
150
  LOG.warning("Dropping all transcript information")
148
151
  adapter.drop_transcripts(genome_build)
149
152
 
150
- ensembl_gene_res = (
151
- resources.get("ensembl_genes_37")
152
- if genome_build == "37"
153
- else resources.get("ensembl_genes_38")
154
- ) # It will be none if everything needs to be downloaded
153
+ ensembl_gene_res = resources.get(ENSEMBL_GENE_RESOURCES[genome_build])
155
154
 
156
155
  # Load the genes
157
156
  hgnc_genes = load_hgnc_genes(
@@ -167,15 +166,12 @@ def genes(build, downloads_folder, api_key):
167
166
 
168
167
  ensembl_genes_dict = {}
169
168
  for gene_obj in hgnc_genes:
170
- ensembl_id = gene_obj["ensembl_id"]
171
- ensembl_genes_dict[ensembl_id] = gene_obj
169
+ if gene_obj.get("ensembl_id"):
170
+ ensembl_id = gene_obj["ensembl_id"]
171
+ ensembl_genes_dict[ensembl_id] = gene_obj
172
172
 
173
173
  # Load the transcripts
174
- ensembl_tx_res = (
175
- resources.get("ensembl_transcripts_37")
176
- if genome_build == "37"
177
- else resources.get("ensembl_transcripts_38")
178
- ) # It will be none if everything needs to be downloaded
174
+ ensembl_tx_res = resources.get(ENSEMBL_TX_RESOURCES[genome_build])
179
175
 
180
176
  load_transcripts(adapter, ensembl_tx_res, genome_build, ensembl_genes_dict)
181
177
 
scout/load/hgnc_gene.py CHANGED
@@ -1,5 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  import logging
3
+ from typing import Dict
3
4
 
4
5
  from click import progressbar
5
6
 
@@ -16,6 +17,22 @@ from scout.utils.scout_requests import (
16
17
  LOG = logging.getLogger(__name__)
17
18
 
18
19
 
20
+ def set_missing_gene_coordinates(gene_data: dict, cytoband_coords: Dict[str, dict]):
21
+ """Attempt at collecting gene coordinates from cytoband for genes missing Ensembl ID."""
22
+
23
+ if gene_data.get("ensembl_gene_id") not in [
24
+ "",
25
+ None,
26
+ ]: # Coordinates are present, since they're collected from the Ensembl file
27
+ return
28
+ gene_data["ensembl_gene_id"] = None
29
+ cytoband_coord: dict = cytoband_coords.get(gene_data["location"])
30
+ if cytoband_coord:
31
+ gene_data["chromosome"]: str = cytoband_coord["chromosome"]
32
+ gene_data["start"]: int = cytoband_coord["start"]
33
+ gene_data["end"]: int = cytoband_coord["stop"]
34
+
35
+
19
36
  def load_hgnc_genes(
20
37
  adapter,
21
38
  genes=None,
@@ -36,7 +53,7 @@ def load_hgnc_genes(
36
53
  Args:
37
54
  adapter(scout.adapter.MongoAdapter)
38
55
  genes(dict): If genes are already parsed
39
- ensembl_lines(iterable(str)): Lines formated with ensembl gene information
56
+ ensembl_lines(iterable(str)): Lines formatted with ensembl gene information
40
57
  hgnc_lines(iterable(str)): Lines with gene information from genenames.org
41
58
  exac_lines(iterable(str)): Lines with information pLi-scores from ExAC
42
59
  mim2gene(iterable(str)): Lines with map from omim id to gene symbol
@@ -78,20 +95,36 @@ def load_hgnc_genes(
78
95
  genemap_lines=genemap_lines,
79
96
  )
80
97
 
81
- non_existing = 0
98
+ without_coords = 0
82
99
  nr_genes = len(genes)
83
100
  LOG.info(f"Building info for {nr_genes} genes")
101
+
102
+ cytoband_coords: Dict[str, dict] = adapter.cytoband_to_coordinates(build=build)
103
+
84
104
  with progressbar(genes.values(), label="Building genes", length=nr_genes) as bar:
85
105
  for gene_data in bar:
106
+ set_missing_gene_coordinates(gene_data=gene_data, cytoband_coords=cytoband_coords)
107
+
86
108
  if not gene_data.get("chromosome"):
87
- non_existing += 1
109
+ without_coords += 1
88
110
  continue
111
+ gene_obj = build_hgnc_gene(
112
+ gene_data,
113
+ build=build,
114
+ )
89
115
 
90
- gene_obj = build_hgnc_gene(gene_data, build=build)
91
- gene_objects.append(gene_obj)
116
+ if gene_obj:
117
+ gene_objects.append(gene_obj)
118
+ else:
119
+ without_coords += 1
92
120
 
93
- LOG.info("Nr of genes without coordinates in build %s: %s", build, non_existing)
121
+ LOG.info(
122
+ "Nr of genes without coordinates in build %s and therefore skipped: %s",
123
+ build,
124
+ without_coords,
125
+ )
94
126
  LOG.info(f"Loading {len(gene_objects)} genes into the database")
127
+
95
128
  adapter.load_hgnc_bulk(gene_objects)
96
129
 
97
130
  LOG.info("Loading done. %s genes loaded", len(gene_objects))
scout/parse/hgnc.py CHANGED
@@ -24,6 +24,7 @@ def parse_hgnc_line(line, header):
24
24
  hgnc_gene["hgnc_symbol"] = hgnc_symbol
25
25
  hgnc_gene["hgnc_id"] = int(raw_info["hgnc_id"].split(":")[-1])
26
26
  hgnc_gene["description"] = raw_info["name"]
27
+ hgnc_gene["location"] = raw_info["location"] # cytoband
27
28
 
28
29
  # We want to have the current symbol as an alias
29
30
  aliases = set([hgnc_symbol, hgnc_symbol.upper()])
@@ -324,7 +324,7 @@ def set_variant_frequencies(transcript, entry):
324
324
  continue
325
325
 
326
326
  value = entry[key]
327
- if not value or value == ".":
327
+ if not value or value == "." or value.isalpha():
328
328
  continue
329
329
 
330
330
  if key in THOUSAND_GENOMES_CSQ_KEYS:
@@ -231,10 +231,7 @@ def parse_variant(
231
231
  parsed_variant["revel_score"] = parsed_transcripts[0].get(
232
232
  "revel_rankscore"
233
233
  ) # This is actually the value of REVEL_rankscore
234
-
235
- parsed_variant["revel"] = parsed_transcripts[0].get(
236
- "revel_raw_score"
237
- ) # This is actually the value of REVEL_score
234
+ parsed_variant["revel"] = get_highest_revel_score(parsed_transcripts)
238
235
 
239
236
  ###################### Add conservation ######################
240
237
  parsed_variant["conservation"] = parse_conservations(variant, parsed_transcripts)
@@ -261,6 +258,15 @@ def parse_variant(
261
258
  return parsed_variant
262
259
 
263
260
 
261
+ def get_highest_revel_score(parsed_transcripts: List[dict]) -> Optional[float]:
262
+ """Retrieve the highest REVEL_score value from parsed variant transcripts."""
263
+ tx_revel_scores: List(float) = [
264
+ tx.get("revel_raw_score") for tx in parsed_transcripts if tx.get("revel_raw_score") != None
265
+ ]
266
+ if tx_revel_scores:
267
+ return max(tx_revel_scores)
268
+
269
+
264
270
  def get_genmod_key(case):
265
271
  """Gen genmod key
266
272
 
@@ -64,6 +64,7 @@ JSON_HEADERS = {
64
64
  COVERAGE_REPORT_TIMEOUT = 20
65
65
 
66
66
  PANEL_PROJECTION = {"version": 1, "display_name": 1, "genes": 1}
67
+ PANEL_HIDDEN_PROJECTION = {"version": 1, "display_name": 1, "hidden": 1}
67
68
 
68
69
 
69
70
  def phenomizer_diseases(hpo_ids, case_obj, p_value_treshold=1):
@@ -339,6 +340,8 @@ def case(
339
340
 
340
341
  case_obj["default_genes"] = _get_default_panel_genes(store, case_obj)
341
342
 
343
+ _set_panel_removed(store, case_obj)
344
+
342
345
  for hpo_term in itertools.chain(
343
346
  case_obj.get("phenotype_groups") or [], case_obj.get("phenotype_terms") or []
344
347
  ):
@@ -479,6 +482,18 @@ def _limit_genes_on_default_panels(default_genes: list, limit_genes: list) -> li
479
482
  return list(default_genes_set.intersection(limit_genes_set))
480
483
 
481
484
 
485
+ def _set_panel_removed(store: MongoAdapter, case_obj: dict) -> list:
486
+ """Flag panel on list removed if the latest panel version is marked hidden."""
487
+
488
+ for panel_info in case_obj.get("panels", []):
489
+ latest_panel = store.gene_panel(
490
+ panel_info["panel_name"], projection=PANEL_HIDDEN_PROJECTION
491
+ )
492
+ panel_info["removed"] = (
493
+ latest_panel.get("hidden", False) if latest_panel is not None else False
494
+ )
495
+
496
+
482
497
  def _get_default_panel_genes(store: MongoAdapter, case_obj: dict) -> list:
483
498
  """Get unique genes on case default panels.
484
499
 
@@ -510,7 +525,6 @@ def _get_default_panel_genes(store: MongoAdapter, case_obj: dict) -> list:
510
525
  projection=PANEL_PROJECTION,
511
526
  )
512
527
  latest_panel = store.gene_panel(panel_name, projection=PANEL_PROJECTION)
513
- panel_info["removed"] = False if latest_panel is None else latest_panel.get("hidden", False)
514
528
  if not panel_obj:
515
529
  panel_obj = latest_panel
516
530
  if not panel_obj:
@@ -352,7 +352,7 @@
352
352
  <a href="{{ url_for('cases.case', institute_id=grouped_case.owner, case_name=grouped_case.display_name) }}">{{ grouped_case.display_name }}</a>
353
353
 
354
354
  <a href="{{ url_for('cases.remove_case_group', institute_id=institute._id, case_name=grouped_case.display_name, case_group=group_id) }}" class="btn btn-link btn-sm">
355
- <span class="fa fa-remove text-dark"></span></a>
355
+ <span class="fa fa-times text-dark"></span></a>
356
356
 
357
357
  </div>
358
358
  {% endfor %}
@@ -247,7 +247,7 @@
247
247
  {% else %}
248
248
  <button type="submit" name="action" value="DELETE" class="btn btn-warning btn-xs form-control">
249
249
  {% endif %}
250
- <span class="fa fa-remove"></span>
250
+ <span class="fa fa-times"></span>
251
251
  {{ user.name }}
252
252
  </button>
253
253
  </form>
@@ -9,7 +9,7 @@
9
9
  <thead class="table-light thead">
10
10
  <tr style="cursor: pointer; white-space: nowrap">
11
11
  <th>Panel <i class="fas fa-sort" data-bs-toggle="tooltip" title="Sort by gene panel name"></i></th>
12
- <th >Default <i class="fas fa-sort" data-bs-toggle="tooltip" title="Sort by default panel"></i></th>
12
+ <th>Default <i class="fas fa-sort" data-bs-toggle="tooltip" title="Sort by if panel is default"></i></th>
13
13
  <th>Version <i class="fas fa-sort" data-bs-toggle="tooltip" title="Sort by panel version"></i></th>
14
14
  <th>Genes <i class="fas fa-sort" data-bs-toggle="tooltip" title="Sort by number of genes"></i></th>
15
15
  </tr>
@@ -20,10 +20,10 @@
20
20
  <td>
21
21
  <a {% if panel.is_default %} class="text-white" {% endif %} href="{{ url_for('panels.panel', panel_id=panel.panel_id, case_id=case._id, institute_id=institute._id) }}">
22
22
  {{ panel.display_name|truncate(30, True) }}
23
- {% if panel.removed %}
24
- <span class="badge bg-danger">Removed</span>
25
- {% endif %}
26
23
  </a>
24
+ {% if panel.removed %}
25
+ <span class="badge bg-danger">Removed</span>
26
+ {% endif %}
27
27
  </td>
28
28
  <td >
29
29
  {% if panel.is_default %}
@@ -35,53 +35,39 @@
35
35
  </tr>
36
36
  {% else %}
37
37
  <tr>
38
- <td colspan="5">No panels linked to case</td>
38
+ <td colspan="4">No panels linked to case</td>
39
39
  </tr>
40
40
  {% endfor %}
41
41
  </tbody>
42
42
  </table>
43
43
  </div>
44
- <div class="card-body">
45
- <form action="{{ url_for('cases.default_panels', institute_id=institute._id, case_name=case.display_name) }}" method="POST">
46
- <div class="row">
47
- <label>Change default gene panels</label>
48
- </div>
49
- <div class="row">
50
- <div class="col-8">
51
- <select name="panel_ids" class="selectpicker" multiple="multiple" data-style="btn-secondary">
52
- {% for panel in case.panels %}
53
- <option value="{{ panel.panel_id }}" {% if panel.is_default %} selected {% endif %}>{{ panel.display_name }}</option>
54
- {% endfor %}
55
- </select>
56
- </div>
57
- <div class="col-4">
58
- <button class="btn btn-secondary form-control">Save</button>
59
- </div>
60
- </div>
61
- </form>
62
- </div>
44
+ {{ change_default_panels(case, institute) }}
45
+
63
46
  </div>
64
47
  {% endmacro %}
65
48
 
66
49
  {% macro change_default_panels(case, institute) %}
67
- <div class="card panel-default">
68
- <div class="panel-heading">Change default gene panels</div>
69
- <div class="card-body">
70
- <form action="{{ url_for('cases.default_panels', institute_id=institute._id, case_name=case.display_name) }}" method="POST">
71
- <div class="row">
72
- <div class="col-xs-4">
73
- <select name="panel_ids" class="form-control" multiple>
74
- {% for panel in case.panels %}
75
- <option value="{{ panel.panel_id }}" {% if panel.is_default %} selected {% endif %}>{{ panel.display_name }}</option>
76
- {% endfor %}
77
- </select>
78
- </div>
79
- <div class="col-xs-4">
80
- <button class="btn btn-secondary form-control">Save</button>
81
- </div>
50
+ <div class="card-body">
51
+ <form action="{{ url_for('cases.default_panels', institute_id=institute._id, case_name=case.display_name) }}" method="POST">
52
+ <div class="row">
53
+ <label>Change default gene panels</label>
54
+ </div>
55
+
56
+ <div class="row">
57
+ <div class="col-8">
58
+ <select name="panel_ids" class="selectpicker" multiple="multiple" data-style="btn-secondary">
59
+ {% for panel in case.panels|sort(attribute='display_name') %}
60
+ <option value="{{ panel.panel_id }}" {% if panel.is_default %} selected {% endif %}>
61
+ {{ panel.display_name }} {% if panel.removed %} (Removed) {% endif %}
62
+ </option>
63
+ {% endfor %}
64
+ </select>
82
65
  </div>
83
- </form>
84
- </div>
66
+ <div class="col-4">
67
+ <button class="btn btn-secondary form-control">Save</button>
68
+ </div>
69
+ </div>
70
+ </form>
85
71
  </div>
86
72
  {% endmacro %}
87
73
 
@@ -676,7 +676,7 @@
676
676
  name="{{ button_name if button_name }}"
677
677
  value="{{ button_value if button_value }}"
678
678
  type="submit">
679
- <i class="fa fa-remove text-danger""></i>
679
+ <i class="fa fa-times text-danger"></i>
680
680
  </button>
681
681
  </div>
682
682
  </form>
@@ -145,7 +145,7 @@
145
145
  <span class='badge bg-secondary'>edited</span>
146
146
  {% endif %}
147
147
  {% if comment.user_id == current_user.email %}
148
- <button class="btn btn-link btn-sm" type="submit" name="remove"><i class="fa fa-remove"></i></button>
148
+ <button class="btn btn-link btn-sm" type="submit" name="remove"><i class="fa fa-times"></i></button>
149
149
  <button class="btn btn-link btn-sm" type="button" data-bs-toggle="modal" data-bs-target="#editComment_{{index}}"><i class="fa fa-edit"></i></button>
150
150
  {% endif %}
151
151
  </small>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scout-browser
3
- Version: 4.84
3
+ Version: 4.85
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
@@ -15,7 +15,7 @@ Classifier: Topic :: Software Development :: Libraries
15
15
  Classifier: Programming Language :: Python :: 3.6
16
16
  Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
- Requires-Dist: werkzeug <3
18
+ Requires-Dist: werkzeug
19
19
  Requires-Dist: Flask >=2.0
20
20
  Requires-Dist: Flask-Bootstrap
21
21
  Requires-Dist: Flask-CORS
@@ -1,5 +1,5 @@
1
1
  scout/__init__.py,sha256=Z4liXvmEcLkC67ElsWvYHfemPKdWgWI5O6MB6XlDM8M,232
2
- scout/__version__.py,sha256=tF83DHOdm3YmXrOU1LzFYhwaXBo2y3-VFlwB8yTrpXw,21
2
+ scout/__version__.py,sha256=0tKXeulzMZX3om2NQDhtJ8c6Oms2h9SN1SxrM5kH4Q4,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
@@ -9,11 +9,11 @@ scout/adapter/mongo/case.py,sha256=wXYmyv32gvnCGHgqys3ZGG3gAUyf_buC8LfSzDt4TFo,5
9
9
  scout/adapter/mongo/case_events.py,sha256=slHR4XJF9vRuEbuInJKMMAImLF8m7tHWVfGP42fbXr0,26859
10
10
  scout/adapter/mongo/case_group.py,sha256=tG8DuO0rNYepV4k0yCGPqssODErc0HMsAypg3mfhcV0,1575
11
11
  scout/adapter/mongo/clinvar.py,sha256=tczC39O3DFDkYgjt2RDgkkG-x1Mvx_99Hw7dAbIQ5gk,19838
12
- scout/adapter/mongo/cytoband.py,sha256=pOWMvOn7lLATk_ShuzRWnGa3xRyILGRJRxh4VONCw7k,2082
12
+ scout/adapter/mongo/cytoband.py,sha256=2NoIAoQ7RPqcipiSymD2O9qH8lXscP3T5ejquOrD7uQ,2622
13
13
  scout/adapter/mongo/disease_terms.py,sha256=4qcQRLuP5xn_RkB2RlNtwCrONmDuWwdlngZrj87BUEo,5637
14
14
  scout/adapter/mongo/event.py,sha256=NnURFhS5odOXk7So_gGMHmALPAJM0PWzESI4FC06azE,19842
15
15
  scout/adapter/mongo/filter.py,sha256=GoPqMDqteE1pDiVfpUP8xxT_1A8s7S4ByITCJGdesok,7570
16
- scout/adapter/mongo/hgnc.py,sha256=qklk7rKO8TCklh6XvjgWXiB-BZ9Vkp-SFRM1-xgfX1s,16407
16
+ scout/adapter/mongo/hgnc.py,sha256=Zcnf_kKJqrJAf62tUFODhL8OQUb695XnL_rzk4D9nes,16411
17
17
  scout/adapter/mongo/hpo.py,sha256=ps2Pix3sGeea7DenboZVP5j7Vh9WAgX3-sgpbAj0Eck,6871
18
18
  scout/adapter/mongo/index.py,sha256=TZPVv6xBWsEtZpBUWp5uhjuPjQMfVss4lZZju49g1Lw,3577
19
19
  scout/adapter/mongo/institute.py,sha256=GQmMKb_VzsvWwadp6gXHlSSpcG5ovF1ozdTzvpTFLpA,7025
@@ -99,7 +99,7 @@ scout/commands/update/base.py,sha256=XxxBGzn9JdFfk39jsZbU5eAZhE41MLq73WwLqa_u4Rc
99
99
  scout/commands/update/case.py,sha256=q7gjMS4izlrV0LghfTM9GiJeXI0K4qtmO62TqfTqizw,5822
100
100
  scout/commands/update/compounds.py,sha256=vwCtb6045tGovKWHqY_uL8w1l9rZ_Hxlt0gUU0cKXUk,753
101
101
  scout/commands/update/disease.py,sha256=AajPLoEtd9YeU3jf7S7ZQRs3_o1H3GSxHsST_sVaIZQ,3846
102
- scout/commands/update/genes.py,sha256=ngzdPodG9qosQYOMKE9x-rMjniZU3T1d5vmuMrduKJY,7082
102
+ scout/commands/update/genes.py,sha256=GhYIn2zWrAZMhdJjzzrpo8AquFqr7XOvosOk8lg4Zwk,6989
103
103
  scout/commands/update/hpo.py,sha256=eyCuUlUwPmyP0oLh1olXhdqInlUXDdLe8ylgTlHWi-g,1339
104
104
  scout/commands/update/individual.py,sha256=lwVQcKCZj5VxUSO8CcBUsvVRl3ZHgJVe4AE9pcJS7ys,4007
105
105
  scout/commands/update/institute.py,sha256=ms8mmTGfCXqxeh_vSB1cdNDGrdHoSSgh9ryhB5GrJQc,1727
@@ -364,7 +364,7 @@ scout/load/all.py,sha256=F_eb7lWM3wYASEL06qDeNczQTM3QR9Zz76nLgchaN5I,3699
364
364
  scout/load/cytoband.py,sha256=vPU8oQm31WMcnaG9QG2le9pe_8g70O1S0q1Ljj3Ce84,1356
365
365
  scout/load/disease.py,sha256=eZ-RDTtfO6-YCk0tCHuhCWxw1FSCwHNZEemWXCC4P_w,2747
366
366
  scout/load/exon.py,sha256=ONaWJ9EfbhGV8KGXxwlq_jYCoU-JkBpv4r9zDaCjtls,2070
367
- scout/load/hgnc_gene.py,sha256=9bfelQgx71FTeZpn1-5_-Gww_JqFtz8pqMZN6rSXQys,3444
367
+ scout/load/hgnc_gene.py,sha256=GcSQ01CioYIshAzXAv4msIGDPjTjGBBPBnLX2GvaZJ4,4507
368
368
  scout/load/hpo.py,sha256=ZWYjV9j6OfpI-ZZuhTQVEs_xgLa7ST2KuvYLW6ku0PY,2474
369
369
  scout/load/institute.py,sha256=etmZ0CZRHOVi3f9R-wn5BK1pZPhtZwq2QYbh2RXXxDc,625
370
370
  scout/load/panel.py,sha256=JQqkyUdpvhFnW81n8Sq-iPahDcm1hGBzLfrwUcVqt4k,9446
@@ -399,7 +399,7 @@ scout/parse/cytoband.py,sha256=7flY3b_wegupHHBLRcs4KyM1ns-uzuTfVHm4CycnupE,1055
399
399
  scout/parse/disease_terms.py,sha256=-JIm4GWEvqg9nmWehK18mlIQ-N5nZhT2u5pbfDRXoxE,7437
400
400
  scout/parse/ensembl.py,sha256=nnqOVtLgWh9wbtHnzGIidnNIvRoOp2bTct5OuAFSSB0,10618
401
401
  scout/parse/exac.py,sha256=VbahYYoMl8RkffChAhKnrVOS6fzQdDKRkPMPZnKnZcQ,1972
402
- scout/parse/hgnc.py,sha256=dSV-gIHv6n1wwPc_zpJpuh7r3o1LZ86JVdRZGmJlewI,3189
402
+ scout/parse/hgnc.py,sha256=92ro9ilOLi96AmlbXLItzDKPjJjgUd8iqzQbsy5AOeo,3250
403
403
  scout/parse/hpo_mappings.py,sha256=UJY38iLmpJFnZ9FuRaNIGhNQnTx7_WASxr9mlEnhvHE,2637
404
404
  scout/parse/hpo_terms.py,sha256=ZJCKFD0rV3jiCuoI8Gm1WNTiaOSRRoKOhZ1bYnqwY6I,5732
405
405
  scout/parse/matchmaker.py,sha256=5e9NCFQ2rKXNCJTW-ThXoEylEPl3H41cCfQzPATQ2QM,9524
@@ -424,8 +424,8 @@ scout/parse/variant/ids.py,sha256=N_2m7Hgdh7asHdWU4k2dMySsutxp16ODRE_OHy_Niwg,26
424
424
  scout/parse/variant/managed_variant.py,sha256=qwmi2sPLwGZM5izSsMpvhQ9vfMHREiwiIzjDCuOdqQo,2288
425
425
  scout/parse/variant/models.py,sha256=NrqLXu7PxpIQ0NmjGRIEk4vS_y972VPiexLsZCZpOn0,507
426
426
  scout/parse/variant/rank_score.py,sha256=ipFxCTsQHMqObUbzLJlDAKUb3_lk_sqEYzH52myZVVk,486
427
- scout/parse/variant/transcript.py,sha256=h0-IPDj4Th5aNijyhR1jrwnPe_YZx5QVajqn9ttxE98,13340
428
- scout/parse/variant/variant.py,sha256=hKsE2b97hRuUpE948VHL5WOL81n-_RKpZBdRGOHaV1A,23759
427
+ scout/parse/variant/transcript.py,sha256=0kxaXWrNAvSiU76ZdIl9PQFzUyj6go6u3BnNhnTk8pg,13359
428
+ scout/parse/variant/variant.py,sha256=CTCaE07GqDg52ZhUPLpEOoEYLgr4y1mPtvRvAsxt5IM,24057
429
429
  scout/resources/__init__.py,sha256=i9UVG651subgmOZ-Gm-JKPsXBqr5-50QUDfSpbwmwIw,443
430
430
  scout/resources/cytoBand_hg19.txt.gz,sha256=pheUD5b9NlVuvwwnbKwDc2FG80Yg70gvPxVXP-Sqd3k,6147
431
431
  scout/resources/cytoBand_hg38.txt.gz,sha256=sqSVmvPlktQ-0hTiTapJM-5UgyV6xDoYZuTF0kPuETs,6105
@@ -446,27 +446,27 @@ scout/server/blueprints/alignviewers/templates/alignviewers/utils.html,sha256=ni
446
446
  scout/server/blueprints/api/__init__.py,sha256=HR6HjS7ot1K_8Lt5eQdNT154z_FCdHGSigy8r2LpNCI,26
447
447
  scout/server/blueprints/api/views.py,sha256=pbl78wfhrm1T8JmiJDYF3BbTbfFrlF-hQRbuv2GWI0s,3729
448
448
  scout/server/blueprints/cases/__init__.py,sha256=_c17kPFITFYcIVphF4V9bf0PZBer8bU3rtVWQnljKDU,52
449
- scout/server/blueprints/cases/controllers.py,sha256=Hc_A59cGCByo-7mMqFuLU21U5eBVAI_ktObhpFC5PeU,54195
449
+ scout/server/blueprints/cases/controllers.py,sha256=lVBZy7udshXltMZtjkQWP-0ypNHOOagi_Tciqq5PMJ8,54666
450
450
  scout/server/blueprints/cases/views.py,sha256=ZfuDfkcOiw7PHUr68mowJyYxUb6_gQObR488mhP6l78,42841
451
451
  scout/server/blueprints/cases/static/case_images.js,sha256=pb_gG7DNQc-1lADqSII8YvjBwmHyeQWYVtuu2jyrTlU,14997
452
452
  scout/server/blueprints/cases/static/case_styles.css,sha256=2Pgc8pFf9DR5HM1sTdAjaRWhjL-bK5bsQnLpH54HZak,541
453
453
  scout/server/blueprints/cases/static/edit_pedigree.js,sha256=ntC5fie7SsOYJau8qkke1UHxjiYWY_gBzWcIkGpdJUA,2978
454
454
  scout/server/blueprints/cases/static/madeline.js,sha256=KHxKMBVlYVJODNu5QkY9hhsGkDJNoaCoCZZ0DRu0YN0,1175
455
- scout/server/blueprints/cases/templates/cases/case.html,sha256=ZwB24L9D4YjPRPaI4McQQ2VBx5dQvAFPN_LhFXvhp5w,36561
455
+ scout/server/blueprints/cases/templates/cases/case.html,sha256=3wpGT8Vfoo3xBOVxf0N-SUpFoZwlHSf3K9vrlOxAL08,36560
456
456
  scout/server/blueprints/cases/templates/cases/case_bionano.html,sha256=PLoRv7hDJcHwxhi-0hC9fQSZc7V_aUYHBhhQqcn_2G8,5946
457
457
  scout/server/blueprints/cases/templates/cases/case_report.html,sha256=1tosH5xEl6CCZ1P6qlR5OKvWbAC5z3ewKL_JGdgPMBM,63635
458
458
  scout/server/blueprints/cases/templates/cases/case_sma.html,sha256=SAcElb4kH05mkPdEdaEbed-vbgQQGfxioCoNZsHljDc,4962
459
459
  scout/server/blueprints/cases/templates/cases/case_tabular_view.html,sha256=ko-LDUKmIoTazMZ2nFWvPEZsgObU07RwqIkDYFjokoY,4317
460
460
  scout/server/blueprints/cases/templates/cases/chanjo2_form.html,sha256=5Wmk7DM8LI3MynqzxeTzAr_EoEBwVVo31djcI5ZlTdo,2164
461
- scout/server/blueprints/cases/templates/cases/collapsible_actionbar.html,sha256=tU7vorWKg3rdcDCMDyEaIBL5gGcTv8OvmKO9XRoc2mQ,29247
461
+ scout/server/blueprints/cases/templates/cases/collapsible_actionbar.html,sha256=Az8Oq9ldGtT9snzeDxt1xC68Yp7fp4qZ1eDN7Gr9Wf4,29246
462
462
  scout/server/blueprints/cases/templates/cases/diseases.html,sha256=ETTQI0Nrl_v86NoX9mFZcvWD-qM1IJoqPmHPWn__Grw,1677
463
- scout/server/blueprints/cases/templates/cases/gene_panel.html,sha256=fR2fCb5A_dBUTTyI4GfwARtOC6k9LeFunx8flbb6qko,12309
463
+ scout/server/blueprints/cases/templates/cases/gene_panel.html,sha256=lkC_Piqaq-paYr4GUCwQaR8EgGOUXDMoW5sPLDW7yzg,11628
464
464
  scout/server/blueprints/cases/templates/cases/index.html,sha256=oUmjFyUvwP4yo21CxcWy-6eepMFI65hpznMEpSEqKfM,1207
465
465
  scout/server/blueprints/cases/templates/cases/individuals_table.html,sha256=DXE7gE0f81B5CxCV1e5bqWv27_HS-9-8nc0pcFkMoOg,11497
466
466
  scout/server/blueprints/cases/templates/cases/institutes_sidebar.html,sha256=u0oPGHJ0ipZ1LkjHkbwlWfkUWc1h6XH1nh3tkbX17z0,4546
467
467
  scout/server/blueprints/cases/templates/cases/matchmaker.html,sha256=1vwGBhM4HgvRMlO1foKBAwV-Wfvfs1MRvzteOETCZeM,13142
468
468
  scout/server/blueprints/cases/templates/cases/phenotype.html,sha256=kBHD13SjBUGz0b79cQ2rfgdx3JPyJGDR38kscGZJai0,16120
469
- scout/server/blueprints/cases/templates/cases/utils.html,sha256=GbcR0LXW5exdlmZa4fpJ81aEtgN505XqOO29LNJsd0A,34914
469
+ scout/server/blueprints/cases/templates/cases/utils.html,sha256=EwMPMGmHPuDRS3J88Ga4ram2y3fzopVs38HjnvZHfyM,34912
470
470
  scout/server/blueprints/clinvar/__init__.py,sha256=BV3aH2AbiA2WWrUEMbGd0H9MefFd2eTsRE9ShywbzpI,30
471
471
  scout/server/blueprints/clinvar/controllers.py,sha256=TEOdUTVYI-I_lzts0F3M_TFPMkeeweWIUxWug5HUhDw,24059
472
472
  scout/server/blueprints/clinvar/form.py,sha256=d0EBJouYsk-kIpGtAr_SfNCyLoBNchfLt25uFR9HxO0,5155
@@ -639,7 +639,7 @@ scout/server/static/robots.txt,sha256=fFX0beQN4x3mzR3evnZjrOUYOTNkezYAwqMowTUpmx
639
639
  scout/server/templates/bootstrap_global.html,sha256=6e09Qyn3pc5zbE82Gacyye9qL5cMbrfOebMSjU9rqqA,2894
640
640
  scout/server/templates/layout.html,sha256=-uhRxFA89L0gocv8sPLcODUHmWLNuV6xsjB34Zjq-8o,4635
641
641
  scout/server/templates/report_base.html,sha256=PZOqFZRLtbe4PZ7lkVc9LP1O-yh7v3_EzOohRE9Ix4U,1252
642
- scout/server/templates/utils.html,sha256=9o3zXyAaIcZFmmg1ltYyNk7ow7CYlnf4NbHfeLnp5fg,12941
642
+ scout/server/templates/utils.html,sha256=aFxvkFYA_4S-LBkMGXFWbycLNFZ6QqtO1088bru3i9Y,12940
643
643
  scout/server/translations/sv/LC_MESSAGES/messages.mo,sha256=eI53pCtlYj1MXduDicMZRxBhgOV_TlmMUpH7IhncgDY,4452
644
644
  scout/server/translations/sv/LC_MESSAGES/messages.po,sha256=Wp7Mx4LoiFNtzsV1tpAoWjMxYnq8SpfpU9a4XWJ7L6g,4531
645
645
  scout/update/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -661,9 +661,9 @@ scout/utils/md5.py,sha256=KkgdxOf7xbF9AF40ZjQKCgWaxFWJ9tp9RKjd8SU6IoA,649
661
661
  scout/utils/scout_requests.py,sha256=JjHOJW1XmenG05mNQ33kvOKq_IicveIfQMcPZeRcQdo,12856
662
662
  scout/utils/sort.py,sha256=1AcbeZ6vdt_UXM3BLDBa3aQmN4qxrqtskxwD19oBhvw,756
663
663
  scout/utils/track_resources.py,sha256=eUjSEe-Ff8BIb4BHPC_COkJocQO2PaWueiPz1GAuiwY,2614
664
- scout_browser-4.84.dist-info/LICENSE,sha256=TM1Y9Cqbwk55JVfxD-_bpGLtZQAeN9RovQlqHK6eOTY,1485
665
- scout_browser-4.84.dist-info/METADATA,sha256=4IpwKNOjBxH-Kyj_hLJL1mSHA8ZcmKZjERVJ0uIkLG0,14263
666
- scout_browser-4.84.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
667
- scout_browser-4.84.dist-info/entry_points.txt,sha256=q_mxFwbMFTwXRDDIRVcqKram2ubMVmvs3CSNvZri1nY,45
668
- scout_browser-4.84.dist-info/top_level.txt,sha256=qM75h71bztMaLYsxn1up4c_n2rjc_ZnyaW6Q0K5uOXc,6
669
- scout_browser-4.84.dist-info/RECORD,,
664
+ scout_browser-4.85.dist-info/LICENSE,sha256=TM1Y9Cqbwk55JVfxD-_bpGLtZQAeN9RovQlqHK6eOTY,1485
665
+ scout_browser-4.85.dist-info/METADATA,sha256=-rqJW4SQ9_0iU08QcC2w8nFzgK57yYUDkafy1fBNxHQ,14260
666
+ scout_browser-4.85.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
667
+ scout_browser-4.85.dist-info/entry_points.txt,sha256=q_mxFwbMFTwXRDDIRVcqKram2ubMVmvs3CSNvZri1nY,45
668
+ scout_browser-4.85.dist-info/top_level.txt,sha256=qM75h71bztMaLYsxn1up4c_n2rjc_ZnyaW6Q0K5uOXc,6
669
+ scout_browser-4.85.dist-info/RECORD,,