43 lines
1.8 KiB
Python
43 lines
1.8 KiB
Python
"""Stage two: immutable evaluations; features and saved views reuse asset revisions."""
|
|
|
|
import sqlalchemy as sa
|
|
from alembic import op
|
|
|
|
revision = "0007"
|
|
down_revision = "0006"
|
|
branch_labels = None
|
|
depends_on = None
|
|
|
|
|
|
def upgrade():
|
|
edges = op.create_table(
|
|
"research_parents",
|
|
sa.Column("child_id", sa.String(36), sa.ForeignKey("research_experiments.id"), primary_key=True),
|
|
sa.Column("parent_kind", sa.String(30), primary_key=True),
|
|
sa.Column("parent_id", sa.String(100), primary_key=True),
|
|
)
|
|
op.create_index("ix_research_parents_parent_id", "research_parents", ["parent_id"])
|
|
experiments = sa.table("research_experiments", sa.column("id"), sa.column("parents", sa.JSON()))
|
|
for row in op.get_bind().execute(sa.select(experiments)).mappings():
|
|
values = [
|
|
{"child_id": row["id"], "parent_kind": kind, "parent_id": parent_id}
|
|
for kind, parent_id in {(p["kind"], p["id"]) for p in row["parents"]}
|
|
]
|
|
if values:
|
|
op.bulk_insert(edges, values)
|
|
op.create_table(
|
|
"research_evaluations",
|
|
sa.Column("id", sa.String(36), primary_key=True),
|
|
sa.Column("alpha_id", sa.String(100), sa.ForeignKey("alphas.id"), nullable=True),
|
|
sa.Column("experiment_id", sa.String(36), sa.ForeignKey("research_experiments.id"), nullable=True),
|
|
sa.Column("report", sa.JSON(), nullable=False),
|
|
sa.Column("created_at", sa.DateTime(timezone=True), nullable=False),
|
|
)
|
|
op.create_index("ix_research_evaluations_alpha_id", "research_evaluations", ["alpha_id"])
|
|
op.create_index("ix_research_evaluations_experiment_id", "research_evaluations", ["experiment_id"])
|
|
|
|
|
|
def downgrade():
|
|
op.drop_table("research_evaluations")
|
|
op.drop_table("research_parents")
|