Skip to content

Commit 0c1b391

Browse files
authored
Merge pull request #455 from VariantEffect/release-2025.2.0
Release 2025.2.0
2 parents cbacd63 + d8f3b37 commit 0c1b391

File tree

121 files changed

+11530
-5082
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+11530
-5082
lines changed

.github/workflows/run-tests-on-push.yml

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,23 @@ env:
66
LOG_CONFIG: test
77

88
jobs:
9+
run-tests-3_9-core-dependencies:
10+
runs-on: ubuntu-latest
11+
name: Pytest on Core Dependencies-- Python 3.9
12+
steps:
13+
- uses: actions/checkout@v4
14+
- uses: actions/setup-python@v5
15+
with:
16+
python-version: "3.9"
17+
cache: 'pip'
18+
- run: pip install --upgrade pip
19+
- run: pip install poetry
20+
- run: poetry install --with dev
21+
- run: poetry run pytest tests/
22+
923
run-tests-3_9:
10-
runs-on: ubuntu-20.04
11-
name: Pytest on Python 3.9 / Ubuntu 20.04
24+
runs-on: ubuntu-latest
25+
name: Pytest on Optional Dependencies-- Python 3.9
1226
steps:
1327
- uses: actions/checkout@v4
1428
- uses: actions/setup-python@v5
@@ -20,9 +34,23 @@ jobs:
2034
- run: poetry install --with dev --extras server
2135
- run: poetry run pytest tests/ --show-capture=stdout --cov=src
2236

37+
run-tests-3_10-core-dependencies:
38+
runs-on: ubuntu-latest
39+
name: Pytest on Core Dependencies-- Python 3.10
40+
steps:
41+
- uses: actions/checkout@v4
42+
- uses: actions/setup-python@v5
43+
with:
44+
python-version: "3.10"
45+
cache: 'pip'
46+
- run: pip install --upgrade pip
47+
- run: pip install poetry
48+
- run: poetry install --with dev
49+
- run: poetry run pytest tests/
50+
2351
run-tests-3_10:
2452
runs-on: ubuntu-latest
25-
name: Pytest on Python 3.10
53+
name: Pytest on Optional Dependencies-- Python 3.10
2654
steps:
2755
- uses: actions/checkout@v4
2856
- uses: actions/setup-python@v5
@@ -34,9 +62,23 @@ jobs:
3462
- run: poetry install --with dev --extras server
3563
- run: poetry run pytest tests/ --show-capture=stdout --cov=src
3664

65+
run-tests-3_11-core-dependencies:
66+
runs-on: ubuntu-latest
67+
name: Pytest on Core Dependencies-- Python 3.11
68+
steps:
69+
- uses: actions/checkout@v4
70+
- uses: actions/setup-python@v5
71+
with:
72+
python-version: "3.11"
73+
cache: 'pip'
74+
- run: pip install --upgrade pip
75+
- run: pip install poetry
76+
- run: poetry install --with dev
77+
- run: poetry run pytest tests/
78+
3779
run-tests-3_11:
3880
runs-on: ubuntu-latest
39-
name: Pytest on Python 3.11
81+
name: Pytest on Optional Dependencies-- Python 3.11
4082
steps:
4183
- uses: actions/checkout@v4
4284
- uses: actions/setup-python@v5
@@ -50,7 +92,7 @@ jobs:
5092

5193
run-mypy-3_10:
5294
runs-on: ubuntu-latest
53-
name: MyPy checks on Python 3.10
95+
name: MyPy on Full Codebase-- Python 3.10
5496
steps:
5597
- uses: actions/checkout@v4
5698
- uses: actions/setup-python@v5
@@ -64,7 +106,7 @@ jobs:
64106

65107
run-ruff-lint:
66108
runs-on: ubuntu-latest
67-
name: Ruff linting on Python 3.10
109+
name: Ruff on Full Codebase-- Python 3.10
68110
steps:
69111
- uses: actions/checkout@v4
70112
- uses: actions/setup-python@v5

Dockerfile

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# python-base
33
# Set up shared environment variables
44
################################
5-
FROM python:3.9 as python-base
5+
FROM python:3.9 AS python-base
66

77
# Poetry
88
# https://python-poetry.org/docs/configuration/#using-environment-variables
@@ -69,7 +69,7 @@ RUN samtools faidx GCF_000001405.39_GRCh38.p13_genomic.fna.gz
6969
# builder
7070
# Builds application dependencies and creates venv
7171
################################
72-
FROM python-base as builder
72+
FROM python-base AS builder
7373

7474
WORKDIR /code
7575

@@ -90,7 +90,7 @@ COPY src/mavedb/server_main.py /code/main.py
9090
# worker
9191
# Worker image
9292
################################
93-
FROM builder as worker
93+
FROM builder AS worker
9494
COPY --from=downloader /data /data
9595

9696
# copy pre-built poetry + venv
@@ -103,7 +103,7 @@ CMD ["arq", "mavedb.worker.WorkerSettings"]
103103
# application
104104
# Application image
105105
################################
106-
FROM builder as application
106+
FROM builder AS application
107107
COPY --from=downloader /data /data
108108

109109
# copy pre-built poetry + venv
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
"""clinvar variant table
2+
3+
Revision ID: 34026092c7f8
4+
Revises: e8a3b5d8f885
5+
Create Date: 2025-01-28 21:48:42.532346
6+
7+
"""
8+
9+
from alembic import op
10+
import sqlalchemy as sa
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = "34026092c7f8"
15+
down_revision = "e8a3b5d8f885"
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
# ### commands auto generated by Alembic - please adjust! ###
22+
op.create_table(
23+
"clinvar_variants",
24+
sa.Column("id", sa.Integer(), nullable=False),
25+
sa.Column("allele_id", sa.Integer(), nullable=False),
26+
sa.Column("gene_symbol", sa.String(), nullable=False),
27+
sa.Column("clinical_significance", sa.String(), nullable=False),
28+
sa.Column("clinical_review_status", sa.String(), nullable=False),
29+
sa.Column("clinvar_db_version", sa.String(), nullable=False),
30+
sa.Column("creation_date", sa.Date(), nullable=False),
31+
sa.Column("modification_date", sa.Date(), nullable=False),
32+
sa.PrimaryKeyConstraint("id"),
33+
)
34+
op.create_index(op.f("ix_clinvar_variants_allele_id"), "clinvar_variants", ["allele_id"], unique=False)
35+
op.add_column("mapped_variants", sa.Column("clinvar_variant_id", sa.Integer(), nullable=True))
36+
op.create_index(
37+
op.f("ix_mapped_variants_clinvar_variant_id"), "mapped_variants", ["clinvar_variant_id"], unique=False
38+
)
39+
op.create_foreign_key(
40+
"mapped_variant_clinvar_variant_id_foreign_key_constraint",
41+
"mapped_variants",
42+
"clinvar_variants",
43+
["clinvar_variant_id"],
44+
["id"],
45+
)
46+
# ### end Alembic commands ###
47+
48+
49+
def downgrade():
50+
# ### commands auto generated by Alembic - please adjust! ###
51+
op.drop_constraint(
52+
"mapped_variant_clinvar_variant_id_foreign_key_constraint", "mapped_variants", type_="foreignkey"
53+
)
54+
op.drop_index(op.f("ix_mapped_variants_clinvar_variant_id"), table_name="mapped_variants")
55+
op.drop_column("mapped_variants", "clinvar_variant_id")
56+
op.drop_index(op.f("ix_clinvar_variants_allele_id"), table_name="clinvar_variants")
57+
op.drop_table("clinvar_variants")
58+
# ### end Alembic commands ###
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
"""genericize clinvar variants table
2+
3+
Revision ID: 695b73abe581
4+
Revises: 34026092c7f8
5+
Create Date: 2025-02-18 11:54:15.243078
6+
7+
"""
8+
9+
from alembic import op
10+
import sqlalchemy as sa
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = "695b73abe581"
15+
down_revision = "34026092c7f8"
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
op.rename_table("clinvar_variants", "clinical_controls")
22+
op.execute("ALTER SEQUENCE clinvar_variants_id_seq RENAME TO clinical_controls_id_seq")
23+
op.execute("ALTER INDEX clinvar_variants_pkey RENAME TO clinical_controls_pkey")
24+
25+
op.alter_column("clinical_controls", "clinvar_db_version", nullable=False, new_column_name="db_version")
26+
op.alter_column("clinical_controls", "allele_id", nullable=False, new_column_name="db_identifier")
27+
op.add_column("clinical_controls", sa.Column("db_name", sa.String(), nullable=True))
28+
29+
op.create_index("ix_clinical_controls_gene_symbol", "clinical_controls", ["gene_symbol"])
30+
op.create_index("ix_clinical_controls_db_name", "clinical_controls", ["db_name"])
31+
op.create_index("ix_clinical_controls_db_identifier", "clinical_controls", ["db_identifier"])
32+
op.create_index("ix_clinical_controls_db_version", "clinical_controls", ["db_version"])
33+
34+
op.create_table(
35+
"mapped_variants_clinical_controls",
36+
sa.Column("mapped_variant_id", sa.Integer(), nullable=False),
37+
sa.Column("clinical_control_id", sa.Integer(), nullable=False),
38+
sa.ForeignKeyConstraint(
39+
["mapped_variant_id"],
40+
["mapped_variants.id"],
41+
),
42+
sa.ForeignKeyConstraint(
43+
["clinical_control_id"],
44+
["clinical_controls.id"],
45+
),
46+
sa.PrimaryKeyConstraint("mapped_variant_id", "clinical_control_id"),
47+
)
48+
49+
# Convert any existing ClinVar variants into clinical control variants. Since
50+
# this table is being update from a clinvar specific table, we assume all existing
51+
# controls are from ClinVar.
52+
op.execute(
53+
"""
54+
INSERT INTO mapped_variants_clinical_controls (
55+
mapped_variant_id,
56+
clinical_control_id
57+
)
58+
SELECT id, clinvar_variant_id
59+
FROM mapped_variants
60+
WHERE clinvar_variant_id IS NOT NULL
61+
"""
62+
)
63+
64+
op.execute("UPDATE clinical_controls SET db_name='ClinVar'")
65+
op.alter_column("clinical_controls", "db_name", nullable=False)
66+
67+
op.drop_index("ix_mapped_variants_clinvar_variant_id", "mapped_variants")
68+
op.drop_column("mapped_variants", "clinvar_variant_id")
69+
70+
71+
def downgrade():
72+
op.rename_table("clinical_controls", "clinvar_variants")
73+
op.execute("ALTER SEQUENCE clinical_controls_id_seq RENAME TO clinvar_variants_id_seq")
74+
op.execute("ALTER INDEX clinical_controls_pkey RENAME TO clinvar_variants_pkey")
75+
76+
op.drop_index("ix_clinical_controls_gene_symbol", "clinical_controls")
77+
op.drop_index("ix_clinical_controls_db_name", "clinical_controls")
78+
op.drop_index("ix_clinical_controls_db_identifier", "clinical_controls")
79+
op.drop_index("ix_clinical_controls_db_version", "clinical_controls")
80+
81+
op.alter_column("clinvar_variants", "db_version", nullable=False, new_column_name="clinvar_db_version")
82+
op.alter_column("clinvar_variants", "db_identifier", nullable=False, new_column_name="allele_id")
83+
op.drop_column("clinvar_variants", "db_name")
84+
85+
op.add_column(
86+
"mapped_variants",
87+
sa.Column("clinvar_variant_id", sa.Integer(), sa.ForeignKey("clinvar_variants.id"), nullable=True),
88+
)
89+
90+
# Downgrades a many-to-many relationship to a one to many. This will result in data loss.
91+
op.execute(
92+
"""
93+
UPDATE mapped_variants
94+
SET clinvar_variant_id=mapped_variants_clinical_controls.clinical_control_id
95+
FROM mapped_variants_clinical_controls
96+
WHERE mapped_variants_clinical_controls.mapped_variant_id=mapped_variants.id
97+
"""
98+
)
99+
100+
op.create_index("ix_mapped_variants_clinvar_variant_id", "mapped_variants", ["clinvar_variant_id"])
101+
op.drop_table("mapped_variants_clinical_controls")
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
"""move clingen allele id to mapped variants table
2+
3+
Revision ID: d6e5a9fde3c9
4+
Revises: 695b73abe581
5+
Create Date: 2025-02-19 10:51:07.319962
6+
7+
"""
8+
9+
from alembic import op
10+
import sqlalchemy as sa
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = "d6e5a9fde3c9"
15+
down_revision = "695b73abe581"
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
# ### commands auto generated by Alembic - please adjust! ###
22+
op.drop_index("ix_variants_clingen_allele_id", table_name="variants")
23+
op.add_column("mapped_variants", sa.Column("clingen_allele_id", sa.String(), nullable=True))
24+
op.execute(
25+
"""
26+
UPDATE mapped_variants
27+
SET clingen_allele_id=variants.clingen_allele_id
28+
FROM variants
29+
WHERE variants.id=mapped_variants.variant_id
30+
"""
31+
)
32+
op.drop_column("variants", "clingen_allele_id")
33+
op.create_index(
34+
op.f("ix_mapped_variants_clingen_allele_id"), "mapped_variants", ["clingen_allele_id"], unique=False
35+
)
36+
# ### end Alembic commands ###
37+
38+
39+
def downgrade():
40+
# ### commands auto generated by Alembic - please adjust! ###
41+
op.drop_index(op.f("ix_mapped_variants_clingen_allele_id"), table_name="mapped_variants")
42+
op.add_column("variants", sa.Column("clingen_allele_id", sa.String(), nullable=True))
43+
op.execute(
44+
"""
45+
UPDATE variants
46+
SET clingen_allele_id=mapped_variants.clingen_allele_id
47+
FROM mapped_variants
48+
WHERE variants.id=mapped_variants.variant_id
49+
"""
50+
)
51+
op.drop_column("mapped_variants", "clingen_allele_id")
52+
op.create_index("ix_variants_clingen_allele_id", "variants", ["clingen_allele_id"], unique=False)
53+
# ### end Alembic commands ###
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"""Add ClinGen allele IDs
2+
3+
Revision ID: e8a3b5d8f885
4+
Revises: 4726e4dddde8
5+
Create Date: 2025-01-27 18:55:09.283855
6+
7+
"""
8+
9+
from alembic import op
10+
import sqlalchemy as sa
11+
12+
13+
# revision identifiers, used by Alembic.
14+
revision = "e8a3b5d8f885"
15+
down_revision = "4726e4dddde8"
16+
branch_labels = None
17+
depends_on = None
18+
19+
20+
def upgrade():
21+
op.add_column("variants", sa.Column("clingen_allele_id", sa.String(), nullable=True))
22+
op.create_index(op.f("ix_variants_clingen_allele_id"), "variants", ["clingen_allele_id"], unique=False)
23+
24+
25+
def downgrade():
26+
op.drop_index(op.f("ix_variants_clingen_allele_id"), table_name="variants")
27+
op.drop_column("variants", "clingen_allele_id")

0 commit comments

Comments
 (0)