From 0e89dbee55ae1f5a05a90bc065029f8112d86382 Mon Sep 17 00:00:00 2001 From: giles Date: Sun, 22 Feb 2026 20:59:19 +0000 Subject: [PATCH] Make origin_app migration idempotent Co-Authored-By: Claude Opus 4.6 --- .../o5m3j9k1l2_add_origin_app_column.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/alembic/versions/o5m3j9k1l2_add_origin_app_column.py b/alembic/versions/o5m3j9k1l2_add_origin_app_column.py index cd83123..61e56af 100644 --- a/alembic/versions/o5m3j9k1l2_add_origin_app_column.py +++ b/alembic/versions/o5m3j9k1l2_add_origin_app_column.py @@ -6,6 +6,7 @@ Create Date: 2026-02-22 """ from alembic import op import sqlalchemy as sa +from sqlalchemy import inspect as sa_inspect revision = "o5m3j9k1l2" down_revision = "n4l2i8j0k1" @@ -14,11 +15,19 @@ depends_on = None def upgrade() -> None: - op.add_column( - "ap_activities", - sa.Column("origin_app", sa.String(64), nullable=True), + conn = op.get_bind() + inspector = sa_inspect(conn) + columns = [c["name"] for c in inspector.get_columns("ap_activities")] + if "origin_app" not in columns: + op.add_column( + "ap_activities", + sa.Column("origin_app", sa.String(64), nullable=True), + ) + # Index is idempotent with if_not_exists + op.create_index( + "ix_ap_activity_origin_app", "ap_activities", ["origin_app"], + if_not_exists=True, ) - op.create_index("ix_ap_activity_origin_app", "ap_activities", ["origin_app"]) def downgrade() -> None: