loqusdb 2.7.10__tar.gz → 2.7.12__tar.gz

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 (95) hide show
  1. {loqusdb-2.7.10 → loqusdb-2.7.12}/PKG-INFO +3 -2
  2. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/__init__.py +1 -1
  3. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/build_models/variant.py +9 -4
  4. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/export.py +4 -1
  5. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/load.py +10 -4
  6. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/view.py +1 -2
  7. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/load.py +6 -6
  8. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/variant.py +5 -6
  9. {loqusdb-2.7.10 → loqusdb-2.7.12}/pyproject.toml +13 -1
  10. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/commands/test_export.py +2 -2
  11. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/commands/test_identity.py +2 -5
  12. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/commands/test_view.py +6 -4
  13. {loqusdb-2.7.10 → loqusdb-2.7.12}/LICENSE +0 -0
  14. {loqusdb-2.7.10 → loqusdb-2.7.12}/README.md +0 -0
  15. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/__main__.py +0 -0
  16. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/build_models/__init__.py +0 -0
  17. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/build_models/case.py +0 -0
  18. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/build_models/profile_variant.py +0 -0
  19. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/__init__.py +0 -0
  20. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/annotate.py +0 -0
  21. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/cli.py +0 -0
  22. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/delete.py +0 -0
  23. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/identity.py +0 -0
  24. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/load_profile.py +0 -0
  25. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/migrate.py +0 -0
  26. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/restore.py +0 -0
  27. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/update.py +0 -0
  28. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/commands/wipe.py +0 -0
  29. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/constants/__init__.py +0 -0
  30. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/exceptions/__init__.py +0 -0
  31. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/exceptions/case.py +0 -0
  32. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/exceptions/profile.py +0 -0
  33. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/exceptions/vcf.py +0 -0
  34. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/log.py +0 -0
  35. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/models/__init__.py +0 -0
  36. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/models/case.py +0 -0
  37. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/models/identity.py +0 -0
  38. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/models/profile_variant.py +0 -0
  39. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/models/variant.py +0 -0
  40. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/plugins/__init__.py +0 -0
  41. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/plugins/mongo/__init__.py +0 -0
  42. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/plugins/mongo/adapter.py +0 -0
  43. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/plugins/mongo/case.py +0 -0
  44. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/plugins/mongo/profile_variant.py +0 -0
  45. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/plugins/mongo/structural_variant.py +2 -2
  46. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/plugins/mongo/variant.py +0 -0
  47. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/resources/__init__.py +0 -0
  48. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/resources/loqusdb.20181005.gz +0 -0
  49. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/resources/maf_50_sites_GRCh37.vcf.gz +0 -0
  50. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/resources/maf_50_sites_GRCh38.vcf.gz +0 -0
  51. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/__init__.py +0 -0
  52. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/annotate.py +0 -0
  53. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/case.py +0 -0
  54. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/delete.py +0 -0
  55. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/migrate.py +0 -0
  56. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/profiling.py +0 -0
  57. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/update.py +0 -0
  58. {loqusdb-2.7.10 → loqusdb-2.7.12}/loqusdb/utils/vcf.py +0 -0
  59. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/build_models/test_build_case.py +0 -0
  60. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/build_models/test_build_variant.py +0 -0
  61. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/build_models/test_is_greater.py +0 -0
  62. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/conftest.py +0 -0
  63. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/643594.clinical.SV.vcf +0 -0
  64. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/643594.clinical.vcf.gz +0 -0
  65. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/double_variant.vcf +0 -0
  66. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/funny_trio.ped +0 -0
  67. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/profile_snv.vcf +0 -0
  68. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/recessive_trio.ped +0 -0
  69. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/test.SV.vcf +0 -0
  70. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/test.vcf +0 -0
  71. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/test.vcf.gz +0 -0
  72. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/test.vcf.gz.tbi +0 -0
  73. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/fixtures/unsorted.vcf +0 -0
  74. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/functional/test_cli.py +0 -0
  75. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/plugins/mongo/test_case_operations.py +0 -0
  76. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/plugins/mongo/test_connect.py +0 -0
  77. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/plugins/mongo/test_flask_extension.py +0 -0
  78. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/plugins/mongo/test_get_sv.py +0 -0
  79. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/plugins/mongo/test_load_svs.py +0 -0
  80. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/plugins/mongo/test_variant_operations.py +0 -0
  81. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_case.py +0 -0
  82. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_delete.py +0 -0
  83. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_delete_family.py +0 -0
  84. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_delete_variant.py +0 -0
  85. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_get_family.py +0 -0
  86. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_load_database.py +0 -0
  87. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_load_family.py +0 -0
  88. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_load_variants.py +0 -0
  89. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_migrate.py +0 -0
  90. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/utils/test_profiling.py +0 -0
  91. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/vcf_tools/test_check_par.py +0 -0
  92. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/vcf_tools/test_check_vcf.py +0 -0
  93. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/vcf_tools/test_format_sv_variant.py +0 -0
  94. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/vcf_tools/test_format_variant.py +0 -0
  95. {loqusdb-2.7.10 → loqusdb-2.7.12}/tests/vcf_tools/test_vcf.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: loqusdb
3
- Version: 2.7.10
3
+ Version: 2.7.12
4
4
  Summary: A simple observation count database
5
5
  License: MIT
6
6
  Author: Your Name
@@ -9,6 +9,7 @@ Requires-Python: >=3.12,<4.0
9
9
  Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
12
13
  Requires-Dist: PyYAML
13
14
  Requires-Dist: click
14
15
  Requires-Dist: coloredlogs
@@ -4,7 +4,7 @@ from pymongo import ASCENDING, IndexModel
4
4
 
5
5
  logger = logging.getLogger(__name__)
6
6
 
7
- __version__ = "2.7.10"
7
+ __version__ = "2.7.12"
8
8
 
9
9
  INDEXES = {
10
10
  "variant": [
@@ -1,10 +1,9 @@
1
1
  import logging
2
2
  from collections import namedtuple
3
+ from typing import Optional
3
4
 
4
5
  import cyvcf2
5
6
 
6
- from typing import Optional
7
-
8
7
  from loqusdb.constants import CHROM_TO_INT, GENOTYPE_MAP, GRCH37, PAR
9
8
  from loqusdb.models import Case, Variant
10
9
 
@@ -143,7 +142,14 @@ def get_coords(variant):
143
142
  return coordinates
144
143
 
145
144
 
146
- def build_variant(variant: cyvcf2.Variant, case_obj: Case, case_id: Optional[str]=None, gq_threshold: Optional[int]=None, gq_qual: Optional[bool]=False, genome_build: Optional[str]=None) -> Variant:
145
+ def build_variant(
146
+ variant: cyvcf2.Variant,
147
+ case_obj: Case,
148
+ case_id: Optional[str] = None,
149
+ gq_threshold: Optional[int] = None,
150
+ gq_qual: Optional[bool] = False,
151
+ genome_build: Optional[str] = None,
152
+ ) -> Variant:
147
153
  """Return a Variant object
148
154
 
149
155
  Take a cyvcf2 formated variant line and return a models.Variant.
@@ -191,7 +197,6 @@ def build_variant(variant: cyvcf2.Variant, case_obj: Case, case_id: Optional[str
191
197
  else:
192
198
  found_variant = False
193
199
  for ind_obj in case_obj["individuals"]:
194
- ind_id = ind_obj["ind_id"]
195
200
  # Get the index position for the individual in the VCF
196
201
  ind_pos = ind_obj["ind_index"]
197
202
 
@@ -59,7 +59,10 @@ def export(ctx, outfile, variant_type, freq):
59
59
  head.add_meta_line("NrCases", nr_cases)
60
60
  if freq:
61
61
  head.add_info(
62
- "Frq", "1", "Float", "Observation frequency of the variant (not allele frequency)"
62
+ "Frq",
63
+ "1",
64
+ "Float",
65
+ f"Observation frequency of the variant (not allele frequency) based on {nr_cases} cases",
63
66
  )
64
67
  head.add_info("Obs", "1", "Integer", "The number of observations for the variant")
65
68
  head.add_info("Hom", "1", "Integer", "The number of observed homozygotes")
@@ -3,10 +3,10 @@ import os
3
3
  from datetime import datetime
4
4
 
5
5
  import click
6
- from loqusdb.exceptions import CaseError
7
- from loqusdb.utils.load import load_database
8
6
 
9
7
  from loqusdb.commands.cli import cli as base_command
8
+ from loqusdb.exceptions import CaseError
9
+ from loqusdb.utils.load import load_database
10
10
 
11
11
  LOG = logging.getLogger(__name__)
12
12
 
@@ -55,7 +55,13 @@ def validate_profile_threshold(ctx, param, value):
55
55
  )
56
56
  @click.option("--ensure-index", is_flag=True, help="Make sure that the indexes are in place")
57
57
  @click.option("--gq-threshold", default=20, show_default=True, help="Threshold to consider variant")
58
- @click.option("--qual-gq", is_flag=True, default=False, show_default=True, help="Use QUAL tag instead of GQ value for quality filter")
58
+ @click.option(
59
+ "--qual-gq",
60
+ is_flag=True,
61
+ default=False,
62
+ show_default=True,
63
+ help="Use QUAL tag instead of GQ value for quality filter",
64
+ )
59
65
  @click.option(
60
66
  "--max-window",
61
67
  "-m",
@@ -97,7 +103,7 @@ def load(
97
103
  check_profile,
98
104
  hard_threshold,
99
105
  soft_threshold,
100
- qual_gq
106
+ qual_gq,
101
107
  ):
102
108
  """Load the variants of a case
103
109
 
@@ -2,9 +2,9 @@
2
2
  import json
3
3
  import logging
4
4
  from pprint import pprint as pp
5
- from pymongo.cursor import Cursor
6
5
 
7
6
  import click
7
+ from pymongo.cursor import Cursor
8
8
 
9
9
  from loqusdb.commands.cli import cli as base_command
10
10
 
@@ -49,7 +49,6 @@ def cases(ctx, case_id, to_json, count, case_type):
49
49
  ctx.abort()
50
50
  cases: Cursor = adapter.cases()
51
51
 
52
-
53
52
  if to_json:
54
53
  click.echo(json.dumps(cases))
55
54
  return
@@ -11,15 +11,14 @@ import logging
11
11
 
12
12
  import click
13
13
 
14
+ from loqusdb.build_models.case import build_case
15
+ from loqusdb.build_models.profile_variant import build_profile_variant
16
+ from loqusdb.build_models.variant import build_variant
14
17
  from loqusdb.exceptions import CaseError, VcfError
15
-
16
18
  from loqusdb.utils.case import get_case, update_case
17
19
  from loqusdb.utils.delete import delete
18
20
  from loqusdb.utils.profiling import get_profiles, profile_match
19
21
  from loqusdb.utils.vcf import check_vcf, get_vcf
20
- from loqusdb.build_models.case import build_case
21
- from loqusdb.build_models.profile_variant import build_profile_variant
22
- from loqusdb.build_models.variant import build_variant
23
22
 
24
23
  LOG = logging.getLogger(__name__)
25
24
 
@@ -226,7 +225,9 @@ def load_variants(
226
225
  with click.progressbar(vcf_obj, label="Inserting variants", length=nr_variants) as bar:
227
226
 
228
227
  variants = (
229
- build_variant(variant, case_obj, case_id, gq_threshold, qual_gq, genome_build=genome_build)
228
+ build_variant(
229
+ variant, case_obj, case_id, gq_threshold, qual_gq, genome_build=genome_build
230
+ )
230
231
  for variant in bar
231
232
  )
232
233
 
@@ -258,7 +259,6 @@ def load_profile_variants(adapter, variant_file):
258
259
  """
259
260
 
260
261
  vcf_info = check_vcf(variant_file)
261
- nr_variants = vcf_info["nr_variants"]
262
262
  variant_type = vcf_info["variant_type"]
263
263
 
264
264
  if variant_type != "snv":
@@ -32,14 +32,13 @@ def format_info(variant, variant_type="snv", nr_cases=None, add_freq=False):
32
32
 
33
33
  # This is SV specific
34
34
  if variant_type == "sv":
35
- pos= int((variant["pos_left"] + variant["pos_right"]) / 2)
35
+ pos = int((variant["pos_left"] + variant["pos_right"]) / 2)
36
36
  end = int((variant["end_left"] + variant["end_right"]) / 2)
37
37
 
38
- if not variant['sv_type'] == "BND":
38
+ if not variant["sv_type"] == "BND":
39
39
  vcf_info += f";SVTYPE={variant['sv_type']};END={end};SVLEN={variant['length']}"
40
40
  else:
41
- vcf_info += f";SVTYPE=BND"
42
-
41
+ vcf_info += ";SVTYPE=BND"
43
42
 
44
43
  return vcf_info
45
44
 
@@ -63,10 +62,10 @@ def format_variant(variant, variant_type="snv", nr_cases=None, add_freq=False):
63
62
 
64
63
  if variant_type == "sv":
65
64
  pos = int((variant["pos_left"] + variant["pos_right"]) / 2)
66
- end= int((variant["end_left"] + variant["end_right"]) / 2)
65
+ end = int((variant["end_left"] + variant["end_right"]) / 2)
67
66
  ref = "N"
68
67
 
69
- if not variant['sv_type'] == "BND":
68
+ if not variant["sv_type"] == "BND":
70
69
  alt = f"<{variant['sv_type']}>"
71
70
  else:
72
71
  alt = f"N]{variant['end_chrom']}:{end}]"
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "loqusdb"
3
- version = "2.7.10"
3
+ version = "2.7.12"
4
4
  description = "A simple observation count database"
5
5
  authors = ["Your Name <you@example.com>"]
6
6
  license = "MIT"
@@ -27,6 +27,7 @@ ped_parser = "*"
27
27
  [tool.poetry.group.dev.dependencies]
28
28
  coveralls = "^3"
29
29
  mongomock = "*"
30
+ pre-commit = "*"
30
31
  pytest = "*"
31
32
  pytest-cov = "*"
32
33
 
@@ -36,3 +37,14 @@ loqusdb = "loqusdb.commands.cli:cli"
36
37
  [build-system]
37
38
  requires = ["poetry-core"]
38
39
  build-backend = "poetry.core.masonry.api"
40
+
41
+ [tool.black]
42
+ line-length = 100
43
+
44
+ [tool.isort]
45
+ profile = "black"
46
+
47
+ [tool.ruff]
48
+ line-length = 100
49
+ target-version = "py312"
50
+ ignore = ["E501"]
@@ -2,7 +2,8 @@ from click.testing import CliRunner
2
2
 
3
3
  from loqusdb.commands.cli import cli as base_command
4
4
 
5
- def test_export_base(real_db_name:str):
5
+
6
+ def test_export_base(real_db_name: str):
6
7
  """Test the base command that exports variants."""
7
8
 
8
9
  runner = CliRunner()
@@ -13,4 +14,3 @@ def test_export_base(real_db_name:str):
13
14
  ## THEN it should return success
14
15
  result = runner.invoke(base_command, command)
15
16
  assert result.exit_code == 0
16
-
@@ -2,7 +2,8 @@ from click.testing import CliRunner
2
2
 
3
3
  from loqusdb.commands.cli import cli as base_command
4
4
 
5
- def test_identity(real_db_name:str):
5
+
6
+ def test_identity(real_db_name: str):
6
7
  """Test the SV identity base command."""
7
8
 
8
9
  runner = CliRunner()
@@ -16,7 +17,3 @@ def test_identity(real_db_name:str):
16
17
 
17
18
  # AND no variant found message
18
19
  assert "No hits for variant" in result.output
19
-
20
-
21
-
22
-
@@ -1,8 +1,10 @@
1
1
  from click.testing import CliRunner
2
- from loqusdb.plugins.mongo.adapter import MongoAdapter
2
+
3
3
  from loqusdb.commands.cli import cli as base_command
4
+ from loqusdb.plugins.mongo.adapter import MongoAdapter
5
+
4
6
 
5
- def test_view_cases_base(real_mongo_adapter: MongoAdapter, real_db_name:str):
7
+ def test_view_cases_base(real_mongo_adapter: MongoAdapter, real_db_name: str):
6
8
  """Test the base command that returns database cases."""
7
9
 
8
10
  ## GIVEN an empty database
@@ -11,7 +13,7 @@ def test_view_cases_base(real_mongo_adapter: MongoAdapter, real_db_name:str):
11
13
  runner = CliRunner()
12
14
 
13
15
  # THEN the case command should return No cases found error
14
- command = ["--database", real_db_name, "cases" ]
16
+ command = ["--database", real_db_name, "cases"]
15
17
  result = runner.invoke(base_command, command)
16
18
  assert result.exit_code == 1
17
- assert "No cases found in database" in result.output
19
+ assert "No cases found in database" in result.output
File without changes
File without changes
File without changes
File without changes
@@ -1,8 +1,9 @@
1
1
  import logging
2
2
 
3
- from loqusdb.models import Identity
4
3
  from pymongo import ASCENDING
5
4
 
5
+ from loqusdb.models import Identity
6
+
6
7
  LOG = logging.getLogger(__name__)
7
8
 
8
9
 
@@ -175,7 +176,6 @@ class SVMixin:
175
176
  self.db.identity.delete_one(dict(identity_obj))
176
177
 
177
178
  def _update_sv_metrics(self, sv_type, pos_mean, end_mean, max_window):
178
-
179
179
  """
180
180
  calculates cluster length, and interval size for SV based on
181
181
  mean start position and mean end position.
File without changes
File without changes
File without changes