scout-browser 4.83__py3-none-any.whl → 4.84__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.
Files changed (47) hide show
  1. scout/__version__.py +1 -1
  2. scout/adapter/mongo/case.py +5 -1
  3. scout/adapter/mongo/variant.py +9 -0
  4. scout/adapter/mongo/variant_loader.py +73 -71
  5. scout/build/genes/hgnc_gene.py +5 -134
  6. scout/commands/download/ensembl.py +1 -0
  7. scout/commands/download/everything.py +1 -0
  8. scout/commands/download/exac.py +1 -0
  9. scout/commands/download/hgnc.py +1 -0
  10. scout/commands/download/hpo.py +1 -0
  11. scout/commands/download/omim.py +1 -0
  12. scout/commands/export/database.py +1 -0
  13. scout/commands/load/panel.py +1 -0
  14. scout/commands/load/report.py +1 -0
  15. scout/commands/update/omim.py +1 -0
  16. scout/commands/update/panelapp.py +1 -0
  17. scout/constants/file_types.py +86 -17
  18. scout/export/exon.py +1 -0
  19. scout/load/all.py +5 -1
  20. scout/load/hgnc_gene.py +1 -1
  21. scout/models/hgnc_map.py +50 -87
  22. scout/models/phenotype_term.py +3 -3
  23. scout/parse/orpha.py +1 -0
  24. scout/parse/variant/conservation.py +1 -0
  25. scout/server/blueprints/cases/templates/cases/case.html +95 -88
  26. scout/server/blueprints/panels/forms.py +1 -0
  27. scout/server/blueprints/variant/controllers.py +9 -14
  28. scout/server/blueprints/variants/controllers.py +11 -27
  29. scout/server/extensions/bionano_extension.py +1 -0
  30. scout/server/extensions/chanjo_extension.py +10 -9
  31. scout/server/extensions/gens_extension.py +1 -0
  32. scout/server/extensions/ldap_extension.py +5 -3
  33. scout/server/extensions/loqus_extension.py +16 -14
  34. scout/server/extensions/matchmaker_extension.py +1 -0
  35. scout/server/extensions/mongo_extension.py +1 -0
  36. scout/server/extensions/rerunner_extension.py +1 -0
  37. scout/server/links.py +4 -4
  38. scout/server/static/bs_styles.css +5 -5
  39. scout/utils/ensembl_rest_clients.py +1 -0
  40. scout/utils/scout_requests.py +1 -0
  41. scout/utils/sort.py +21 -0
  42. {scout_browser-4.83.dist-info → scout_browser-4.84.dist-info}/METADATA +2 -5
  43. {scout_browser-4.83.dist-info → scout_browser-4.84.dist-info}/RECORD +47 -46
  44. {scout_browser-4.83.dist-info → scout_browser-4.84.dist-info}/WHEEL +1 -1
  45. {scout_browser-4.83.dist-info → scout_browser-4.84.dist-info}/entry_points.txt +0 -1
  46. {scout_browser-4.83.dist-info → scout_browser-4.84.dist-info}/LICENSE +0 -0
  47. {scout_browser-4.83.dist-info → scout_browser-4.84.dist-info}/top_level.txt +0 -0
scout/__version__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "4.83"
1
+ __version__ = "4.84"
@@ -14,6 +14,7 @@ from scout.constants import ACMG_MAP, FILE_TYPE_MAP, ID_PROJECTION
14
14
  from scout.exceptions import ConfigError, IntegrityError
15
15
  from scout.parse.variant.ids import parse_document_id
16
16
  from scout.utils.algorithms import ui_score
17
+ from scout.utils.sort import get_load_priority
17
18
 
18
19
  LOG = logging.getLogger(__name__)
19
20
 
@@ -904,7 +905,10 @@ class CaseHandler(object):
904
905
  continue
905
906
  load_variants.add((vcf_file["variant_type"], vcf_file["category"]))
906
907
 
907
- for variant_type, category in load_variants:
908
+ for variant_type, category in sorted(
909
+ load_variants,
910
+ key=lambda tup: get_load_priority(variant_type=tup[0], category=tup[1]),
911
+ ):
908
912
  if update:
909
913
  self.delete_variants(
910
914
  case_id=case_obj["_id"],
@@ -2,6 +2,7 @@
2
2
  # stdlib modules
3
3
  import logging
4
4
  import re
5
+ from typing import Any
5
6
 
6
7
  # Third party modules
7
8
  import pymongo
@@ -221,6 +222,14 @@ class VariantHandler(VariantLoader):
221
222
  query = self.build_query(case_id, query=query, variant_ids=variant_ids, category=category)
222
223
  return self.variant_collection.count_documents(query)
223
224
 
225
+ def variant_update_field(self, variant_id: str, field_name: str, field_value: Any) -> dict:
226
+ """Updates the value of the given key(field_name) in the variant document in the database."""
227
+ return self.variant_collection.find_one_and_update(
228
+ {"_id": variant_id},
229
+ {"$set": {field_name: field_value}},
230
+ return_document=pymongo.ReturnDocument.AFTER,
231
+ )
232
+
224
233
  def variant(
225
234
  self,
226
235
  document_id=None,
@@ -27,6 +27,7 @@ from scout.parse.variant.headers import (
27
27
  from scout.parse.variant.ids import parse_simple_id
28
28
  from scout.parse.variant.managed_variant import parse_managed_variant_id
29
29
  from scout.parse.variant.rank_score import parse_rank_score
30
+ from scout.utils.sort import get_load_priority
30
31
 
31
32
  LOG = logging.getLogger(__name__)
32
33
 
@@ -200,87 +201,88 @@ class VariantLoader(object):
200
201
  """
201
202
 
202
203
  case_id = case_obj["_id"]
203
- # Possible categories 'snv', 'sv', 'str', 'cancer', 'cancer_sv':
204
- categories = set()
205
- # Possible variant types 'clinical', 'research':
206
- variant_types = set()
207
-
208
- for file_type in FILE_TYPE_MAP:
209
- if case_obj.get("vcf_files", {}).get(file_type):
210
- categories.add(FILE_TYPE_MAP[file_type]["category"])
211
- variant_types.add(FILE_TYPE_MAP[file_type]["variant_type"])
204
+ # Possible categories 'snv', 'sv', 'str', 'cancer', 'cancer_sv'. Sort according to load order to ensure Cancer SNVs before
205
+ # Cancer SVs, in particular, and keep a consistent variant_id collision resolution order.
206
+ # Possible variant types are 'clinical', 'research'.
207
+ load_variants = {
208
+ (FILE_TYPE_MAP[file_type]["variant_type"], FILE_TYPE_MAP[file_type]["category"])
209
+ for file_type in FILE_TYPE_MAP
210
+ if case_obj.get("vcf_files", {}).get(file_type)
211
+ }
212
212
 
213
213
  coding_intervals = self.get_coding_intervals(build=build)
214
214
  # Loop over all intervals
215
215
  for chrom in CHROMOSOMES:
216
216
  intervals = coding_intervals.get(chrom, IntervalTree())
217
- for var_type in variant_types:
218
- for category in categories:
219
- LOG.info(
220
- "Updating compounds on chromosome:{0}, type:{1}, category:{2} for case:{3}".format(
221
- chrom, var_type, category, case_id
222
- )
217
+ for var_type, category in sorted(
218
+ list(load_variants),
219
+ key=lambda tup: get_load_priority(variant_type=tup[0], category=tup[1]),
220
+ ):
221
+ LOG.info(
222
+ "Updating compounds on chromosome:{0}, type:{1}, category:{2} for case:{3}".format(
223
+ chrom, var_type, category, case_id
223
224
  )
225
+ )
226
+
227
+ # Fetch all variants from a chromosome
228
+ query = {"variant_type": var_type, "chrom": chrom}
229
+
230
+ # Get all variants from the database of the specific type
231
+ variant_objs = self.variants(
232
+ case_id=case_id,
233
+ query=query,
234
+ category=category,
235
+ nr_of_variants=-1,
236
+ sort_key="position",
237
+ )
238
+
239
+ # Initiate a bulk
240
+ bulk = {}
241
+ current_region = None
242
+ special = False
224
243
 
225
- # Fetch all variants from a chromosome
226
- query = {"variant_type": var_type, "chrom": chrom}
244
+ # Loop over the variants and check if they are in a coding region
245
+ for var_obj in variant_objs:
246
+ var_id = var_obj["_id"]
247
+ var_chrom = var_obj["chromosome"]
248
+ var_start = var_obj["position"]
249
+ var_end = var_obj["end"] + 1
227
250
 
228
- # Get all variants from the database of the specific type
229
- variant_objs = self.variants(
230
- case_id=case_id,
231
- query=query,
232
- category=category,
233
- nr_of_variants=-1,
234
- sort_key="position",
251
+ update_bulk = True
252
+ new_region = None
253
+
254
+ # Check if the variant is in a coding region
255
+ genomic_regions = coding_intervals.get(var_chrom, IntervalTree()).overlap(
256
+ var_start, var_end
235
257
  )
236
258
 
237
- # Initiate a bulk
238
- bulk = {}
239
- current_region = None
240
- special = False
241
-
242
- # Loop over the variants and check if they are in a coding region
243
- for var_obj in variant_objs:
244
- var_id = var_obj["_id"]
245
- var_chrom = var_obj["chromosome"]
246
- var_start = var_obj["position"]
247
- var_end = var_obj["end"] + 1
248
-
249
- update_bulk = True
250
- new_region = None
251
-
252
- # Check if the variant is in a coding region
253
- genomic_regions = coding_intervals.get(var_chrom, IntervalTree()).overlap(
254
- var_start, var_end
255
- )
256
-
257
- # If the variant is in a coding region
258
- if genomic_regions:
259
- # We know there is data here so get the interval id
260
- new_region = genomic_regions.pop().data
261
-
262
- if new_region and (new_region == current_region):
263
- # If the variant is in the same region as previous
264
- # we add it to the same bulk
265
- update_bulk = False
266
-
267
- current_region = new_region
268
-
269
- # If the variant is not in a current region we update the compounds
270
- # from the previous region, if any. Otherwise continue
271
- if update_bulk and bulk:
272
- self.update_compounds(bulk)
273
- self.update_mongo_compound_variants(bulk)
274
- bulk = {}
275
-
276
- if new_region:
277
- bulk[var_id] = var_obj
278
-
279
- if not bulk:
280
- continue
281
-
282
- self.update_compounds(bulk)
283
- self.update_mongo_compound_variants(bulk)
259
+ # If the variant is in a coding region
260
+ if genomic_regions:
261
+ # We know there is data here so get the interval id
262
+ new_region = genomic_regions.pop().data
263
+
264
+ if new_region and (new_region == current_region):
265
+ # If the variant is in the same region as previous
266
+ # we add it to the same bulk
267
+ update_bulk = False
268
+
269
+ current_region = new_region
270
+
271
+ # If the variant is not in a current region we update the compounds
272
+ # from the previous region, if any. Otherwise continue
273
+ if update_bulk and bulk:
274
+ self.update_compounds(bulk)
275
+ self.update_mongo_compound_variants(bulk)
276
+ bulk = {}
277
+
278
+ if new_region:
279
+ bulk[var_id] = var_obj
280
+
281
+ if not bulk:
282
+ continue
283
+
284
+ self.update_compounds(bulk)
285
+ self.update_mongo_compound_variants(bulk)
284
286
 
285
287
  LOG.info("All compounds updated")
286
288
 
@@ -1,6 +1,5 @@
1
1
  import logging
2
2
 
3
- from scout.constants import GENE_CONSTRAINT_LABELS
4
3
  from scout.models.hgnc_map import HgncGene
5
4
 
6
5
  LOG = logging.getLogger(__name__)
@@ -16,137 +15,9 @@ def build_phenotype(phenotype_info):
16
15
  return phenotype_obj
17
16
 
18
17
 
19
- def build_hgnc_gene(gene_info, build="37"):
20
- """Build a hgnc_gene object
18
+ def build_hgnc_gene(gene_info: dict, build: bool = "37") -> dict:
19
+ """Build a HGNC gene object"""
21
20
 
22
- Args:
23
- gene_info(dict): Gene information
24
-
25
- Returns:
26
- gene_obj(dict)
27
-
28
- {
29
- '_id': ObjectId(),
30
- # This is the hgnc id, required:
31
- 'hgnc_id': int,
32
- # The primary symbol, required
33
- 'hgnc_symbol': str,
34
- 'ensembl_id': str, # required
35
- 'build': str, # '37' or '38', defaults to '37', required
36
-
37
- 'chromosome': str, # required
38
- 'start': int, # required
39
- 'end': int, # required
40
-
41
- 'description': str, # Gene description
42
- 'aliases': list(), # Gene symbol aliases, includes hgnc_symbol, str
43
- 'entrez_id': int,
44
- 'omim_id': int,
45
- 'pli_score': float,
46
- 'primary_transcripts': list(), # List of refseq transcripts (str)
47
- 'ucsc_id': str,
48
- 'uniprot_ids': list(), # List of str
49
- 'vega_id': str,
50
- 'transcripts': list(), # List of hgnc_transcript
51
-
52
- # Inheritance information
53
- 'inheritance_models': list(), # List of model names
54
- 'incomplete_penetrance': bool, # Acquired from HPO
55
-
56
- # Phenotype information
57
- 'phenotypes': list(), # List of dictionaries with phenotype information
58
- }
59
- """
60
- try:
61
- hgnc_id = int(gene_info["hgnc_id"])
62
- except KeyError as err:
63
- raise KeyError("Gene has to have a hgnc_id")
64
- except ValueError as err:
65
- raise ValueError("hgnc_id has to be integer")
66
-
67
- try:
68
- hgnc_symbol = gene_info["hgnc_symbol"]
69
- except KeyError as err:
70
- raise KeyError("Gene has to have a hgnc_symbol")
71
-
72
- try:
73
- ensembl_id = gene_info["ensembl_gene_id"]
74
- except KeyError as err:
75
- raise KeyError("Gene has to have a ensembl_id")
76
-
77
- try:
78
- chromosome = gene_info["chromosome"]
79
- except KeyError as err:
80
- raise KeyError("Gene has to have a chromosome")
81
-
82
- try:
83
- start = int(gene_info["start"])
84
- except KeyError as err:
85
- raise KeyError("Gene has to have a start position")
86
- except TypeError as err:
87
- raise TypeError("Gene start has to be a integer")
88
-
89
- try:
90
- end = int(gene_info["end"])
91
- except KeyError as err:
92
- raise KeyError("Gene has to have a end position")
93
- except TypeError as err:
94
- raise TypeError("Gene end has to be a integer")
95
-
96
- gene_obj = HgncGene(
97
- hgnc_id=hgnc_id,
98
- hgnc_symbol=hgnc_symbol,
99
- ensembl_id=ensembl_id,
100
- chrom=chromosome,
101
- start=start,
102
- end=end,
103
- build=build,
104
- )
105
-
106
- if gene_info.get("description"):
107
- gene_obj["description"] = gene_info["description"]
108
- # LOG.debug("Adding info %s", gene_info['description'])
109
-
110
- if gene_info.get("previous_symbols"):
111
- gene_obj["aliases"] = gene_info["previous_symbols"]
112
-
113
- if gene_info.get("entrez_id"):
114
- gene_obj["entrez_id"] = int(gene_info["entrez_id"])
115
-
116
- if gene_info.get("omim_id"):
117
- gene_obj["omim_id"] = int(gene_info["omim_id"])
118
-
119
- for constraint in GENE_CONSTRAINT_LABELS.keys():
120
- if gene_info.get(constraint):
121
- gene_obj[constraint] = float(gene_info[constraint])
122
-
123
- if gene_info.get("ref_seq"):
124
- gene_obj["primary_transcripts"] = gene_info["ref_seq"]
125
-
126
- if gene_info.get("ucsc_id"):
127
- gene_obj["ucsc_id"] = gene_info["ucsc_id"]
128
-
129
- if gene_info.get("uniprot_ids"):
130
- gene_obj["uniprot_ids"] = gene_info["uniprot_ids"]
131
-
132
- if gene_info.get("vega_id"):
133
- gene_obj["vega_id"] = gene_info["vega_id"]
134
-
135
- if gene_info.get("incomplete_penetrance"):
136
- gene_obj["incomplete_penetrance"] = True
137
-
138
- if gene_info.get("inheritance_models"):
139
- gene_obj["inheritance_models"] = gene_info["inheritance_models"]
140
-
141
- phenotype_objs = []
142
- for phenotype_info in gene_info.get("phenotypes", []):
143
- phenotype_objs.append(build_phenotype(phenotype_info))
144
-
145
- if phenotype_objs:
146
- gene_obj["phenotypes"] = phenotype_objs
147
-
148
- for key in list(gene_obj):
149
- if gene_obj[key] is None:
150
- gene_obj.pop(key)
151
-
152
- return gene_obj
21
+ gene_info["build"] = build
22
+ hgnc_gene = HgncGene(**gene_info)
23
+ return hgnc_gene.model_dump(exclude_none=True)
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of ensembl files used by scout from CLI"""
2
+
2
3
  import logging
3
4
  import pathlib
4
5
  from typing import List, Optional
@@ -1,6 +1,7 @@
1
1
  """Code for handling downloading Download all necessary resources for scout used by scout from
2
2
  CLI
3
3
  """
4
+
4
5
  import logging
5
6
  import pathlib
6
7
 
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of the ExAC genes file used by scout from CLI"""
2
+
2
3
  import logging
3
4
  import pathlib
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of HPO files used by scout from CLI"""
2
+
2
3
  import logging
3
4
  import pathlib
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of HPO files used by scout from CLI"""
2
+
2
3
  import logging
3
4
  import pathlib
4
5
 
@@ -1,4 +1,5 @@
1
1
  """Code for handling downloading of HPO files used by scout from CLI"""
2
+
2
3
  import logging
3
4
  from pathlib import Path
4
5
  from typing import Dict
@@ -3,6 +3,7 @@
3
3
  Since the variants collection is very large this dump will be optional.
4
4
 
5
5
  """
6
+
6
7
  import logging
7
8
  import subprocess
8
9
  from subprocess import CalledProcessError
@@ -1,4 +1,5 @@
1
1
  """Code for scout load panel CLI functionality"""
2
+
2
3
  import logging
3
4
 
4
5
  import click
@@ -1,4 +1,5 @@
1
1
  """Code for updating reports"""
2
+
2
3
  import logging
3
4
 
4
5
  import click
@@ -1,4 +1,5 @@
1
1
  """Code to handle updates of the OMIM-AUTO gene panel via scout CLI"""
2
+
2
3
  import logging
3
4
 
4
5
  import click
@@ -1,4 +1,5 @@
1
1
  """Code to handle updates of the PANELAPP-GREEN gene panel via scout CLI"""
2
+
2
3
  import logging
3
4
 
4
5
  import click
@@ -1,21 +1,90 @@
1
1
  # Collect general information about the file types used in Scout
2
+ # Load priority determines load order, with lowest value loaded first.
2
3
 
3
4
  FILE_TYPE_MAP = {
4
- "vcf_cancer": {"category": "cancer", "variant_type": "clinical"},
5
- "vcf_cancer_sv": {"category": "cancer_sv", "variant_type": "clinical"},
6
- "vcf_cancer_research": {"category": "cancer", "variant_type": "research"},
7
- "vcf_cancer_sv_research": {"category": "cancer_sv", "variant_type": "research"},
8
- "vcf_fusion": {"category": "fusion", "variant_type": "clinical"},
9
- "vcf_fusion_research": {"category": "fusion", "variant_type": "research"},
10
- "vcf_snv": {"category": "snv", "variant_type": "clinical"},
11
- "vcf_snv_mt": {"category": "snv", "variant_type": "clinical"},
12
- "vcf_snv_research": {"category": "snv", "variant_type": "research"},
13
- "vcf_snv_research_mt": {"category": "snv", "variant_type": "research"},
14
- "vcf_sv": {"category": "sv", "variant_type": "clinical"},
15
- "vcf_sv_mt": {"category": "sv", "variant_type": "clinical"},
16
- "vcf_sv_research": {"category": "sv", "variant_type": "research"},
17
- "vcf_sv_research_mt": {"category": "sv", "variant_type": "research"},
18
- "vcf_str": {"category": "str", "variant_type": "clinical"},
19
- "vcf_mei": {"category": "mei", "variant_type": "clinical"},
20
- "vcf_mei_research": {"category": "mei", "variant_type": "research"},
5
+ "vcf_cancer": {
6
+ "category": "cancer",
7
+ "variant_type": "clinical",
8
+ "load_priority": 10,
9
+ },
10
+ "vcf_cancer_research": {
11
+ "category": "cancer",
12
+ "variant_type": "research",
13
+ "load_priority": 110,
14
+ },
15
+ "vcf_cancer_sv": {
16
+ "category": "cancer_sv",
17
+ "variant_type": "clinical",
18
+ "load_priority": 20,
19
+ },
20
+ "vcf_cancer_sv_research": {
21
+ "category": "cancer_sv",
22
+ "variant_type": "research",
23
+ "load_priority": 120,
24
+ },
25
+ "vcf_fusion": {
26
+ "category": "fusion",
27
+ "variant_type": "clinical",
28
+ "load_priority": 70,
29
+ },
30
+ "vcf_fusion_research": {
31
+ "category": "fusion",
32
+ "variant_type": "research",
33
+ "load_priority": 170,
34
+ },
35
+ "vcf_mei": {
36
+ "category": "mei",
37
+ "variant_type": "clinical",
38
+ "load_priority": 60,
39
+ },
40
+ "vcf_mei_research": {
41
+ "category": "mei",
42
+ "variant_type": "research",
43
+ "load_priority": 160,
44
+ },
45
+ "vcf_snv": {
46
+ "category": "snv",
47
+ "variant_type": "clinical",
48
+ "load_priority": 35,
49
+ },
50
+ "vcf_snv_mt": {
51
+ "category": "snv",
52
+ "variant_type": "clinical",
53
+ "load_priority": 30,
54
+ },
55
+ "vcf_snv_research": {
56
+ "category": "snv",
57
+ "variant_type": "research",
58
+ "load_priority": 135,
59
+ },
60
+ "vcf_snv_research_mt": {
61
+ "category": "snv",
62
+ "variant_type": "research",
63
+ "load_priority": 130,
64
+ },
65
+ "vcf_sv": {
66
+ "category": "sv",
67
+ "variant_type": "clinical",
68
+ "load_priority": 45,
69
+ },
70
+ "vcf_sv_mt": {
71
+ "category": "sv",
72
+ "variant_type": "clinical",
73
+ "load_priority": 40,
74
+ },
75
+ "vcf_sv_research": {
76
+ "category": "sv",
77
+ "variant_type": "research",
78
+ "load_priority": 145,
79
+ },
80
+ "vcf_sv_research_mt": {
81
+ "category": "sv",
82
+ "variant_type": "research",
83
+ "load_priority": 140,
84
+ },
85
+ "vcf_str": {
86
+ "category": "str",
87
+ "variant_type": "clinical",
88
+ "load_priority": 50,
89
+ },
21
90
  }
scout/export/exon.py CHANGED
@@ -11,6 +11,7 @@ head develop/mip_references/grch37_scout_exons_-2017-01-.bed
11
11
  7 65413656 65413769 7-65413658-65413767 NM_173517 21492 VKORC1L1
12
12
  5 159776172 159776790 5-159776174-159776788 NM_031908 14325 C1QTNF2
13
13
  """
14
+
14
15
  import logging
15
16
 
16
17
  LOG = logging.getLogger(__name__)
scout/load/all.py CHANGED
@@ -3,6 +3,7 @@ import logging
3
3
 
4
4
  from scout.constants import FILE_TYPE_MAP
5
5
  from scout.exceptions.config import ConfigError
6
+ from scout.utils.sort import get_load_priority
6
7
 
7
8
  LOG = logging.getLogger(__name__)
8
9
 
@@ -62,7 +63,10 @@ def load_region(adapter, case_id, hgnc_id=None, chrom=None, start=None, end=None
62
63
  (FILE_TYPE_MAP[file_type]["variant_type"], FILE_TYPE_MAP[file_type]["category"])
63
64
  )
64
65
 
65
- for variant_type, category in case_file_types:
66
+ for variant_type, category in sorted(
67
+ case_file_types,
68
+ key=lambda tup: get_load_priority(variant_type=tup[0], category=tup[1]),
69
+ ):
66
70
  if variant_type == "research" and not case_obj["is_research"]:
67
71
  continue
68
72
 
scout/load/hgnc_gene.py CHANGED
@@ -91,7 +91,7 @@ def load_hgnc_genes(
91
91
  gene_objects.append(gene_obj)
92
92
 
93
93
  LOG.info("Nr of genes without coordinates in build %s: %s", build, non_existing)
94
- LOG.info(f"Loading {len(gene_objects)} genes to database")
94
+ LOG.info(f"Loading {len(gene_objects)} genes into the database")
95
95
  adapter.load_hgnc_bulk(gene_objects)
96
96
 
97
97
  LOG.info("Loading done. %s genes loaded", len(gene_objects))