scout-browser 4.86__py3-none-any.whl → 4.86.1__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.86"
1
+ __version__ = "4.86.1"
@@ -7,6 +7,7 @@ from pymongo.errors import BulkWriteError, DuplicateKeyError
7
7
  from scout.exceptions import IntegrityError
8
8
 
9
9
  LOG = logging.getLogger(__name__)
10
+ QUERY_FIELD_EXISTS = {"$exists": True, "$ne": None}
10
11
 
11
12
 
12
13
  class GeneHandler(object):
@@ -364,9 +365,13 @@ class GeneHandler(object):
364
365
  Returns:
365
366
  mapping(dict): {"ENSG00000121410": 5, ...}
366
367
  """
367
- pipeline = [{"$group": {"_id": {"ensembl_id": "$ensembl_id", "hgnc_id": "$hgnc_id"}}}]
368
- result = self.hgnc_collection.aggregate(pipeline)
369
- mapping = {res["_id"]["ensembl_id"]: res["_id"]["hgnc_id"] for res in result}
368
+ query = {
369
+ "ensembl_id": QUERY_FIELD_EXISTS,
370
+ "hgnc_id": QUERY_FIELD_EXISTS,
371
+ }
372
+ project = {"ensembl_id": 1, "hgnc_id": 1}
373
+ result = self.hgnc_collection.find(query, project)
374
+ mapping = {res["ensembl_id"]: res["hgnc_id"] for res in result}
370
375
  return mapping
371
376
 
372
377
  def hgnc_symbol_ensembl_id_mapping(self) -> Dict[str, str]:
@@ -375,18 +380,13 @@ class GeneHandler(object):
375
380
  Returns:
376
381
  mapping(dict): {"A1BG": "ENSG00000121410".}
377
382
  """
378
- pipeline = [
379
- {
380
- "$group": {
381
- "_id": {
382
- "hgnc_symbol": "$hgnc_symbol",
383
- "ensembl_id": "$ensembl_id",
384
- }
385
- }
386
- }
387
- ]
388
- result = self.hgnc_collection.aggregate(pipeline)
389
- mapping = {res["_id"]["hgnc_symbol"]: res["_id"]["ensembl_id"] for res in result}
383
+ query = {
384
+ "ensembl_id": QUERY_FIELD_EXISTS,
385
+ "hgnc_symbol": QUERY_FIELD_EXISTS,
386
+ }
387
+ project = {"ensembl_id": 1, "hgnc_symbol": 1}
388
+ result = self.hgnc_collection.find(query, project)
389
+ mapping = {res["hgnc_symbol"]: res["ensembl_id"] for res in result}
390
390
  return mapping
391
391
 
392
392
  def ensembl_genes(self, build=None, add_transcripts=False, id_transcripts=False):
scout/load/panel.py CHANGED
@@ -117,27 +117,33 @@ def _panelapp_panel_ids() -> List[str]:
117
117
  return [panel_info["Panel_Id"] for panel_info in json_lines.get("result", [])]
118
118
 
119
119
 
120
- def _parse_panelapp_panel(adapter, panel_id, institute, confidence):
120
+ def _parse_panelapp_panel(
121
+ panel_id: str,
122
+ institute: str,
123
+ confidence: str,
124
+ ensembl_id_to_hgnc_id_map: Dict[str, int],
125
+ hgnc_symbol_to_ensembl_id_map: Dict[str, str],
126
+ ):
121
127
  """fetch and parse lines from a PanelApp panel, given its ID
122
128
 
123
129
  Args:
124
130
  adapter(scout.adapter.MongoAdapter)
125
131
  panel_id(str): The panel app panel id
126
132
  confidence(str enum green|amber|red): traffic light-style PanelApp level of confidence
133
+ ensembl_to_hgnc_map: dict[str, int]
134
+ hgnc_to_ensembl_map: [int, str]
135
+
127
136
 
128
137
  Returns:
129
138
  parsed_panel(dict). Example:
130
139
  {'version': 3.3, 'date': datetime.datetime(2023, 1, 31, 16, 43, 37, 521719), 'display_name': 'Diabetes - neonatal onset - [GREEN]', 'institute': 'cust000', 'panel_type': 'clinical', 'genes': [list of genes], 'panel_id': '55a9041e22c1fc6711b0c6c0'}
131
140
 
132
141
  """
133
- ensembl_gene_hgnc_id_map: Dict[str, int] = adapter.ensembl_to_hgnc_id_mapping()
134
- hgnc_symbol_ensembl_gene_map: Dict[str, str] = adapter.hgnc_symbol_ensembl_id_mapping()
135
-
136
142
  json_lines = fetch_resource(PANELAPP_BASE_URL.format("get_panel") + panel_id, json=True)
137
143
  parsed_panel = parse_panel_app_panel(
138
144
  panel_info=json_lines["result"],
139
- ensembl_gene_hgnc_id_map=ensembl_gene_hgnc_id_map,
140
- hgnc_symbol_ensembl_gene_map=hgnc_symbol_ensembl_gene_map,
145
+ ensembl_gene_hgnc_id_map=ensembl_id_to_hgnc_id_map,
146
+ hgnc_symbol_ensembl_gene_map=hgnc_symbol_to_ensembl_id_map,
141
147
  institute=institute,
142
148
  confidence=confidence,
143
149
  )
@@ -166,8 +172,17 @@ def load_panelapp_panel(adapter, panel_id=None, institute="cust000", confidence=
166
172
  LOG.info("Fetching all panel app panels")
167
173
  panel_ids: List[str] = _panelapp_panel_ids()
168
174
 
175
+ ensembl_id_to_hgnc_id_map: Dict[str, int] = adapter.ensembl_to_hgnc_id_mapping()
176
+ hgnc_symbol_to_ensembl_id_map: Dict[int, str] = adapter.hgnc_symbol_ensembl_id_mapping()
177
+
169
178
  for _ in panel_ids:
170
- parsed_panel = _parse_panelapp_panel(adapter, _, institute, confidence)
179
+ parsed_panel = _parse_panelapp_panel(
180
+ panel_id=_,
181
+ institute=institute,
182
+ confidence=confidence,
183
+ ensembl_id_to_hgnc_id_map=ensembl_id_to_hgnc_id_map,
184
+ hgnc_symbol_to_ensembl_id_map=hgnc_symbol_to_ensembl_id_map,
185
+ )
171
186
 
172
187
  if len(parsed_panel["genes"]) == 0:
173
188
  LOG.warning("Panel %s is missing genes. Skipping.", parsed_panel["display_name"])
@@ -201,9 +216,19 @@ def load_panelapp_green_panel(adapter, institute, force):
201
216
  }
202
217
  genes = set() # avoid duplicate genes from different panels
203
218
  # Loop over all PanelApp panels
219
+
220
+ ensembl_id_to_hgnc_id_map: Dict[str, int] = adapter.ensembl_to_hgnc_id_mapping()
221
+ hgnc_symbol_to_ensembl_id_map: Dict[int, str] = adapter.hgnc_symbol_ensembl_id_mapping()
222
+
204
223
  for _ in panel_ids:
205
224
  # And collect their green genes
206
- parsed_panel = _parse_panelapp_panel(adapter, _, institute, "green")
225
+ parsed_panel = _parse_panelapp_panel(
226
+ panel_id=_,
227
+ institute=institute,
228
+ confidence="green",
229
+ ensembl_id_to_hgnc_id_map=ensembl_id_to_hgnc_id_map,
230
+ hgnc_symbol_to_ensembl_id_map=hgnc_symbol_to_ensembl_id_map,
231
+ )
207
232
  genes.update({(gene["hgnc_id"], gene["hgnc_symbol"]) for gene in parsed_panel.get("genes")})
208
233
 
209
234
  green_panel["genes"] = [{"hgnc_id": tup[0], "hgnc_symbol": tup[1]} for tup in genes]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: scout-browser
3
- Version: 4.86
3
+ Version: 4.86.1
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=zYKQx08a1gvbjSpG6DiyHGDUoAWcbw-0P5ZAvghe_Lg,21
2
+ scout/__version__.py,sha256=Bv6pkrw-9AgvxM3NeIK6_fIwVSVxwIL91re4O83Ec0k,23
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
@@ -13,7 +13,7 @@ scout/adapter/mongo/cytoband.py,sha256=2NoIAoQ7RPqcipiSymD2O9qH8lXscP3T5ejquOrD7
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=vzBJS_6vq2z76SH8PszdRR-MNuZ7_RA4VJvnkNYUs7s,8937
16
- scout/adapter/mongo/hgnc.py,sha256=Zcnf_kKJqrJAf62tUFODhL8OQUb695XnL_rzk4D9nes,16411
16
+ scout/adapter/mongo/hgnc.py,sha256=9jbrkaTtlnnuE5gsSM8ylb8Kero4lC2zCWr-90QlyAY,16420
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
@@ -370,7 +370,7 @@ scout/load/exon.py,sha256=ONaWJ9EfbhGV8KGXxwlq_jYCoU-JkBpv4r9zDaCjtls,2070
370
370
  scout/load/hgnc_gene.py,sha256=GcSQ01CioYIshAzXAv4msIGDPjTjGBBPBnLX2GvaZJ4,4507
371
371
  scout/load/hpo.py,sha256=ZWYjV9j6OfpI-ZZuhTQVEs_xgLa7ST2KuvYLW6ku0PY,2474
372
372
  scout/load/institute.py,sha256=etmZ0CZRHOVi3f9R-wn5BK1pZPhtZwq2QYbh2RXXxDc,625
373
- scout/load/panel.py,sha256=JQqkyUdpvhFnW81n8Sq-iPahDcm1hGBzLfrwUcVqt4k,9446
373
+ scout/load/panel.py,sha256=Zxv-ZlRyk7ZWKy1p0Cod-ATh7TzKqeMbiLu5I6-VEzs,10246
374
374
  scout/load/report.py,sha256=TJvblks6Dp5-UDflWRTa8b3fe-A4bT4QnWT2yZLhfLA,820
375
375
  scout/load/setup.py,sha256=0qQgfCr53oHL626hG5y0o5vwRnJ4X0IMaTFvMBMRNQE,8183
376
376
  scout/load/transcript.py,sha256=mk0Da7GWwqLVRp2xRD9mlzqaomH9R-TL2aKCJx4fEA8,4632
@@ -671,9 +671,9 @@ scout/utils/md5.py,sha256=KkgdxOf7xbF9AF40ZjQKCgWaxFWJ9tp9RKjd8SU6IoA,649
671
671
  scout/utils/scout_requests.py,sha256=JjHOJW1XmenG05mNQ33kvOKq_IicveIfQMcPZeRcQdo,12856
672
672
  scout/utils/sort.py,sha256=1AcbeZ6vdt_UXM3BLDBa3aQmN4qxrqtskxwD19oBhvw,756
673
673
  scout/utils/track_resources.py,sha256=eUjSEe-Ff8BIb4BHPC_COkJocQO2PaWueiPz1GAuiwY,2614
674
- scout_browser-4.86.dist-info/LICENSE,sha256=TM1Y9Cqbwk55JVfxD-_bpGLtZQAeN9RovQlqHK6eOTY,1485
675
- scout_browser-4.86.dist-info/METADATA,sha256=LIrl5lLOrztC7-iyc2X-AAASuh6TvvWjA8Tvq09N4xg,14260
676
- scout_browser-4.86.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
677
- scout_browser-4.86.dist-info/entry_points.txt,sha256=q_mxFwbMFTwXRDDIRVcqKram2ubMVmvs3CSNvZri1nY,45
678
- scout_browser-4.86.dist-info/top_level.txt,sha256=qM75h71bztMaLYsxn1up4c_n2rjc_ZnyaW6Q0K5uOXc,6
679
- scout_browser-4.86.dist-info/RECORD,,
674
+ scout_browser-4.86.1.dist-info/LICENSE,sha256=TM1Y9Cqbwk55JVfxD-_bpGLtZQAeN9RovQlqHK6eOTY,1485
675
+ scout_browser-4.86.1.dist-info/METADATA,sha256=mQw8mIrZPRWvJexXxlV4DL3-tNw3gL_XJQy38ROnv20,14262
676
+ scout_browser-4.86.1.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
677
+ scout_browser-4.86.1.dist-info/entry_points.txt,sha256=q_mxFwbMFTwXRDDIRVcqKram2ubMVmvs3CSNvZri1nY,45
678
+ scout_browser-4.86.1.dist-info/top_level.txt,sha256=qM75h71bztMaLYsxn1up4c_n2rjc_ZnyaW6Q0K5uOXc,6
679
+ scout_browser-4.86.1.dist-info/RECORD,,