Skip to content

Commit

Permalink
Add cascading (#3823) (patch)
Browse files Browse the repository at this point in the history
### Fixed

- Cascading properties from the devices project
  • Loading branch information
islean authored Oct 14, 2024
1 parent 7df751c commit 69a3fd4
Show file tree
Hide file tree
Showing 2 changed files with 260 additions and 8 deletions.
238 changes: 238 additions & 0 deletions alembic/versions/2024_10_08_3b165ec34791_add_cascading_properties.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,238 @@
"""Add cascading properties
Revision ID: 3b165ec34791
Revises: d6474325c722
Create Date: 2024-10-08 13:53:19.792628
"""

import sqlalchemy as sa

from alembic import op

# revision identifiers, used by Alembic.
revision = "3b165ec34791"
down_revision = "d6474325c722"
branch_labels = None
depends_on = None

illumina_flow_cell_fk_name = "illumina_flow_cell_ibfk_1"
pacbio_smrt_cell_fk_name = "pacbio_smrt_cell_ibfk_1"
instrument_run_fk_name = "fk_device_id"
illumina_sequencing_run_fk_name = "illumina_sequencing_run_ibfk_1"
pacbio_sequencing_run_fk_name = "pacbio_sequencing_run_ibfk_1"
sample_run_metrics_fk_name = "fk_run_metrics_id"
illumina_sample_sequencing_metrics_fk_name = "illumina_sample_sequencing_metrics_ibfk_1"
pacbio_sample_run_metrics_fk_name = "pacbio_sample_run_metrics_ibfk_1"


def upgrade():
op.drop_constraint(
table_name="illumina_flow_cell",
type_="foreignkey",
constraint_name=illumina_flow_cell_fk_name,
)
op.create_foreign_key(
constraint_name=illumina_flow_cell_fk_name,
source_table="illumina_flow_cell",
referent_table="run_device",
ondelete="CASCADE",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="pacbio_smrt_cell", type_="foreignkey", constraint_name=pacbio_smrt_cell_fk_name
)
op.create_foreign_key(
constraint_name=pacbio_smrt_cell_fk_name,
source_table="pacbio_smrt_cell",
referent_table="run_device",
ondelete="CASCADE",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="instrument_run", type_="foreignkey", constraint_name=instrument_run_fk_name
)
op.create_foreign_key(
constraint_name=instrument_run_fk_name,
source_table="instrument_run",
referent_table="run_device",
ondelete="CASCADE",
local_cols=["device_id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="illumina_sequencing_run",
type_="foreignkey",
constraint_name=illumina_sequencing_run_fk_name,
)
op.create_foreign_key(
constraint_name=illumina_sequencing_run_fk_name,
source_table="illumina_sequencing_run",
referent_table="instrument_run",
ondelete="CASCADE",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="pacbio_sequencing_run",
type_="foreignkey",
constraint_name=pacbio_sequencing_run_fk_name,
)
op.create_foreign_key(
constraint_name=pacbio_sequencing_run_fk_name,
source_table="pacbio_sequencing_run",
referent_table="instrument_run",
ondelete="CASCADE",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="sample_run_metrics",
type_="foreignkey",
constraint_name=sample_run_metrics_fk_name,
)
op.create_foreign_key(
constraint_name=sample_run_metrics_fk_name,
source_table="sample_run_metrics",
referent_table="instrument_run",
ondelete="CASCADE",
local_cols=["instrument_run_id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="illumina_sample_sequencing_metrics",
type_="foreignkey",
constraint_name=illumina_sample_sequencing_metrics_fk_name,
)
op.create_foreign_key(
constraint_name=illumina_sample_sequencing_metrics_fk_name,
source_table="illumina_sample_sequencing_metrics",
referent_table="sample_run_metrics",
ondelete="CASCADE",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="pacbio_sample_run_metrics",
type_="foreignkey",
constraint_name=pacbio_sample_run_metrics_fk_name,
)
op.create_foreign_key(
constraint_name=pacbio_sample_run_metrics_fk_name,
source_table="pacbio_sample_run_metrics",
referent_table="sample_run_metrics",
ondelete="CASCADE",
local_cols=["id"],
remote_cols=["id"],
)


def downgrade():
op.drop_constraint(
table_name="pacbio_sample_run_metrics",
type_="foreignkey",
constraint_name=pacbio_sample_run_metrics_fk_name,
)
op.create_foreign_key(
constraint_name=pacbio_sample_run_metrics_fk_name,
source_table="pacbio_sample_run_metrics",
referent_table="sample_run_metrics",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="illumina_sample_sequencing_metrics",
type_="foreignkey",
constraint_name=illumina_sample_sequencing_metrics_fk_name,
)
op.create_foreign_key(
constraint_name=illumina_sample_sequencing_metrics_fk_name,
source_table="illumina_sample_sequencing_metrics",
referent_table="sample_run_metrics",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="sample_run_metrics",
type_="foreignkey",
constraint_name=sample_run_metrics_fk_name,
)
op.create_foreign_key(
constraint_name=sample_run_metrics_fk_name,
source_table="sample_run_metrics",
referent_table="instrument_run",
local_cols=["instrument_run_id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="pacbio_sequencing_run",
type_="foreignkey",
constraint_name=pacbio_sequencing_run_fk_name,
)
op.create_foreign_key(
constraint_name=pacbio_sequencing_run_fk_name,
source_table="pacbio_sequencing_run",
referent_table="instrument_run",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="illumina_sequencing_run",
type_="foreignkey",
constraint_name=illumina_sequencing_run_fk_name,
)
op.create_foreign_key(
constraint_name=illumina_sequencing_run_fk_name,
source_table="illumina_sequencing_run",
referent_table="instrument_run",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="instrument_run", type_="foreignkey", constraint_name=instrument_run_fk_name
)
op.create_foreign_key(
constraint_name=instrument_run_fk_name,
source_table="instrument_run",
referent_table="run_device",
local_cols=["device_id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="pacbio_smrt_cell", type_="foreignkey", constraint_name=pacbio_smrt_cell_fk_name
)
op.create_foreign_key(
constraint_name=pacbio_smrt_cell_fk_name,
source_table="pacbio_smrt_cell",
referent_table="run_device",
local_cols=["id"],
remote_cols=["id"],
)

op.drop_constraint(
table_name="illumina_flow_cell",
type_="foreignkey",
constraint_name=illumina_flow_cell_fk_name,
)
op.create_foreign_key(
constraint_name=illumina_flow_cell_fk_name,
source_table="illumina_flow_cell",
referent_table="run_device",
local_cols=["id"],
remote_cols=["id"],
)
30 changes: 22 additions & 8 deletions cg/store/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1014,7 +1014,9 @@ class IlluminaFlowCell(RunDevice):

__tablename__ = "illumina_flow_cell"

id: Mapped[int] = mapped_column(ForeignKey("run_device.id"), primary_key=True)
id: Mapped[int] = mapped_column(
ForeignKey("run_device.id", ondelete="CASCADE"), primary_key=True
)
model: Mapped[str | None] = mapped_column(
types.Enum("10B", "25B", "1.5B", "S1", "S2", "S4", "SP")
)
Expand All @@ -1027,7 +1029,9 @@ class PacbioSMRTCell(RunDevice):

__tablename__ = "pacbio_smrt_cell"

id: Mapped[int] = mapped_column(ForeignKey("run_device.id"), primary_key=True)
id: Mapped[int] = mapped_column(
ForeignKey("run_device.id", ondelete="CASCADE"), primary_key=True
)

__mapper_args__ = {"polymorphic_identity": DeviceType.PACBIO}

Expand All @@ -1039,7 +1043,7 @@ class InstrumentRun(Base):

id: Mapped[PrimaryKeyInt]
type: Mapped[DeviceType]
device_id: Mapped[int] = mapped_column(ForeignKey("run_device.id"))
device_id: Mapped[int] = mapped_column(ForeignKey("run_device.id", ondelete="CASCADE"))

device: Mapped[RunDevice] = orm.relationship(back_populates="instrument_runs")
sample_metrics: Mapped[list["SampleRunMetrics"]] = orm.relationship(
Expand All @@ -1054,7 +1058,9 @@ class InstrumentRun(Base):
class IlluminaSequencingRun(InstrumentRun):
__tablename__ = "illumina_sequencing_run"

id: Mapped[int] = mapped_column(ForeignKey("instrument_run.id"), primary_key=True)
id: Mapped[int] = mapped_column(
ForeignKey("instrument_run.id", ondelete="CASCADE"), primary_key=True
)
sequencer_type: Mapped[str | None] = mapped_column(
types.Enum("hiseqga", "hiseqx", "novaseq", "novaseqx")
)
Expand Down Expand Up @@ -1090,7 +1096,9 @@ def to_dict(self):
class PacbioSequencingRun(InstrumentRun):
__tablename__ = "pacbio_sequencing_run"

id: Mapped[int] = mapped_column(ForeignKey("instrument_run.id"), primary_key=True)
id: Mapped[int] = mapped_column(
ForeignKey("instrument_run.id", ondelete="CASCADE"), primary_key=True
)
well: Mapped[Str32]
plate: Mapped[int]
run_name: Mapped[Str32 | None]
Expand Down Expand Up @@ -1135,7 +1143,9 @@ class SampleRunMetrics(Base):
__tablename__ = "sample_run_metrics"
id: Mapped[PrimaryKeyInt]
sample_id: Mapped[int] = mapped_column(ForeignKey("sample.id"))
instrument_run_id: Mapped[int] = mapped_column(ForeignKey("instrument_run.id"))
instrument_run_id: Mapped[int] = mapped_column(
ForeignKey("instrument_run.id", ondelete="CASCADE")
)
type: Mapped[DeviceType]

instrument_run: Mapped[InstrumentRun] = orm.relationship(back_populates="sample_metrics")
Expand All @@ -1151,7 +1161,9 @@ class IlluminaSampleSequencingMetrics(SampleRunMetrics):

__tablename__ = "illumina_sample_sequencing_metrics"

id: Mapped[int] = mapped_column(ForeignKey("sample_run_metrics.id"), primary_key=True)
id: Mapped[int] = mapped_column(
ForeignKey("sample_run_metrics.id", ondelete="CASCADE"), primary_key=True
)
flow_cell_lane: Mapped[int | None]
total_reads_in_lane: Mapped[BigInt | None]
base_passing_q30_percent: Mapped[Num_6_2 | None]
Expand All @@ -1167,7 +1179,9 @@ class PacbioSampleSequencingMetrics(SampleRunMetrics):

__tablename__ = "pacbio_sample_run_metrics"

id: Mapped[int] = mapped_column(ForeignKey("sample_run_metrics.id"), primary_key=True)
id: Mapped[int] = mapped_column(
ForeignKey("sample_run_metrics.id", ondelete="CASCADE"), primary_key=True
)
hifi_reads: Mapped[BigInt]
hifi_yield: Mapped[BigInt]
hifi_mean_read_length: Mapped[BigInt]
Expand Down

0 comments on commit 69a3fd4

Please sign in to comment.